Re: how to apply convection boundary condition in 2D?

2018-12-18 Thread Guyer, Jonathan E. Dr. (Fed) via fipy
Drew -

I'm glad we were able to get things working for you.

I recommend learning git/github just because I think it'll help you keep track 
of your own work. Jumbles of renamed files are a sure-fire way to lose things. 
I recommend the [Software Carpentry 
lesson](http://swcarpentry.github.io/git-novice/); it only takes a few hours.

- Jon

> On Dec 18, 2018, at 12:43 AM, Drew Davidson  wrote:
> 
> Hi Dr. Guyer,
> 
> I updated my code with your changes.  It now matches the analytical solution 
> pretty well, after several grid refinements.  This is of course not a 
> comprehensive test.
> 
> The Python script: 
> https://github.com/cashTangoTangoCash/Convection2DFiPyExample01/blob/master/ConvectionTestProblem2D_01_20181215Version.py
> 
> A report showing agreement between FiPy and analytical solution:  
> https://github.com/cashTangoTangoCash/Convection2DFiPyExample01/blob/master/Report20181216.pdf
> 
> The README.md of my repo has been updated to provide a better explanation of 
> what is going on.
> 
> I apologize for not learning git/github well enough to have github properly 
> track changes between us as we went along.  Instead, I put comments at the 
> top of my scripts to document how I was looking at your code and 
> documentation.
> 
> Thanks
> 
> 
> On Fri, Dec 14, 2018 at 8:20 PM Guyer, Jonathan E. Dr. (Fed) via fipy 
>  wrote:
> Drew -
> 
> I had found the same sign error in the denominator. You're also correct that 
> the units didn't agree. Multiplying by the face areas is redundant to taking 
> the divergence.
> 
> I've updated our notes:
> 
> https://github.com/usnistgov/fipy/blob/dd3420fb71884d74850051ad2280bff525301824/documentation/USAGE.rst
> 
> and your latest code:
> 
> https://github.com/guyer/Convection2DFiPyExample01/commit/ca59e8955319545f9965705c8fadfcbb5abd5951
> 
> With these changes, the results look much more plausible.
> 
> - Jon
> 
> > On Dec 12, 2018, at 1:22 PM, Drew Davidson  wrote:
> > 
> >  Hi Dr. Guyer,
> > 
> > I looked over your more recent documentation:
> > https://github.com/usnistgov/fipy/blob/70b72b7abb267c85ada47886b8b3573e1819fffc/documentation/USAGE.rst
> > 
> > I am embarrassed I did not understand how to choose values for a and b in 
> > the Robin condition before.
> > 
> > I also cloned your repo to my local computer and ran it:
> > https://github.com/guyer/Convection2DFiPyExample01
> > 
> > When I run the code in your repo, the viewer does show a variation in T 
> > with respect to r, but the size of that variation is extremely tiny. 
> > Essentially, the solution is pinned at the initial temperature. The 
> > variation also has the wrong sign (solid object is warming up), as the 
> > ambient air is colder than the solid object (T_infinity < T_initial), and 
> > the solid object should be cooling down. Maybe this is due to confusion I 
> > sowed by having var be T minus T_infinity; sorry.
> > 
> > I tried another script in my repo:
> > 
> > https://github.com/cashTangoTangoCash/Convection2DFiPyExample01/blob/master/ConvectionTestProblem2D_01_20181211Version.py
> > 
> > This script is upgraded in that now, the log file contains information 
> > about the solution (max and min temperatures). I obtain max and min 
> > temperatures using var.value.min() and var.value.max() in order to rule out 
> > goof-ups in my get_solution_along_ray function.
> > 
> > The solution variable var is now exactly the temperature, in order to get 
> > rid of the previous source of confusion in which var was T minus T_infinity.
> > 
> > The solution in my script is still pinned at the initial temperature. This 
> > persists even if I crank up the convection coefficient to a huge value 
> > (keep multiplying it by 1000 over and over and still seeing solution pinned 
> > at initial condition).
> > 
> > I made handwritten notes on top of a pdf I made via Kile Editor of your 
> > more recent documentation:
> > 
> > https://github.com/cashTangoTangoCash/Convection2DFiPyExample01/blob/master/RobinBoundaryConditionsFiPyUsage20181211_Annot_CTTC.pdf
> > 
> > It seems to me that the units of the source terms should match the units of 
> > the terms in the partial differential equation for heat conduction. I 
> > thought that is how it worked from the FiPy examples, but I haven’t gone 
> > back and made sure. I find that for the first source term RobinCoeff*g, the 
> > units don’t seem to match the units of the terms in the PDE for heat 
> > conduction (I didn’t check the 2nd source term since it should be the same 
> > situation). I did this in kind of a hurry so maybe I am goofing up. I have 
> > not studied the finite volume method, and am just going on a hunch.
> > 
> > It also seemed to me that there might be a minus sign missing in the 
> > RobinCoeff. The solution I get is still pinned at initial condition 
> > regardless of a minus sign or no minus sign there.
> > 
> > Thanks
> > 
> > On Fri, Dec 7, 2018 at 6:05 PM Guyer, Jonathan E. Dr. (Fed) via fipy 
> >  wrote:
> > Drew -
> 

Re: how to apply convection boundary condition in 2D?

2018-12-17 Thread Drew Davidson
Hi Dr. Guyer,

I updated my code with your changes.  It now matches the analytical
solution pretty well, after several grid refinements.  This is of course
not a comprehensive test.

The Python script:
https://github.com/cashTangoTangoCash/Convection2DFiPyExample01/blob/master/ConvectionTestProblem2D_01_20181215Version.py

A report showing agreement between FiPy and analytical solution:
https://github.com/cashTangoTangoCash/Convection2DFiPyExample01/blob/master/Report20181216.pdf

The README.md of my repo has been updated to provide a better explanation
of what is going on.

I apologize for not learning git/github well enough to have github properly
track changes between us as we went along.  Instead, I put comments at the
top of my scripts to document how I was looking at your code and
documentation.

Thanks


On Fri, Dec 14, 2018 at 8:20 PM Guyer, Jonathan E. Dr. (Fed) via fipy <
fipy@nist.gov> wrote:

> Drew -
>
> I had found the same sign error in the denominator. You're also correct
> that the units didn't agree. Multiplying by the face areas is redundant to
> taking the divergence.
>
> I've updated our notes:
>
>
> https://github.com/usnistgov/fipy/blob/dd3420fb71884d74850051ad2280bff525301824/documentation/USAGE.rst
>
> and your latest code:
>
>
> https://github.com/guyer/Convection2DFiPyExample01/commit/ca59e8955319545f9965705c8fadfcbb5abd5951
>
> With these changes, the results look much more plausible.
>
> - Jon
>
> > On Dec 12, 2018, at 1:22 PM, Drew Davidson 
> wrote:
> >
> >  Hi Dr. Guyer,
> >
> > I looked over your more recent documentation:
> >
> https://github.com/usnistgov/fipy/blob/70b72b7abb267c85ada47886b8b3573e1819fffc/documentation/USAGE.rst
> >
> > I am embarrassed I did not understand how to choose values for a and b
> in the Robin condition before.
> >
> > I also cloned your repo to my local computer and ran it:
> > https://github.com/guyer/Convection2DFiPyExample01
> >
> > When I run the code in your repo, the viewer does show a variation in T
> with respect to r, but the size of that variation is extremely tiny.
> Essentially, the solution is pinned at the initial temperature. The
> variation also has the wrong sign (solid object is warming up), as the
> ambient air is colder than the solid object (T_infinity < T_initial), and
> the solid object should be cooling down. Maybe this is due to confusion I
> sowed by having var be T minus T_infinity; sorry.
> >
> > I tried another script in my repo:
> >
> >
> https://github.com/cashTangoTangoCash/Convection2DFiPyExample01/blob/master/ConvectionTestProblem2D_01_20181211Version.py
> >
> > This script is upgraded in that now, the log file contains information
> about the solution (max and min temperatures). I obtain max and min
> temperatures using var.value.min() and var.value.max() in order to rule out
> goof-ups in my get_solution_along_ray function.
> >
> > The solution variable var is now exactly the temperature, in order to
> get rid of the previous source of confusion in which var was T minus
> T_infinity.
> >
> > The solution in my script is still pinned at the initial temperature.
> This persists even if I crank up the convection coefficient to a huge value
> (keep multiplying it by 1000 over and over and still seeing solution pinned
> at initial condition).
> >
> > I made handwritten notes on top of a pdf I made via Kile Editor of your
> more recent documentation:
> >
> >
> https://github.com/cashTangoTangoCash/Convection2DFiPyExample01/blob/master/RobinBoundaryConditionsFiPyUsage20181211_Annot_CTTC.pdf
> >
> > It seems to me that the units of the source terms should match the units
> of the terms in the partial differential equation for heat conduction. I
> thought that is how it worked from the FiPy examples, but I haven’t gone
> back and made sure. I find that for the first source term RobinCoeff*g, the
> units don’t seem to match the units of the terms in the PDE for heat
> conduction (I didn’t check the 2nd source term since it should be the same
> situation). I did this in kind of a hurry so maybe I am goofing up. I have
> not studied the finite volume method, and am just going on a hunch.
> >
> > It also seemed to me that there might be a minus sign missing in the
> RobinCoeff. The solution I get is still pinned at initial condition
> regardless of a minus sign or no minus sign there.
> >
> > Thanks
> >
> > On Fri, Dec 7, 2018 at 6:05 PM Guyer, Jonathan E. Dr. (Fed) via fipy <
> fipy@nist.gov> wrote:
> > Drew -
> >
> >
> > Thanks to your notes, I found a couple of errors in our Robin
> discussion. As you noted, the units don't work for the conversion of the
> divergence of gamma grad phi to the sum over faces (midway on page 1 of
> your notes). The left hand side should be integrated over volume. That line
> is expressing the discretization of the divergence theorem.
> >
> > I also discovered that the .divergence operator in FiPy doesn't work
> reliably on scalars. There's no real reason it should, but I thought I had
> 

Re: how to apply convection boundary condition in 2D?

2018-12-14 Thread Guyer, Jonathan E. Dr. (Fed) via fipy
Drew -

I had found the same sign error in the denominator. You're also correct that 
the units didn't agree. Multiplying by the face areas is redundant to taking 
the divergence.

I've updated our notes:

https://github.com/usnistgov/fipy/blob/dd3420fb71884d74850051ad2280bff525301824/documentation/USAGE.rst

and your latest code:

https://github.com/guyer/Convection2DFiPyExample01/commit/ca59e8955319545f9965705c8fadfcbb5abd5951

With these changes, the results look much more plausible.

- Jon

> On Dec 12, 2018, at 1:22 PM, Drew Davidson  wrote:
> 
>  Hi Dr. Guyer,
> 
> I looked over your more recent documentation:
> https://github.com/usnistgov/fipy/blob/70b72b7abb267c85ada47886b8b3573e1819fffc/documentation/USAGE.rst
> 
> I am embarrassed I did not understand how to choose values for a and b in the 
> Robin condition before.
> 
> I also cloned your repo to my local computer and ran it:
> https://github.com/guyer/Convection2DFiPyExample01
> 
> When I run the code in your repo, the viewer does show a variation in T with 
> respect to r, but the size of that variation is extremely tiny. Essentially, 
> the solution is pinned at the initial temperature. The variation also has the 
> wrong sign (solid object is warming up), as the ambient air is colder than 
> the solid object (T_infinity < T_initial), and the solid object should be 
> cooling down. Maybe this is due to confusion I sowed by having var be T minus 
> T_infinity; sorry.
> 
> I tried another script in my repo:
> 
> https://github.com/cashTangoTangoCash/Convection2DFiPyExample01/blob/master/ConvectionTestProblem2D_01_20181211Version.py
> 
> This script is upgraded in that now, the log file contains information about 
> the solution (max and min temperatures). I obtain max and min temperatures 
> using var.value.min() and var.value.max() in order to rule out goof-ups in my 
> get_solution_along_ray function.
> 
> The solution variable var is now exactly the temperature, in order to get rid 
> of the previous source of confusion in which var was T minus T_infinity.
> 
> The solution in my script is still pinned at the initial temperature. This 
> persists even if I crank up the convection coefficient to a huge value (keep 
> multiplying it by 1000 over and over and still seeing solution pinned at 
> initial condition).
> 
> I made handwritten notes on top of a pdf I made via Kile Editor of your more 
> recent documentation:
> 
> https://github.com/cashTangoTangoCash/Convection2DFiPyExample01/blob/master/RobinBoundaryConditionsFiPyUsage20181211_Annot_CTTC.pdf
> 
> It seems to me that the units of the source terms should match the units of 
> the terms in the partial differential equation for heat conduction. I thought 
> that is how it worked from the FiPy examples, but I haven’t gone back and 
> made sure. I find that for the first source term RobinCoeff*g, the units 
> don’t seem to match the units of the terms in the PDE for heat conduction (I 
> didn’t check the 2nd source term since it should be the same situation). I 
> did this in kind of a hurry so maybe I am goofing up. I have not studied the 
> finite volume method, and am just going on a hunch.
> 
> It also seemed to me that there might be a minus sign missing in the 
> RobinCoeff. The solution I get is still pinned at initial condition 
> regardless of a minus sign or no minus sign there.
> 
> Thanks
> 
> On Fri, Dec 7, 2018 at 6:05 PM Guyer, Jonathan E. Dr. (Fed) via fipy 
>  wrote:
> Drew -
> 
> 
> Thanks to your notes, I found a couple of errors in our Robin discussion. As 
> you noted, the units don't work for the conversion of the divergence of gamma 
> grad phi to the sum over faces (midway on page 1 of your notes). The left 
> hand side should be integrated over volume. That line is expressing the 
> discretization of the divergence theorem.
> 
> I also discovered that the .divergence operator in FiPy doesn't work reliably 
> on scalars. There's no real reason it should, but I thought I had convinced 
> myself that it did. As a result, everything in the Robin terms needs to be 
> multiplied by the surface normal 
> 
> Those changes to the FiPy documentation are 
> [here](https://github.com/usnistgov/fipy/pull/615) for now.
> 
> Beyond addition that, there are some changes necessary to put your boundary 
> condition into Robin form. The point of the Robin condition is that it ties 
> the gradient of the field to the value of the field. 
> So, g isn't h(T - T_inf) / (-k); it's just -h T_inf / (-k). 
> Likewise, \vec{a} isn't zero. Rather, \hat{n}\cdot\vec{a} = h/(-k). 
> 
> Here are the changes I made to your script to reflect these changes:
> https://github.com/cashTangoTangoCash/Convection2DFiPyExample01/compare/master...guyer:master
> 
> I think I got your normalized temperature accounted for properly, and put the 
> thermal diffusivity and convection coefficient in the proper places, but it's 
> worth checking through.
> 
> With these changes, the temperature field is now 

Re: how to apply convection boundary condition in 2D?

2018-12-12 Thread Drew Davidson
 Hi Dr. Guyer,


I looked over your more recent documentation:

https://github.com/usnistgov/fipy/blob/70b72b7abb267c85ada47886b8b3573e1819fffc/documentation/USAGE.rst


I am embarrassed I did not understand how to choose values for a and b in
the Robin condition before.


I also cloned your repo to my local computer and ran it:

https://github.com/guyer/Convection2DFiPyExample01


When I run the code in your repo, the viewer does show a variation in T
with respect to r, but the size of that variation is extremely tiny.
Essentially, the solution is pinned at the initial temperature. The
variation also has the wrong sign (solid object is warming up), as the
ambient air is colder than the solid object (T_infinity < T_initial), and
the solid object should be cooling down. Maybe this is due to confusion I
sowed by having var be T minus T_infinity; sorry.


I tried another script in my repo:


https://github.com/cashTangoTangoCash/Convection2DFiPyExample01/blob/master/ConvectionTestProblem2D_01_20181211Version.py


This script is upgraded in that now, the log file contains information
about the solution (max and min temperatures). I obtain max and min
temperatures using var.value.min() and var.value.max() in order to rule out
goof-ups in my get_solution_along_ray function.


The solution variable var is now exactly the temperature, in order to get
rid of the previous source of confusion in which var was T minus T_infinity.


The solution in my script is still pinned at the initial temperature. This
persists even if I crank up the convection coefficient to a huge value
(keep multiplying it by 1000 over and over and still seeing solution pinned
at initial condition).


I made handwritten notes on top of a pdf I made via Kile Editor of your
more recent documentation:


https://github.com/cashTangoTangoCash/Convection2DFiPyExample01/blob/master/RobinBoundaryConditionsFiPyUsage20181211_Annot_CTTC.pdf


It seems to me that the units of the source terms should match the units of
the terms in the partial differential equation for heat conduction. I
thought that is how it worked from the FiPy examples, but I haven’t gone
back and made sure. I find that for the first source term RobinCoeff*g, the
units don’t seem to match the units of the terms in the PDE for heat
conduction (I didn’t check the 2nd source term since it should be the same
situation). I did this in kind of a hurry so maybe I am goofing up. I have
not studied the finite volume method, and am just going on a hunch.


It also seemed to me that there might be a minus sign missing in the
RobinCoeff. The solution I get is still pinned at initial condition
regardless of a minus sign or no minus sign there.


Thanks

On Fri, Dec 7, 2018 at 6:05 PM Guyer, Jonathan E. Dr. (Fed) via fipy <
fipy@nist.gov> wrote:

> Drew -
>
>
> Thanks to your notes, I found a couple of errors in our Robin discussion.
> As you noted, the units don't work for the conversion of the divergence of
> gamma grad phi to the sum over faces (midway on page 1 of your notes). The
> left hand side should be integrated over volume. That line is expressing
> the discretization of the divergence theorem.
>
> I also discovered that the .divergence operator in FiPy doesn't work
> reliably on scalars. There's no real reason it should, but I thought I had
> convinced myself that it did. As a result, everything in the Robin terms
> needs to be multiplied by the surface normal
>
> Those changes to the FiPy documentation are [here](
> https://github.com/usnistgov/fipy/pull/615) for now.
>
> Beyond addition that, there are some changes necessary to put your
> boundary condition into Robin form. The point of the Robin condition is
> that it ties the gradient of the field to the value of the field.
> So, g isn't h(T - T_inf) / (-k); it's just -h T_inf / (-k).
> Likewise, \vec{a} isn't zero. Rather, \hat{n}\cdot\vec{a} = h/(-k).
>
> Here are the changes I made to your script to reflect these changes:
>
> https://github.com/cashTangoTangoCash/Convection2DFiPyExample01/compare/master...guyer:master
>
> I think I got your normalized temperature accounted for properly, and put
> the thermal diffusivity and convection coefficient in the proper places,
> but it's worth checking through.
>
> With these changes, the temperature field is now rotationally symmetric
> (it wasn't before, which is why I had to multiply by the normal before
> taking the divergence).
>
> Heat seems to be fluxing in from the outside, so I probably have the sign
> wrong.
>
> I don't have Octave, so I have no idea how this compares with your
> analytical solution.
>
> - Jon
>
> > On Dec 4, 2018, at 2:34 PM, Drew Davidson  wrote:
> >
> >  Hi Dr. Guyer,
> >
> > First I tried getting rid of the square brackets in
> ConvectionTestProblem2D_01.py (commit ‘changed square brackets to
> parenthesis in convection BC, but get same…’), but results are the same
> (still wrong).
> >
> > Next:
> > As you directed, I took a look at:
> >
> 

Re: how to apply convection boundary condition in 2D?

2018-12-07 Thread Guyer, Jonathan E. Dr. (Fed) via fipy
Drew -


Thanks to your notes, I found a couple of errors in our Robin discussion. As 
you noted, the units don't work for the conversion of the divergence of gamma 
grad phi to the sum over faces (midway on page 1 of your notes). The left hand 
side should be integrated over volume. That line is expressing the 
discretization of the divergence theorem.

I also discovered that the .divergence operator in FiPy doesn't work reliably 
on scalars. There's no real reason it should, but I thought I had convinced 
myself that it did. As a result, everything in the Robin terms needs to be 
multiplied by the surface normal 

Those changes to the FiPy documentation are 
[here](https://github.com/usnistgov/fipy/pull/615) for now.

Beyond addition that, there are some changes necessary to put your boundary 
condition into Robin form. The point of the Robin condition is that it ties the 
gradient of the field to the value of the field. 
So, g isn't h(T - T_inf) / (-k); it's just -h T_inf / (-k). 
Likewise, \vec{a} isn't zero. Rather, \hat{n}\cdot\vec{a} = h/(-k). 

Here are the changes I made to your script to reflect these changes:
https://github.com/cashTangoTangoCash/Convection2DFiPyExample01/compare/master...guyer:master

I think I got your normalized temperature accounted for properly, and put the 
thermal diffusivity and convection coefficient in the proper places, but it's 
worth checking through.

With these changes, the temperature field is now rotationally symmetric (it 
wasn't before, which is why I had to multiply by the normal before taking the 
divergence). 

Heat seems to be fluxing in from the outside, so I probably have the sign wrong.

I don't have Octave, so I have no idea how this compares with your analytical 
solution.

- Jon

> On Dec 4, 2018, at 2:34 PM, Drew Davidson  wrote:
> 
>  Hi Dr. Guyer,
> 
> First I tried getting rid of the square brackets in 
> ConvectionTestProblem2D_01.py (commit ‘changed square brackets to parenthesis 
> in convection BC, but get same…’), but results are the same (still wrong).
> 
> Next:
> As you directed, I took a look at:
>  
> https://github.com/usnistgov/fipy/blob/develop/documentation/USAGE.rst#applying-robin-boundary-conditions
> 
> Firefox was showing me raw latex rather than human-readable equations at that 
> web address, so I made a version I could read using the kile editor:
> https://github.com/cashTangoTangoCash/Convection2DFiPyExample01/blob/master/RobinBoundaryConditionsFiPyUsage.pdf
> 
> That material is rather challenging for me. I took a stab at it, resulting in:
> commit: ‘made a first attempt at a formulation in view of suggestions by fipy 
> …’
> 
> ConvectionTestProblem2D_01_2ndTry.py
> https://github.com/cashTangoTangoCash/Convection2DFiPyExample01/blob/fb47960548650c994eb0c6f990e0db297566e174/ConvectionTestProblem2D_01_2ndTry.py
> 
> a few handwritten notes indicating what I was thinking:
> https://github.com/cashTangoTangoCash/Convection2DFiPyExample01/blob/master/RobinBoundaryConditionsFiPyUsageConvectionBC.pdf
> 
> Here is a bit of the code:
> 
> #ref: 
> https://github.com/usnistgov/fipy/blob/develop/documentation/USAGE.rst#applying-robin-boundary-conditions
> 
> #warning: avoid confusion between convectionCoeff in that fipy documentation, 
> which refers to terms involving "a", and convectionCoeff here, which refers 
> to a heat transfer convection coefficient at a boundary
> 
> Gamma0=D_thermal
> 
> Gamma = FaceVariable(mesh=mesh, value=Gamma0)
> 
> mask=surfaceFaces
> 
> Gamma.setValue(0., where=mask)
> 
> dPf = FaceVariable(mesh=mesh, value=mesh._faceToCellDistanceRatio * 
> mesh.cellDistanceVectors)
> 
> Af = FaceVariable(mesh=mesh, value=mesh._faceAreas)
> 
> #RobinCoeff = (mask * Gamma0 * Af / (dPf.dot(a) + b)).divergence #a is zero 
> in our case
> 
> b=1.
> 
> RobinCoeff = (mask * Gamma0 * Af / b).divergence #a is zero in our case
> 
> #eq = (TransientTerm() == DiffusionTerm(coeff=Gamma) + RobinCoeff * g - 
> ImplicitSourceTerm(coeff=RobinCoeff * mesh.faceNormals.dot(a))) #a is zero in 
> our case
> 
> # g in this formulation is -convectionCoeff/k*var, where var=T-T_infinity
> 
> eq = (TransientTerm() == DiffusionTerm(coeff=Gamma) + 
> ImplicitSourceTerm(RobinCoeff * -convectionCoeff/k))
> 
> 
> Now the solution variable remains stuck at the initial condition, as if the 
> boundary condition is not being applied. I am sort of out of my depth at this 
> point. I was guessing that an ImplicitSourceTerm was the right thing to do, 
> since 'g' in the Robin condition depends on the solution variable.  I did 
> mess around a little in IPython seeing if any terms are coming out all zeros.
> 
> Again, I put everything at 
> https://github.com/cashTangoTangoCash/Convection2DFiPyExample01.
> 
> Thanks
> 
> On Mon, Dec 3, 2018 at 4:21 PM Guyer, Jonathan E. Dr. (Fed) via fipy 
>  wrote:
> Drew -
> 
> Apologies for the delayed reply. 
> 
> There are a couple of issues here:
> 
>  `-convectionCoeff/k*(var.faceValue-T_infinity)` describes a 

Re: how to apply convection boundary condition in 2D?

2018-12-04 Thread Drew Davidson
 Hi Dr. Guyer,


First I tried getting rid of the square brackets in
ConvectionTestProblem2D_01.py (commit ‘changed square brackets to
parenthesis in convection BC, but get same…’), but results are the same
(still wrong).


Next:

As you directed, I took a look at:


https://github.com/usnistgov/fipy/blob/develop/documentation/USAGE.rst#applying-robin-boundary-conditions


Firefox was showing me raw latex rather than human-readable equations at
that web address, so I made a version I could read using the kile editor:

https://github.com/cashTangoTangoCash/Convection2DFiPyExample01/blob/master/RobinBoundaryConditionsFiPyUsage.pdf


That material is rather challenging for me. I took a stab at it, resulting
in:

commit: ‘made a first attempt at a formulation in view of suggestions by
fipy …’


ConvectionTestProblem2D_01_2ndTry.py

https://github.com/cashTangoTangoCash/Convection2DFiPyExample01/blob/fb47960548650c994eb0c6f990e0db297566e174/ConvectionTestProblem2D_01_2ndTry.py


a few handwritten notes indicating what I was thinking:

https://github.com/cashTangoTangoCash/Convection2DFiPyExample01/blob/master/RobinBoundaryConditionsFiPyUsageConvectionBC.pdf


Here is a bit of the code:


#ref:
https://github.com/usnistgov/fipy/blob/develop/documentation/USAGE.rst#applying-robin-boundary-conditions

#warning: avoid confusion between convectionCoeff in that fipy
documentation, which refers to terms involving "a", and convectionCoeff
here, which refers to a heat transfer convection coefficient at a boundary

Gamma0=D_thermal

Gamma = FaceVariable(mesh=mesh, value=Gamma0)

mask=surfaceFaces

Gamma.setValue(0., where=mask)

dPf = FaceVariable(mesh=mesh, value=mesh._faceToCellDistanceRatio *
mesh.cellDistanceVectors)

Af = FaceVariable(mesh=mesh, value=mesh._faceAreas)

#RobinCoeff = (mask * Gamma0 * Af / (dPf.dot(a) + b)).divergence #a is zero
in our case

b=1.

RobinCoeff = (mask * Gamma0 * Af / b).divergence #a is zero in our case

#eq = (TransientTerm() == DiffusionTerm(coeff=Gamma) + RobinCoeff * g -
ImplicitSourceTerm(coeff=RobinCoeff * mesh.faceNormals.dot(a))) #a is zero
in our case

# g in this formulation is -convectionCoeff/k*var, where var=T-T_infinity

eq = (TransientTerm() == DiffusionTerm(coeff=Gamma) +
ImplicitSourceTerm(RobinCoeff * -convectionCoeff/k))


Now the solution variable remains stuck at the initial condition, as if the
boundary condition is not being applied. I am sort of out of my depth at
this point. I was guessing that an ImplicitSourceTerm was the right thing
to do, since 'g' in the Robin condition depends on the solution variable.
I did mess around a little in IPython seeing if any terms are coming out
all zeros.


Again, I put everything at
https://github.com/cashTangoTangoCash/Convection2DFiPyExample01.


Thanks

On Mon, Dec 3, 2018 at 4:21 PM Guyer, Jonathan E. Dr. (Fed) via fipy <
fipy@nist.gov> wrote:

> Drew -
>
> Apologies for the delayed reply.
>
> There are a couple of issues here:
>
>  `-convectionCoeff/k*(var.faceValue-T_infinity)` describes a FiPy
> FaceVariable.
>
>  `[-convectionCoeff/k*(var.faceValue-T_infinity)]` is a single element
> Python list that contains a FiPy FaceVariable.
>
>  Multiplying that list by other elements has rather unpredictable results.
>
> In short, get rid of the square brackets. We do our best to treat Python
> lists like FiPy vector fields, but there's only so much we can do. A list
> that holds a numpy array is not a vector field.
>
>
> Beyond that, what you've described looks like a Robin boundary condition
> to me. Our best recommendation for Robin conditions is covered at:
>
>
> https://github.com/usnistgov/fipy/blob/develop/documentation/USAGE.rst#applying-robin-boundary-conditions
>
> Please don't hesitate to ask for more clarification if this doesn't get
> you where you need.
>
> - Jon
>
>
>
> > On Nov 16, 2018, at 11:55 PM, Drew Davidson 
> wrote:
> >
> >  Hello,
> >
> > I am stuck in how to correctly apply a simple convection boundary
> condition in FiPy, in the context of simple transient heat conduction in 2D.
> >
> > Is this correct:
> >
> var.faceGrad.constrain([-convectionCoeff/k*(var.faceValue-T_infinity)]*mesh.faceNormals,where=surfaceFaces)
> >
> > I have a 2D mesh generated in gmsh. The convection boundary condition is
> applied to a curved boundary.
> >
> > The code and results are found at:
> >
> https://github.com/cashTangoTangoCash/Convection2DFiPyExample01/tree/master
> >
> > The project appears to have a heap of files, but It’s a really just a
> simple 2D problem with a comparison to an analytical solution. The basic
> script is ConvectionTestProblem2D_01.py. Report20181116.pdf shows current
> results, which are clearly wrong.
> >
> > Am I correctly applying the convection boundary condition in terms of
> the FiPy syntax/language for this 2D problem with a gmsh mesh and a curved
> boundary?
> >
> > Thanks
> > ___
> > fipy mailing list
> > fipy@nist.gov
> >