Hello,
On Mon, Feb 2, 2009 at 5:48 PM, <[email protected]> wrote:
> OK, this is the problem. fDerivative is a FaceVariable. To get the proper
> order for the discretization, you want the second derivative of f(\phi) to
> be a FaceVariable, so fDerivative needs to be a CellVariable. So, either
>
> fDerivative = exp(-var) - (b / var**3)
> (h**3 * fDerivative.getFaceGrad()).getDivergence()
>
> or, better,
>
> fSecondDerivative = -exp(-faceVar) + (3 * b / faceVar**4)
> DiffusionTerm(coeff=fSecondDerivative)
>
>
Thank you for your help, but I still have a "small" problem with my
script. Here is the complete script:
======
#!/usr/bin/env python
from fipy import *
nx = ny = 300
mesh = Grid2D(nx=nx, ny=ny, dx=0.25, dy=0.25)
var = CellVariable(name="variable", mesh=mesh)
var.setValue(GaussianNoiseVariable(mesh=mesh,
mean=0.5,
variance=0.01))
#faceVar = var.getArithmeticFaceValue()
if __name__ == "__main__":
viewer = Viewer(vars=(var,), datamin=0., datamax=1.)
b = 0.5
h = 5.0
steps = 1000
fDerivative = exp(-var)-(b / var**3)
#fSecondDerivative = -exp(-faceVar) + (3 * b / faceVar**4)
diffTerm4 = - DiffusionTerm((h**3, 1))
eq = TransientTerm() == -DiffusionTerm((h**3, 1)) +
(fDerivative.getFaceGrad() * h**3).getDivergence()
#eq = TransientTerm() == -DiffusionTerm((h**3, 1)) +
DiffusionTerm(coeff=fSecondDerivative)
dexp = -5
for step in range(steps):
dt = min(100, exp(dexp))
dexp += 0.01
eq.solve(var, dt = dt)
if __name__ == '__main__':
viewer.plot(filename="output_%d.png" %step)
print 'step',step,'dt',dt
======
but when I am trying to run it, I obtain the following: (after 2 steps
I can see something useful but nothing after step 3, 4, ...)
..
/fipy/solvers/pysparse/linearPCGSolver.py:70: DeprecationWarning:
PyArray_As1D: use PyArray_AsCArray.
info, iter, relres = itsolvers.pcg(A, b, x, self.tolerance,
self.iterations, Assor)
/fipy/solvers/pysparse/linearPCGSolver.py:70: DeprecationWarning:
PyArray_FromDimsAndDataAndDescr: use PyArray_NewFromDescr.
info, iter, relres = itsolvers.pcg(A, b, x, self.tolerance,
self.iterations, Assor)
step 0 dt 0.00673794699909
step 1 dt 0.00680566449223
thinfilm3.py:33: StagnatedSolverWarning: The solver stagnated.
Iterations: 1. Relative error: nan
eq.solve(var, dt = dt)
step 2 dt 0.0068740625575
step 3 dt 0.00694314803475
step 4 dt 0.00701292783259
.......
I saw in mail archives that some people obtained the same error and I
tried to decrese/increase the time step, or to consider
bigger/smaller lattice, but the error still persist.
Maybe I did something wrong, but I can no spot the mistake.
Thank you again,
Ionut