Dario - - FiPy's DiffusionTerm is implicit, so there is no Fourier limit on your time step.
- There's no particular advantage to scaling length and time to 1 - Be sure to set dx = dy = dz = 1., a float, not dx = dy = dz = 1, an integer - Jon > On Apr 3, 2019, at 11:28 AM, Dario Panada <[email protected]> wrote: > > Hello, > > I am trying to use FiPy to build a system to simulate oxygen diffusion in > tissues in 3D. > > My grid is a 20x20x20 mesh, defined as: > > mesh=Grid3D(dx=dx,dy=dy,nx=nx,ny=ny, dz=dz, nz=nz) > > Where nx = ny = nz = 20 and dx = dy = dz = 1. This approach is taken from > examples.diffusion.mesh1D, where nx was set to 50 and dx to 1 to represent > unity. > > I setup my equation as: > > eq=TransientTerm()==DiffusionTerm(coeff=D) + sourceGrid - sinkGrid > > My oxygen diffusion coefficient (D) is 0.001 mm2/s. Each cell is my grid > corresponds to 0.042 mm3. So (Δx)^3 = 0.042mm^3 which implies (Δx^2) ~=0.121 > mm2. > > I understand that for 3D problems the Fourier number (Fo) has to be less than > or equal to 1/8. > > With Fo = DΔt/(Δx^2) <= 1/8 so Δt <= (Δx^2)/(8D) where replacing values I > get Δt <= 15.125 . > > From the above, would it be sensible to setup my script as? > --- > nx = ny = nz = 20 > dx = dy = dz = 1 > dt = 1 > D = 0.121 > mesh=Grid3D(dx=dx,dy=dy,nx=nx,ny=ny, dz=dz, nz=nz) > > phi=CellVariable(name="solutionvariable",mesh=mesh,value=0.) > > eq=TransientTerm()==DiffusionTerm(coeff=D) + sourceGrid - sinkGrid > > eq.solve(var=phi,dt=dt) > --- > > Or am I missing something/have interpreted something wrong? > > Kind Regards, > Dario > _______________________________________________ > 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 ]
