That's exactly what FiPy does if you pass in a CellVariable diffusion coefficient. There can be times you'll want to choose a different average, but if that's the case, you should have been doing it when you declared your DiffusionTerm.
The ConvectionTerm is more complicated, as discussed in https://github.com/usnistgov/fipy/issues/461. The exact weighting between values at cell centers and values at faces depends on both the convection scheme you choose and on the Peclet number (which depends on the diffusion coefficient and how you interpolate that). What you've written is about as good as you're going to get without doing a *lot* more work. You should not try to cast convCoeff or Psi.faceGrad to a cell-centered value, as we provide no divergence operator on cell vectors. On Feb 18, 2016, at 9:35 AM, James Pringle <[email protected]> wrote: > p.s. the following code works fairly well -- > > crossIsoAdvec_modGrid=(Psi.arithmeticFaceValue * convCoeff).divergence > botFricCurl_modGrid=(DiffCoeff.arithmeticFaceValue * > Psi.faceGrad).divergence > > I just want to make sure it is somewhat sensible... > > On Thu, Feb 18, 2016 at 9:28 AM, James Pringle <[email protected]> wrote: > Dear Jon -- > > I am having a bit of a problem with your technique. All of my > coefficients vary in space, e.g. they are define as follows: > > mesh = Grid2D(Lx=Lx,Ly=Ly, nx=nx, ny=ny) > > convCoeff=FaceVariable(mesh=mesh,rank=1) > convCoeff.value[0,:]=.... > convCoeff.value[1,:]= .... > > DiffCoeff=CellVariable(mesh=mesh, rank=0) > DiffCoeff.value = ... > > eq = > (DiffusionTerm(var=Psi,coeff=DiffCoeff)+ExponentialConvectionTerm(var=Psi,coeff=convCoeff)) > eq.solve(var=Psi) > > So when I try to implement your suggestions of (DiffCoeff * > Psi.faceGrad).divergence or (Psi * convCoeff).divergence I get errors because > DiffCoeff is a Cell variable, and Psi.faceGrad is a face variable. Likewise > for Psi*convCoeff > > So what is the most numerically constant way to solve this issue -- map > DiffCoeff to face, or Psi.faceGrad to cell? Likewise should I map convCoeff > to cell or Psi to face? I want to do it in the way that is most consistent > with the underlying numerics. > > Thanks > Jamie > > On Wed, Feb 17, 2016 at 9:43 AM, James Pringle <[email protected]> wrote: > Thank you, Jon, that is helpful. I would love to have the ability to find the > individual terms of the equation as calculated in the matrix that is solved > by fiPy. This would make closing budgets, etc, easier. But your solution is a > good start. > > Thanks again > Jamie Pringle > University of New Hampshire > > On Tue, Feb 16, 2016 at 4:53 PM, Guyer, Jonathan E. Dr. > <[email protected]> wrote: > James - > > I don't think there's a straightforward way to get at this. > > You can certainly write the explicit forms, e.g., > > (DiffCoeff * Psi.faceGrad).divergence > > or > > (Psi * convCoeff).divergence > > but this isn't exactly the same as the matrix FiPy builds, as discussed at > https://github.com/usnistgov/fipy/issues/461. > > I can see the value for diagnosing and simply understanding mechanisms, so > I'll think about ways we might provide access to this. > > - Jon > > On Feb 12, 2016, at 10:18 AM, James Pringle <[email protected]> wrote: > > > I feel this should be an elementary question, but I can't seem to figure > > out how to answer it. I am solving a simple linear elleptic-ish equation > > with > > > > eq = > > (DiffusionTerm(var=Psi,coeff=DiffCoeff)+ExponentialConvectionTerm(var=Psi,coeff=convCoeff)) > > eq.solve(var=Psi) > > > > This works fine; the solution matches what I would expect. I have two > > questions: > > > > First, how can I obtain the value of the individual terms of the equation, > > evaluated with the solution in Psi? > > > > Second, is there any way to define my own new Psi (which is not an exact > > solution to the equation), and easily evaluate the DiffusionTerm and > > ExponentialConvectionTerm for that Psi? > > > > I am trying to illustrate how various parts of the solution evolve over the > > solution space, and how various approximations to the full solution differ > > from the full solution. > > > > Thanks to all who glance at this > > James Pringle > > University of New Hampshire > > > > _______________________________________________ > > fipy mailing list > > [email protected] > > http://www.ctcms.nist.gov/fipy > > [ NIST internal ONLY: https://email.nist.gov/mailman/listinfo/fipy ] > > > _______________________________________________ > fipy mailing list > [email protected] > http://www.ctcms.nist.gov/fipy > [ NIST internal ONLY: https://email.nist.gov/mailman/listinfo/fipy ] > > > > _______________________________________________ > fipy mailing list > [email protected] > http://www.ctcms.nist.gov/fipy > [ NIST internal ONLY: https://email.nist.gov/mailman/listinfo/fipy ] _______________________________________________ fipy mailing list [email protected] http://www.ctcms.nist.gov/fipy [ NIST internal ONLY: https://email.nist.gov/mailman/listinfo/fipy ]
