Thanks, Daniel. Congrats on making the switch! I submitted a pull request,
but I'm not sure everything is done correctly; feel free to follow up. In
particular, I didn't know how to test to make sure all my equations/images,
etc. would be rendered correctly by the mesh1D.py->browser process.

Ray

On Thu, Sep 25, 2014 at 12:16 PM, Daniel Wheeler <daniel.wheel...@gmail.com>
wrote:

> Hi Raymond,
>
> We moved FiPy to Github very recently and I was wondering if you would
> like to submit this patch as a pull-request so you can get credit for your
> changes.
>
> Thanks,
>
> Daniel
>
> On Mon, Aug 18, 2014 at 4:48 PM, Raymond Smith <smit...@mit.edu> wrote:
>
>> Also, I'm not sure if this is what you meant by the doctests, but I have
>> added something that may be along the lines of what you were talking about.
>>
>> I attached a diff to the ticket in case the git path doesn't work,.
>>
>> Ray
>>
>> diff --git a/examples/diffusion/mesh1D.py b/examples/diffusion/mesh1D.py
>> index 71f2da4..9e6e705 100755
>> --- a/examples/diffusion/mesh1D.py
>> +++ b/examples/diffusion/mesh1D.py
>> @@ -450,6 +450,81 @@ And finally, we can plot the result
>>
>>
>>  ------
>>
>> +Note that for problems involving heat transfer and other similar
>> +conservation equations, it is important to ensure that we begin with
>> +the correct form of the equation. For example, for heat transfer with
>> +:math:`\phi` representing the temperature,
>> +
>> +.. math::
>> +    \frac{\partial \rho \hat{C}_p \phi}{\partial t} = \nabla \cdot [ k
>> \nabla \phi ].
>> +
>> +With constant and uniform density :math:`\rho`, heat capacity
>> :math:`\hat{C}_p`
>> +and thermal conductivity :math:`k`, this is often written like Eq.
>> +:eq:`eq:diffusion:mesh1D:constantD`, but replacing :math:`D` with
>> :math:`\alpha =
>> +\frac{k}{\rho \hat{C}_p}`. However, when these parameters vary either in
>> position
>> +or time, it is important to be careful with the form of the equation
>> used. For
>> +example, if :math:`k = 1` and
>> +
>> +.. math::
>> +   \rho \hat{C}_p = \begin{cases}
>> +   1& \text{for \( 0 < x < L / 4 \),} \\
>> +   10& \text{for \( L / 4 \le x < 3 L / 4 \),} \\
>> +   1& \text{for \( 3 L / 4 \le x < L \),}
>> +   \end{cases},
>> +
>> +then we have
>> +
>> +.. math::
>> +   \alpha = \begin{cases}
>> +   1& \text{for \( 0 < x < L / 4 \),} \\
>> +   0.1& \text{for \( L / 4 \le x < 3 L / 4 \),} \\
>> +   1& \text{for \( 3 L / 4 \le x < L \),}
>> +   \end{cases}.
>> +
>> +However, using a ``DiffusionTerm`` with the same coefficient as that in
>> the
>> +section above is incorrect, as the steady state governing equation
>> reduces to
>> +:math:`0 = \nabla^2\phi`, which results in a linear profile in 1D,
>> unlike that
>> +for the case above with spatially varying diffusivity. Similar care must
>> be
>> +taken if there is time dependence in the parameters in transient
>> problems.
>> +
>> +We can illustrate the differences with an example. We define field
>> +variables for the correct and incorrect solution
>> +
>> +>>> phiT = CellVariable(name="correct", mesh=mesh)
>> +>>> phiF = CellVariable(name="incorrect", mesh=mesh)
>> +>>> phiT.faceGrad.constrain([fluxRight], mesh.facesRight)
>> +>>> phiF.faceGrad.constrain([fluxRight], mesh.facesRight)
>> +>>> phiT.constrain(valueLeft, mesh.facesLeft)
>> +>>> phiF.constrain(valueLeft, mesh.facesLeft)
>> +>>> phiT.setValue(0)
>> +>>> phiF.setValue(0)
>> +
>> +The relevant parameters are
>> +
>> +>>> k = 1.
>> +>>> alpha_false = FaceVariable(mesh=mesh, value=1.0)
>> +>>> X = mesh.faceCenters[0]
>> +>>> alpha_false.setValue(0.1, where=(L / 4. <= X) & (X < 3. * L / 4.))
>> +>>> eqF = 0 == DiffusionTerm(coeff=alpha_false)
>> +>>> eqT = 0 == DiffusionTerm(coeff=k)
>> +>>> eqF.solve(var=phiF)
>> +>>> eqT.solve(var=phiT)
>> +
>> +Comparing to the correct analytical solution, :math:`\phi = x`
>> +
>> +>>> x = mesh.cellCenters[0]
>> +>>> phiAnalytical.setValue(x)
>> +>>> print phiT.allclose(phiAnalytical, atol = 1e-8, rtol = 1e-8) #
>> doctest: +SCIPY
>> +1
>> +
>> +and finally, plot
>> +
>> +>>> if __name__ == '__main__':
>> +...     Viewer(vars=(phiT, phiF)).plot()
>> +...     raw_input("Non-uniform thermal conductivity. Press <return> to
>> proceed...")
>> +
>> +------
>> +
>>  Often, the diffusivity is not only non-uniform, but also depends on
>>  the value of the variable, such that
>>
>>
>>
>>
>> On Mon, Aug 18, 2014 at 4:35 PM, Raymond Smith <smit...@mit.edu> wrote:
>>
>>> Hi Jonathan,
>>>
>>> I pulled, branched, committed, and fetched/merged develop according to
>>> the instructions on the linked site, but my repo isn't publicly available
>>> online. When I do a
>>>
>>> $ git format-patch
>>>
>>> I get no output. My git log shows
>>>
>>> commit 6d571b83dc5dfdeb16cae51b016b69cb279d5450
>>> Author: Raymond Smith <raymondbarrettsm...@gmail.com>
>>> Date:   Mon Aug 18 16:23:15 2014 -0400
>>>
>>>     Add heat transfer example to mesh1D.
>>>
>>> andgit status shows
>>>
>>> On branch
>>> ticket670-Remind_users_of_different_types_of_conservation_equations
>>> nothing to commit, working directory clean
>>>
>>> Sorry, I must be missing something.
>>>
>>> Ray
>>>
>>>
>>> On Mon, Aug 18, 2014 at 3:14 PM, Guyer, Jonathan E. Dr. <
>>> jonathan.gu...@nist.gov> wrote:
>>>
>>>> Your patch looks a good start to me and I think after the non-uniform
>>>> diffusivity is the right place to put it. Can you add doctests of both
>>>> desired and undesired behavior?
>>>>
>>>> We expect to be migrating to github "soon", when pull requests will be
>>>> easier, but in the meantime an email patch is OK. Somewhat better would be
>>>> what we do in our own development:
>>>>
>>>>
>>>> http://www.ctcms.nist.gov/fipy/documentation/ADMINISTRATA.html#submit-branch-for-code-review
>>>>
>>>> In short, file a ticket on matforge and then attach either your `git
>>>> request-pull` or your `git format-patch` results to the ticket. This makes
>>>> it a bit easier to keep track and make sure we don't permanently lose any
>>>> patches (for instance, I'd test and merge your patch right now, but I just
>>>> moved to a new laptop and everything is broken).
>>>>
>>>> On Aug 18, 2014, at 2:00 PM, Raymond Smith <smit...@mit.edu> wrote:
>>>>
>>>> > Hi, Jonathan.
>>>> >
>>>> > I didn't know how to submit a pull request on MatForge, so here
>>>> (attached and pasted below) is a git diff of mesh1D.py. I added a small
>>>> section discussing the import of keeping the original governing equation in
>>>> mind when parameters vary with a specific example from heat transfer. I
>>>> didn't know where it would fit best in the example; I added it after the
>>>> non-uniform diffusivity section. If you have suggestions, I can edit.
>>>> >
>>>> > Ray
>>>> >
>>>> >
>>>> >
>>>> > diff --git a/examples/diffusion/mesh1D.py
>>>> b/examples/diffusion/mesh1D.py
>>>> > index 71f2da4..3c5209f 100755
>>>> > --- a/examples/diffusion/mesh1D.py
>>>> > +++ b/examples/diffusion/mesh1D.py
>>>> > @@ -450,6 +450,45 @@ And finally, we can plot the result
>>>> >
>>>> >  ------
>>>> >
>>>> > +Note that for problems involving heat transfer and other similar
>>>> > +conservation equations, it is important to ensure that we begin with
>>>> > +the correct form of the equation. For example, for heat transfer with
>>>> > +:math:`\phi` representing the temperature,
>>>> > +
>>>> > +.. math::
>>>> > +    \frac{\partial \rho \hat{C}_p \phi}{\partial t} = \nabla \cdot [
>>>> k \nabla \phi ].
>>>> > +
>>>> > +With constant and uniform density :math:`\rho`, heat capacity
>>>> :math:`\hat{C}_p`
>>>> > +and thermal conductivity :math:`k`, this is often written like Eq.
>>>> > +:eq:`eq:diffusion:mesh1D:constantD`, but replacing :math:`D` with
>>>> :math:`\alpha =
>>>> > +\frac{k}{\rho \hat{C}_p}`. However, when these parameters vary
>>>> either in position
>>>> > +or time, it is important to be careful with the form of the equation
>>>> used. For
>>>> > +example, if :math:`k = 1` and
>>>> > +
>>>> > +.. math::
>>>> > +   \rho \hat{C}_p = \begin{cases}
>>>> > +   1& \text{for \( 0 < x < L / 4 \),} \\
>>>> > +   10& \text{for \( L / 4 \le x < 3 L / 4 \),} \\
>>>> > +   1& \text{for \( 3 L / 4 \le x < L \),}
>>>> > +   \end{cases},
>>>> > +
>>>> > +then we have
>>>> > +
>>>> > +.. math::
>>>> > +   \alpha = \begin{cases}
>>>> > +   1& \text{for \( 0 < x < L / 4 \),} \\
>>>> > +   0.1& \text{for \( L / 4 \le x < 3 L / 4 \),} \\
>>>> > +   1& \text{for \( 3 L / 4 \le x < L \),}
>>>> > +   \end{cases}.
>>>> > +
>>>> > +However, using a ``DiffusionTerm`` with the same coefficient as that
>>>> in the
>>>> > +section above is incorrect, as the steady state governing equation
>>>> reduces to
>>>> > +:math:`0 = \nabla^2\phi`, which results in a linear profile in 1D,
>>>> unlike that
>>>> > +for the case above with spatially varying diffusivity. Similar care
>>>> must be
>>>> > +taken if there is time dependence in the parameters in transient
>>>> problems.
>>>> > +
>>>> > +------
>>>> > +
>>>> >  Often, the diffusivity is not only non-uniform, but also depends on
>>>> >  the value of the variable, such that
>>>> >
>>>> >
>>>> >
>>>> > On Mon, Aug 18, 2014 at 10:54 AM, Guyer, Jonathan E. Dr. <
>>>> jonathan.gu...@nist.gov> wrote:
>>>> > Conor and Raymond -
>>>> >
>>>> > Thank you both for posting your findings and interpretation of the
>>>> issue. I agree that this would be a useful issue to make clear in the
>>>> documentation. We would welcome a patch or pull request from either of you
>>>> to illustrate this situation in 'examples.diffusion.mesh1D'.
>>>> >
>>>> >
>>>> > On Aug 18, 2014, at 9:36 AM, Raymond Smith <smit...@mit.edu> wrote:
>>>> >
>>>> > > Hi Conor,
>>>> > >
>>>> > > Just to add to your observations, I'm guessing FiPy is "correct"
>>>> here in both situations, and as you noticed, the original input with a
>>>> thermal diffusivity is simply not the correct representation of your
>>>> physical situation. The actual conservation equation for thermal energy is
>>>> (neglecting convection and source terms)
>>>> > >
>>>> > > \frac{\partial rho * c_p * T}{\partial t} = \nabla\cdot(k\nabla T)
>>>> > >
>>>> > > So if you have spatially varying rho and c_p, you cannot sweep them
>>>> into the coefficient for the flux term, else they will appear inside FiPy's
>>>> divergence operator. They are often combined with k to form alpha for the
>>>> convenience of writing it like the mass conservation (diffusion) equation
>>>> (when chemical diffusivity is constant), but it's always important to start
>>>> from the correct conserved quantities. I would guess that if you run it
>>>> with any rho, c_p that are the same in the concrete and insulator, you will
>>>> get the correct result with the "alpha form" because, being both constant
>>>> and uniform, they can be swept into and out of either type of partial
>>>> derivative.
>>>> > >
>>>> > > Cheers,
>>>> > > Ray
>>>> > >
>>>> > >
>>>> > > On Mon, Aug 18, 2014 at 8:51 AM, Conor Fleming <
>>>> conor.flem...@eng.ox.ac.uk> wrote:
>>>> > > Hi Kris,
>>>> > >
>>>> > >
>>>> > > I have identified the cause of this difference - I had not
>>>> specified the governing equation correctly in FiPy. Originally, I had
>>>> prescribed the heat equation as follows:
>>>> > >
>>>> > >
>>>> > >     eqn = TransientTerm() == DiffusionTerm(coeff=alpha)
>>>> > >
>>>> > >
>>>> > > where the thermal diffusivity alpha is
>>>> > >
>>>> > >
>>>> > >     alpha = k / (rho * c_p),
>>>> > >
>>>> > >
>>>> > > and FiPY gives an erroneous answer. Additionally, solving the
>>>> steady equation 'DiffusionTerm(coeff=alpha)==0' also yields an incorrect
>>>> result where (rho*c_p) has a value other than unity. I have realised that
>>>> the equation should be specified as
>>>> > >
>>>> > >
>>>> > >     eqn = TransientTerm(coeff=C) == DiffusionTerm(coeff=k)
>>>> > >
>>>> > >
>>>> > > where the volumetric heat capacity is C = rho * c_p and k is the
>>>> thermal conductivity. For a steady case, this equation reduces to
>>>> 'DiffusionTerm(coeff=k)==0'  and gives a correct result.
>>>> > >
>>>> > >
>>>> > > I have attached a figure with the updated comparison of FiPy and
>>>> TEMP/W for an insulated concrete slab, showing perfect agreement.
>>>> > >
>>>> > >
>>>> > > I hope this result is useful to other FiPy users. It may be helpful
>>>> to add a note to the documentation page 'examples.diffusion.mesh1D',
>>>> explaining that for some applications, e.g. the heat equation, it is
>>>> appropriate to separate the (thermal) diffusivity into two portions, which
>>>> act on the TransientTerm and DiffusionTerm respectively.
>>>> > >
>>>> > >
>>>> > > Many thanks,
>>>> > >
>>>> > > Conor
>>>> > >
>>>> > >
>>>> > > From: fipy-boun...@nist.gov [fipy-boun...@nist.gov] on behalf of
>>>> Conor Fleming [conor.flem...@eng.ox.ac.uk]
>>>> > > Sent: 08 August 2014 17:24
>>>> > > To: fipy@nist.gov
>>>> > > Subject: RE: Unexpected result, possibly wrong, result solving 1D
>>>> unsteady heat equation with spatially-varying diffusion coefficient
>>>> > >
>>>> > > Hi Kris,
>>>> > >
>>>> > >
>>>> > > Thank you for the prompt response. You are right - altering the
>>>> insulation conductivity in the FiPy model to k_ins=0.1 improves the
>>>> agreement. I have just checked TEMP/W again, and can confirm that
>>>> k_ins=0.212 in that model. Specific heat capacity and density match as
>>>> well. I will read up on FE and FD implementations generally to see if I can
>>>> spot any issues on that side.
>>>> > >
>>>> > >
>>>> > > Many thanks,
>>>> > >
>>>> > > Conor
>>>> > >
>>>> > >
>>>> > > From: fipy-boun...@nist.gov [fipy-boun...@nist.gov] on behalf of
>>>> Kris Kuhlman [kristopher.kuhl...@gmail.com]
>>>> > > Sent: 08 August 2014 17:04
>>>> > > To: fipy@nist.gov
>>>> > > Subject: Re: Unexpected result, possibly wrong, result solving 1D
>>>> unsteady heat equation with spatially-varying diffusion coefficient
>>>> > >
>>>> > > Conor,
>>>> > >
>>>> > > if you reduce the thermal conductivity in the insulation to about
>>>> 0.1, the fipy solution looks about like the other model (the knee in T is
>>>> about at 400 degrees C).  Is there an issue with how your compute or
>>>> specify this in fipy or the other model?
>>>> > >
>>>> > > Kris
>>>> > >
>>>> > >
>>>> > > On Fri, Aug 8, 2014 at 9:35 AM, Conor Fleming <
>>>> conor.flem...@eng.ox.ac.uk> wrote:
>>>> > > Hi,
>>>> > >
>>>> > > I am using FiPy to determine the depth of heat penetration into
>>>> concrete structures due to fire over a certain period of time. I am solving
>>>> the unsteady heat equation on a 1D grid, and modelling various scenarios,
>>>> e.g. time-dependent temperature boundary condition, temperature-dependent
>>>> diffusion coefficient. For these cases, the model compares very well to
>>>> results from other solvers (for example the commercial finite element
>>>> solver TEMP/W). However I am having trouble modelling problems with a
>>>> spatially-varying diffusion coefficient, in particular, a two layer model
>>>> representing a concrete wall covered with a layer of insulating material.
>>>> > >
>>>> > > I have attached a number of images to clarify the issue. The first,
>>>> 'FiPy_TEMPW_insulation_only.png' shows the temperature distribution in a
>>>> single material (the insulation) with constant diffusivity, D_ins, when a
>>>> constant temperature of 1200 C is applied at one boundary for 3 hours. The
>>>> FiPy result agrees very well with the analytical solution
>>>> > >
>>>> > >     1 - erf(x/2(sqrt(D_ins t))*1200 +20,
>>>> > >
>>>> > > taken from the examples.diffusion.mesh1D example (scaled and
>>>> shifted appropriately) and with a numerical solution calculated using
>>>> TEMP/W (using the same spatial and temporal discretisation, material
>>>> properties and boundary conditions). The three results agree well, showing
>>>> that the FiPy model is performing as expected.
>>>> > >
>>>> > > The second figure, 'FiPy_TEMPW_insulated_concrete.png', presents
>>>> the temperature distribution through an insulated concrete wall (where for
>>>> simplicity the concrete is also modelled with constant diffusivity, D_con)
>>>> for the same surface temperature and period. There is now a considerable
>>>> difference between the FiPy and TEMP/W predictions. The FiPy model predicts
>>>> a lower temperature gradient in the insulation layer, which leads to higher
>>>> temperatures throughout the domain.
>>>> > >
>>>> > > I am confident that the TEMP/W result is accurate, as it agrees
>>>> perfectly with a simple explicit finite difference solution coded in
>>>> FORTRAN. I have tried to identify any coding errors I have made in my FiPy
>>>> script. I am aware that diffusion terms are solved at the grid faces, so
>>>> when the diffusion coefficient is a function of a CellVariable, an
>>>> appropriate interpolation scheme must be used to obtain sensible face
>>>> values. However, in my case the diffusion coefficients, D_ins and D_conc,
>>>> are created as FaceVariables and assigned constant values. I have also
>>>> examined the effects of space and time discretisation, implicit and
>>>> explicit DiffusionTerm, multiple sweeps per timestep, but these have made
>>>> no significant difference.
>>>> > >
>>>> > > I would be very interested to hear anyone's opinion on what I might
>>>> be doing wrong here. Also, does anyone think it is possible for FiPy to
>>>> deliver an accurate result, and for the finite difference and finite volume
>>>> solvers to be wrong? Below this email I have written out a minimal working
>>>> example, which reproduces the 'FiPy' curve from figure
>>>> 'FiPy_TEMPW_insulated_concrete.png'.
>>>> > >
>>>> > > Many thanks,
>>>> > > Conor
>>>> > >
>>>> > > --
>>>> > > Conor Fleming
>>>> > > Research student, Civil Engineering Group
>>>> > > Dept. of Engineering Science, University of Oxford
>>>> > >
>>>> > > ###################################################################
>>>> > > # FiPy script to solve 1D heat equation for two-layer material
>>>> > > #
>>>> > > import fipy as fp
>>>> > >
>>>> > >
>>>> > > nx = 45
>>>> > > dx = 0.009 # grid spacing, m
>>>> > > dt = 20. # timestep, s
>>>> > >
>>>> > >
>>>> > > mesh = fp.Grid1D(nx=nx, dx=dx) # define 1D grid
>>>> > >
>>>> > >
>>>> > > # define temperature variable, phi
>>>> > > phi = fp.CellVariable(name="Fipy", mesh=mesh, value=20.)
>>>> > >
>>>> > >
>>>> > > # insulation thermal properties
>>>> > > thick_ins = 0.027 # insulation thickness
>>>> > > k_ins = 0.212
>>>> > > rho_ins = 900.
>>>> > > cp_ins = 1000.
>>>> > > D_ins = k_ins / (rho_ins * cp_ins) # insulation diffusivity
>>>> > >
>>>> > >
>>>> > > # concrete thermal properties
>>>> > > k_con = 1.5
>>>> > > rho_con = 2300.
>>>> > > cp_con = 1100.
>>>> > > D_con = k_con / (rho_con * cp_con) # concrete diffusivity
>>>> > >
>>>> > >
>>>> > > valueLeft = 1200. # set temperature at edge of domain
>>>> > > phi.constrain(valueLeft, mesh.facesLeft) # apply boundary condition
>>>> > >
>>>> > >
>>>> > > # create diffusion coefficient as a FaceVariable
>>>> > > D = fp.FaceVariable(mesh=mesh, value=D_ins)
>>>> > > X = mesh.faceCenters.value[0]
>>>> > > D.setValue(D_con, where=X>thick_ins) # change diffusivity in
>>>> concrete region
>>>> > >
>>>> > >
>>>> > > # unsteady heat equation
>>>> > > eqn = fp.TransientTerm() == fp.DiffusionTerm(coeff=D)
>>>> > >
>>>> > >
>>>> > > # specify viewer
>>>> > > viewer = fp.Viewer(vars=phi, datamin=0., datamax=1200.)
>>>> > >
>>>> > >
>>>> > > # solve equation
>>>> > > t = 0.
>>>> > > while t < 10800: # simulate for 3 hours
>>>> > > t += dt # advance time
>>>> > > eqn.solve(var=phi, dt=dt) # solve equation
>>>> > > viewer.plot() # plot result
>>>> > > _______________________________________________
>>>> > > 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
>>>> ]
>>>> >
>>>> > <mesh1D.diff>_______________________________________________
>>>> > 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 ]
>>
>>
>
>
> --
> Daniel Wheeler
>
> _______________________________________________
> 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 ]

Reply via email to