Daniel, The code I was referring to is the code used in the paper titled " Diffusion under temperature gradient: A phase-field model study " by Mohanty, Guyer and Sohn. I found an archived conversation from this mailing list " http://article.gmane.org/gmane.comp.python.fipy/3064/match=thermal+gradient " where Jonathan Guyer mentioned digging up the FiPy code used for the paper and was wondering if that would still be possible.

I have attached my code as well, in response to your other email. The code is quite temperamental as I have combined elements from quite a few sources but it should converge to a solution as it is written right now, albeit an unphysical one. Thank you for your time and interest, Luke Johnson ----- Original Message ----- From: "Daniel Wheeler" <daniel.wheel...@gmail.com> To: "Multiple recipients of list" <fipy@nist.gov> Sent: Tuesday, April 29, 2014 2:52:29 PM Subject: Re: Question about Diffusion Under Temperature Gradient On Mon, Apr 28, 2014 at 7:00 PM, Johnson, Luke A <lukejohn...@neo.tamu.edu> wrote: Hello, I am trying to create a relatively simple thermomigration model in FiPy for a final project in my Kinetics class and have been using a paper titled Diffusion Under Temperature Gradient as a reference. I can get my system to converge and segregate if I assume constant values for the Chemical Mobility and Mobility of Thermotransport but am having convergence problems when the mobilities become functions of temperature and composition. I think my code is right but the problem is that I am using unrealistic values for the parameters not explicitly listed in the paper. Could you provide the thermodynamic system parameters you used and maybe a workflow for the code so I can check with my work? Unfortunately, I am not sure what you're referring to. Which code / example are you asking about? -- Daniel Wheeler _______________________________________________ fipy mailing list fipy@nist.gov http://www.ctcms.nist.gov/fipy [ NIST internal ONLY: https://email.nist.gov/mailman/listinfo/fipy ]

