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 <davidson...@gmail.com> 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 
> <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 <davidson...@gmail.com> 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 
> > 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 <davidson...@gmail.com> 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 
> > > <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 <davidson...@gmail.com> 
> > > > 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
> > > > 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 ]

Reply via email to