Phi = 0 is a solution. Are you suggesting that this set of equations has more than one solution?

I realize you are not solving Poisson's equation. My question was to consider the broader physics of the problem. Physically, non-uniform electric field means either that charge is non-uniform, which is not in your problem, or permittivity is non-uniform, which is not in your problem. So, what's in your problem that resolves that physical inconsistency?. > On Jun 14, 2019, at 10:53 AM, Scott Calabrese Barton <s...@msu.edu> wrote: > > To answer your questions first, the non-zero gradient in Phi counteracts the > gradients in C2 and C3 such that the migration and diffusion flux cancel and > overall flux is zero for those species. Regarding the curvature, you’re > thinking of the Poisson equation that is only valid in this context when > concentrations are constant. The variations in concentration give rise to > nonlinear variations in Phi. > > Perhaps I should point out that we can get the numerical solution using other > solvers such as solve_bvp from scipy, and an analytical solution is also > available (that’s the source of the plot). So the problem is well defined. > I’ll be happy to share those calculations if needed. I’m using this problem > as an example to learn more about fipy. > >> On Jun 14, 2019, at 9:10 AM, Guyer, Jonathan E. Dr. (Fed) via fipy >> <fipy@nist.gov> wrote: >> >> I had the same initial thought, but you're not adding new information by >> doing that. You can see this by looking at the matrix stencil that results >> from these equations: >> >> X X C1 >> X C2 >> XX C3 = 0 >> XXX Phi >> >> That bottom right sector of the matrix is empty and so the matrix solvers >> cannot find a solution because you're now trying to solve for four unknowns >> with what are really only three equations. >> >> Things to consider: >> >> In the solution you posted from West, Phi does not have zero gradient at >> either end of the domain. Why? What boundary condition is driving that? >> >> Phi is curved, which implies that there is net charge in the system, but you >> assert zero charge throughout. How does West reconcile that inconsistency? >> >>> On Jun 13, 2019, at 11:25 AM, Scott Calabrese Barton <s...@msu.edu> wrote: >>> >>> That’s true, so we can make C3 explicit (full code at >>> http://bit.ly/2F7UQgR= ): >>> >>> # Variables >>> C1= CellVariable(mesh = mesh, value = 1.0) >>> C2= CellVariable(mesh = mesh, value = 4.0/3.0) >>> Phi = CellVariable(mesh = mesh, value = 0) >>> >>> C30 = -1/z3 * (z1*1.0 + z2*C20) # Electroneutrality >>> C3= CellVariable(mesh = mesh, value = C30) >>> >>> # Boundary Conditions >>> C1.constrain(1.0, mesh.facesRight) >>> C2.constrain(C20, mesh.facesRight) >>> C3.constrain(C30, mesh.facesRight) >>> Phi.constrain(-0.2, mesh.facesRight) >>> C1.constrain(0.0, mesh.facesLeft) >>> >>> # Governing Equations >>> Eq1 = + DiffusionTerm(coeff=z1*C1, var=Phi) + DiffusionTerm(coeff=1.0, >>> var=C1) >>> Eq2 = + DiffusionTerm(coeff=z2*C2, var=Phi) + DiffusionTerm(coeff=1.0, >>> var=C2) >>> Eq3 = + DiffusionTerm(coeff=z3*C3, var=Phi) + DiffusionTerm(coeff=1.0, >>> var=C3) >>> >>> Eq4 = ImplicitSourceTerm(coeff=z1, var=C1) + \ >>> ImplicitSourceTerm(coeff=z2, var=C2) + \ >>> ImplicitSourceTerm(coeff=z3, var=C3) >>> >>> Eqns = Eq1 & Eq2 & Eq3 & Eq4 >>> >>> >>> However, this set of equations does not converge. I’m fairly certain that I >>> am mismanaging the boundary conditions. >>> >>> >>>> On Jun 12, 2019, at 5:02 PM, Guyer, Jonathan E. Dr. (Fed) via fipy >>>> <fipy@nist.gov> wrote: >>>> >>>> There's no zero-flux BC on C3 because there's no such thing as C3 as far >>>> as FiPy is concerned. The boundary conditions on C3 are entirely >>>> determined by the boundary conditions on C1 and C2 (Dirichlet on the right >>>> and Robin on the left). The solution obtained satisfies the equations and >>>> boundary conditions given to FiPy. >>>> >>>>> On Jun 12, 2019, at 2:19 PM, Scott Calabrese Barton <s...@msu.edu> wrote: >>>>> >>>>> Jon, thanks for catching that typo. I wish it were the problem! >>>>> >>>>> The solution with grad phi=0 does not satisfy the zero-flux boundary >>>>> condition on species 3. In the absence of a potential gradient, that >>>>> species would need to also have zero gradient (like species 2 in the >>>>> current solution). >>>>> >>>>> So the question becomes how to enforce that zero-flux BC. Any >>>>> suggestions? I could drop the conservation equation and replace it with >>>>> something that enforces zero-flux everywhere, but I’d prefer to use a >>>>> boundary condition as that would be more applicable in higher dimensions. >>>>> >>>>> ☘ >>>>> >>>>> >>>>>> On Jun 12, 2019, at 1:36 PM, Guyer, Jonathan E. Dr. (Fed) via fipy >>>>>> <fipy@nist.gov> wrote: >>>>>> >>>>>> Scott - >>>>>> >>>>>> Eq2 appears to have a typo: >>>>>> >>>>>> -Eq2 = DiffusionTerm(coeff=z2*C1, var=Phi) + DiffusionTerm(coeff=1.0, >>>>>> var=C2) >>>>>> +Eq2 = DiffusionTerm(coeff=z2*C2, var=Phi) + DiffusionTerm(coeff=1.0, >>>>>> var=C2) >>>>>> >>>>>> Eq3 has (much) better coupling if written like this: >>>>>> >>>>>> -Eq3 = DiffusionTerm(coeff=z3*C3, var=Phi) + (C3.faceGrad).divergence >>>>>> +Eq3 = DiffusionTerm(coeff=z3*C3, var=Phi) - DiffusionTerm(coeff=-z1/z3, >>>>>> var=C1) - DiffusionTerm(coeff=-z2/z3, var=C2) >>>>>> >>>>>> [Note that this way you don't need to evaluate .faceGrad at the >>>>>> boundaries, so your issue #650 doesn't come up. We don't upwind at the >>>>>> boundaries because it's complicated and expensive to do right and it's >>>>>> unusual to care.] >>>>>> >>>>>> With these changes, the solution converges in one sweep, but does not >>>>>> agree with the Analytical Solution you give from West. >>>>>> >>>>>> I don't understand a couple of things though. As posed, what governs >>>>>> \Phi? I get \Phi = 0 and see no reason why it would be otherwise. >>>>>> Typically, I would expect Poisson's equation to be obeyed. Since you >>>>>> assert charge electroneutrality, this reduces to Laplace's equation, but >>>>>> in that case, the slope of \Phi should be constant (unless the >>>>>> permittivity is non-uniform, but you don't have a permittivity). In the >>>>>> Analytical plot, \Phi has definite curvature. >>>>>> >>>>>> My guess is you don't need Eq3 (it'll get taken care of automatically) >>>>>> and you need some form of Poisson's equation. >>>>>> >>>>>> - Jon >>>>>> >>>>>>> On Jun 11, 2019, at 4:48 PM, Scott Calabrese Barton <s...@msu.edu> >>>>>>> wrote: >>>>>>> >>>>>>> I’ve had some trouble using fipy for the 1D, steady-state ternary >>>>>>> electrolyte problem, which involves coupled, nonlinear migration and >>>>>>> diffusion. >>>>>>> >>>>>>> A text version of the model is listed below. A more complete >>>>>>> development is at http://bit.ly/2wJDXob== >>>>>>> >>>>>>> from fipy import * >>>>>>> >>>>>>> # Parameters >>>>>>> nx=50 >>>>>>> C20=4.0/3.0 >>>>>>> z1, z2, z3= 2.0, -2.0, 1.0 >>>>>>> >>>>>>> # Mesh >>>>>>> mesh = Grid1D(nx=nx, dx=1.0/nx) >>>>>>> >>>>>>> # Variables >>>>>>> C1= CellVariable(mesh = mesh, value = 1.0) >>>>>>> C2= CellVariable(mesh = mesh, value = 4.0/3.0) >>>>>>> Phi = CellVariable(mesh = mesh, value = -0.5) >>>>>>> >>>>>>> # Electroneutrality >>>>>>> C3 = -1/z3 * (z1*C1 + z2*C2) >>>>>>> >>>>>>> # Boundary Conditions >>>>>>> C1.constrain(1.0, mesh.facesRight) >>>>>>> C1.constrain(0.0, mesh.facesLeft) >>>>>>> C2.constrain(C20, mesh.facesRight) >>>>>>> Phi.constrain(0, mesh.facesRight) >>>>>>> >>>>>>> # Governing Equations >>>>>>> Eq1 = DiffusionTerm(coeff=z1*C1, var=Phi) + DiffusionTerm(coeff=1.0, >>>>>>> var=C1) >>>>>>> Eq2 = DiffusionTerm(coeff=z2*C1, var=Phi) + DiffusionTerm(coeff=1.0, >>>>>>> var=C2) >>>>>>> Eq3 = DiffusionTerm(coeff=z3*C3, var=Phi) + (C3.faceGrad).divergence >>>>>>> >>>>>>> Eqns = Eq1 & Eq2 & Eq3 >>>>>>> >>>>>>> # Solution >>>>>>> res = 1e+10 >>>>>>> restol= 1e-3 >>>>>>> >>>>>>> while res > restol: >>>>>>> res = Eqns.sweep() >>>>>>> print(res) >>>>>>> >>>>>>> >>>>>>> However, this system does not converge. I suspect the issue is with >>>>>>> boundary conditions. I’ve tried zeroing out the diffusion coefficients >>>>>>> at the boundary, but that does not seem to make a difference here. I am >>>>>>> able to use this approach for the analogous binary problem: >>>>>>> http://bit.ly/2wOzxfK== >>>>>>> >>>>>>> Any insights or suggestions would be welcome. >>>>>>> >>>>>>> Cheers, >>>>>>> Scott☘ >>>>>>> >>>>>>> >>>>>>> _______________________________________________ >>>>>>> fipy mailing list >>>>>>> fipy@nist.gov >>>>>>> http://www.ctcms.nist.gov/fipy== >>>>>>> [ NIST internal ONLY: https://email.nist.gov/mailman/listinfo/fipy== >>>>>>> ] >>>>>> >>>>>> >>>>>> _______________________________________________ >>>>>> fipy mailing list >>>>>> fipy@nist.gov >>>>>> http://www.ctcms.nist.gov/fipy== >>>>>> [ NIST internal ONLY: https://email.nist.gov/mailman/listinfo/fipy== ] >>>>>> >>>>> >>>>> >>>>> _______________________________________________ >>>>> fipy mailing list >>>>> fipy@nist.gov >>>>> http://www.ctcms.nist.gov/fipy== >>>>> [ NIST internal ONLY: https://email.nist.gov/mailman/listinfo/fipy== ] >>>> >>>> >>>> _______________________________________________ >>>> fipy mailing list >>>> fipy@nist.gov >>>> http://www.ctcms.nist.gov/fipy== >>>> [ NIST internal ONLY: https://email.nist.gov/mailman/listinfo/fipy== ] >>>> >>> >> >> >> _______________________________________________ >> fipy mailing list >> fipy@nist.gov >> http://www.ctcms.nist.gov/fipy= >> [ NIST internal ONLY: https://email.nist.gov/mailman/listinfo/fipy= ] >> > _______________________________________________ fipy mailing list fipy@nist.gov http://www.ctcms.nist.gov/fipy [ NIST internal ONLY: https://email.nist.gov/mailman/listinfo/fipy ]