### Summary: This script will create a model with which we can study thermal migration in single and double phase binary alloys. The thermal term is coupled to the equation via "deGroot". The most important factors are initial composition, atomic mobility and heat of transport. ### Context: Should be a fully contained script with few imported modules. ### phi = phase variable ### psi = transformation variable necessary to write coupled equation ### T = temperature variable ### DATE MODIFIED: 4/22/2014 #===================================================================================================================== ### STATE OF THE CODE: Grid has been drawn and the variables have been laid out over it. Temperature dependent thermo and chemical mobilities are coded, just need values to make it realistic. Boundary conditions for temperature and mass have just been introduced as well. Phase Field equations are coded and the variables are initialized as repeating zeros. Not sure if the 3rd equation is correct (because it changes the temperature profile, which should be an imposed part of the problem) but introducing it allowed the solver to at least try to solve the problem and plot some results. ### WORK ON NEXT: ### -input reasonable variable for comparison to Tunde's paper (added: Apr 21) #===================================================================================================================== from fipy import * # boilerplate initialization function which also sets the number of cells #========================================================================= if __name__ == "__main__": nx = ny = 50 else: nx = ny = 50 # setting up the mesh and laying necassary variables over that mesh (T variable may not be necessary) #========================================================================= dx=.1 dy=.1 mesh = Grid2D(nx=nx, ny=ny, dx=dx, dy=dy) phi = CellVariable(name=r"$\phi$", mesh=mesh) # concentration_b psi = CellVariable(name=r"$\psi$", mesh=mesh) # intermediate variable for use in CahnHilliard equation implementation T = CellVariable(name=r"$T$", mesh=mesh) # temperature #Setting the temperature across the mesh to have a linear gradient in the x direction T_hot=1500. T_cold=1000. T_gradient=(T_hot-T_cold)/(nx-1) for height in range(0,ny): index=height*nx T[index]=T_cold for dist in range(1,nx): T[index+dist]=T[index+dist-1] + T_gradient #T[:]=900 phi[:] = GaussianNoiseVariable(mesh=mesh, mean=0.5, variance=0.1).value if __name__ == "__main__": viewer = Viewer(vars=(phi)) # , datamin=0., datamax=1.) # Setting up equations for chemical mobility and mobility of thermotransport respectively (THESE ONLY NEED TO BE SWITCHED ON IF WE'RE LOOKING AT TWO PHASE ALLOYS, SINGLE PHASE CAN BE APPROXIMATED AS CONSTANT ATOMIC MOBILITY AND HEAT OF TRANSPORT) #========================================================================= Vm = 10**(-5) rho = 1/Vm R=8.314 Beta=10**(-5) l=10**(-3) #meters #element a properties Qa = -30 # heat of transport for element a D_a = 10**(-12) # diffusivity of a beta_ao = 5 # mobility constant for element b beta_a = beta_ao*numerix.exp(-Qa/(R*T)) # atomic mobility of element a C_a = 24 # specific heat of a Qa_tilde = C_a + D_a*T # heat of transport for element a #element b properties Qb = 30 # heat of transport for element b D_b = 10**(-11) # diffusivity of b beta_bo = 5 # mobility constant for element b beta_b = beta_bo*numerix.exp(-Qb/(R*T)) # atomic mobility of element b C_b = 25 # specific heat of b Qb_tilde = C_b + D_b*T # heat of transport for element b Mc = 1#rho*phi*(1 - phi)*(phi*beta_a + (1 - phi)*beta_b) # temperature dependent chemical mobility (Tunde's paper) Mq = 1#rho*phi*(1 - phi)*(beta_a*Qa_tilde - beta_b*Qb_tilde) # temperature dependent mobility of thermotransport (Tunde's paper) # Setting up the free energy functional and its derivative #========================================================================= delta_f = R*(T_hot+T_cold)/2 # energy barrier between the two neighboring minima kappac = 0.2 # gradient energy coefficient (Tunde's paper) alpha = 600# some "positive constant" (Long-Qing Chen) (200 slow but separates... go to the 1000's to see it fast) ((affects the temp dependence of the energy well)) Tm = delta_f/R # median temperature f = 4*delta_f*(-(phi**2)/2 + phi**4/4) + (15*alpha/8)*(phi - 2*phi**3/3 + phi**5/5)*(T - Tm) # free energy function (Long-Qing Chen paper) f_deriv = (phi**2 - 1)*((phi**2 - 1)*(15*alpha/8*(T - Tm)) + phi*4*delta_f) # first derivative of free energy function f_2deriv = 4*phi**3*(15*alpha/8*(T - Tm)) + 3*phi**2*4*delta_f - 4*phi*(15*alpha/8*(T - Tm)) - 4*delta_f # second derivative of free energy function (do this by hand and input) #L_ab=9.6 #f = R*T*(phi*numerix.log(phi)+(1-phi)*numerix.log(1-phi))+L_ab*phi*(1-phi) #f_deriv = R*T*(-numerix.log(1-phi)+numerix.log(phi))+L_ab*(-2*phi+1) #f_2deriv = R*T/(phi-phi**2)-2*L_ab #non-dimensionalizing parameters Mq_= CellVariable(mesh=mesh, value=Mq*Vm/(delta_f*Beta)) Mc_= CellVariable(mesh=mesh, value=Vm*Mc/Beta) f_=Vm*f/delta_f f_deriv_=f_deriv*Vm/delta_f f_2deriv_=f_2deriv*Vm/delta_f kappac_=kappac*Vm/(delta_f*l**2) # writting the actual thermomigration governing equation (split into two because of the 4th order aspect of the CahnHilliard situation # fourth order because we've got coupled thermal and concentration gradients so twice as many gradients and they're nested inside one another #========================================================================= eq1 = TransientTerm(var=phi) == DiffusionTerm(coeff=Mc_,var=psi) - (Mq_.faceValue * (T.faceGrad)/T.faceValue).divergence eq2 = ImplicitSourceTerm(coeff=1,var=psi) == ImplicitSourceTerm(coeff=-f_2deriv_, var=phi) - f_2deriv_*phi + f_deriv_ - DiffusionTerm(coeff=kappac_, var=phi) eq = eq1 & eq2 # Boundary and Initial Conditions (MIGHT NOT BE NECESSARY >>>> BOUNDARY CONDITIONS HAVE NO EFFECT ON ""SOLUTION"" THAT FiPy IS OUTPUTTING (Apr 22) #========================================================================= # concentration BCs BC_left = FixedFlux(faces=mesh.facesLeft, value=0) BC_right = FixedFlux(faces=mesh.facesRight, value=0) BC_top = FixedFlux(faces=mesh.facesTop, value=0) # specify no flux through the top of the domain BC_bottom = FixedFlux(faces=mesh.facesBottom, value=0) # specify no flux through the bottom of the domain # temperature BCs #BC_Tleft = FixedFlux(faces=mesh.facesLeft, value=0) #BC_Tright = FixedFlux(faces=mesh.facesRight, value=0) #BC_Ttop = FixedFlux(faces=mesh.facesTop, value=0) # specify no flux through the top of the domain #BC_Tbottom = FixedFlux(faces=mesh.facesBottom, value=0) # specify no flux through the bottom of the domain BCs=(BC_left,BC_right,BC_top,BC_bottom) # MAY NEED TO INCLUDE HIGHER ORDER BOUNDARY CONDITIONS IN THIS SINCE WE HAVE A PHI^5 TERM IN THE FREE ENERGY FUNCTIONAL #steps = 50 #for step in range(steps): #eq.solve(dt=0.01) #viewer.plot() dexp = -5 elapsed = 0. if __name__ == "__main__": duration = 100 else: duration = 100 while elapsed < duration: dt = min(100, numerix.exp(dexp)) elapsed += dt dexp += 0.03 eq.solve(boundaryConditions=BCs,dt=dt) if __name__ == "__main__": viewer.plot()

_______________________________________________ fipy mailing list fipy@nist.gov http://www.ctcms.nist.gov/fipy [ NIST internal ONLY: https://email.nist.gov/mailman/listinfo/fipy ]