Hi Igor,

I made two changes to get it to work. This is the diff:

22,27c22,23
< convTerm = PowerLawConvectionTerm((1,0))
<
< diffCoeff = FaceVariable(mesh=mesh_xy, rank=2)
< diffCoeff[0] = 5.
<
< diffTerm = DiffusionTerm(diffCoeff)
---
> convTerm = PowerLawConvectionTerm(1)
> diffTerm = DiffusionTerm([[[5,0], [0,0]]])
34c30
< while time <= 20:
---
> while time <= 20

I'm not sure why the list form of the diffusion coefficient was not
working correctly, but a quick fix for you is to just replace it with
a rank 2 face variable. I'll look into fixing whatever is causing the
issue, but in the meantime you now have something that works.

Cheers

2010/1/29 Igor <[email protected]>:
> Hello again,
>
>>> 1.I have a dependent variable phi(x,y,t). Is it possible to solve the
>>> below
>>> type of equation for this variable:
>> >
>> >TransientTerm == DiffusionTerm_x + ConvectionTerm_x + DiffusionTerm_y +
>> >ConvectionTerm_y,
>
>>Use "DiffusionTerm( [ (a, 0), (0, b) ] )" and "ConvectionTerm((c,
>>d))". There is FAQ in the manual that addresses this.
> Sorry, it's not very clear to me. So, the diffusion term turns to be
> DiffusionTerm([[[D, 0], [0, 0]]]) OR DiffusionTerm([[D,0]]) if i want d/dx D
> d/dx phi in 2D mesh
> and convection term
> <Some>ConvectionTerm([[U,0],[0,0]]) OR <Some>ConvectionTerm([U,0]) if i want
> d/dx U phi in 2D mesh?
>
> I tried the above and all other examples from the FAQ in the manual and I
> keep getting the errors:
>
> File "pspec2d.py", line 32, in <module>
>     eq = TransientTerm() == diffTerm + convTerm + Source
>   File "/usr/local/Python26/lib/python2.6/site-packages/fipy/terms/term.py",
> line 438, in __eq__
>     return self - other
>   File "/usr/local/Python26/lib/python2.6/site-packages/fipy/terms/term.py",
> line 388, in __sub__
>     return self + (-other)
>   File
> "/usr/local/Python26/lib/python2.6/site-packages/fipy/terms/equation.py",
> line 182, in __neg__
>     dup.terms[key] = -term
>   File
> "/usr/local/Python26/lib/python2.6/site-packages/fipy/terms/diffusionTerm.py",
> line 115, in __neg__
>     negatedCoeff[0] = -negatedCoeff[0]
> TypeError: bad operand type for unary -: 'list'
>
>
> If I just use some normal coeff (i.e, DiffusionTerm(1)) the script works
> fine.
>
> from fipy import *
> Xmax=1.
> Ymax=1.
> nsteps=100
>
> dx = Xmax / float(nsteps)
> dy = Ymax / float(nsteps)
> mesh_xy = Grid2D(dx = dx, dy = dy, nx = nsteps, ny = nsteps)
>
> x,y = mesh_xy.getCellCenters()
>
> phi = CellVariable(mesh=mesh_xy, name = "none", value=1.0)
>
> valueLeft = 0
> valueRight = 0
> BCs = (FixedValue(faces=mesh_xy.getFacesLeft(), value=valueLeft),
> FixedValue(faces=mesh_xy.getFacesRight(), value=valueRight))
>
> Source = CellVariable(mesh=mesh_xy)
> Source.setValue(1)
>
> convTerm = PowerLawConvectionTerm(1)
> diffTerm = DiffusionTerm([[[5,0], [0,0]]])
>
> eq = TransientTerm() == diffTerm + convTerm + Source
>
> timeStepDuration = 1
> time = 1
> viewer = Viewer(vars=(phi), limits={'datamin': 1e-15, 'datamax': 1e1})
> while time <= 20
>     timeStep = timeStepDuration
>     eq.solve(var=phi, boundaryConditions=BCs, dt=timeStep)
>     time=time+timeStep
>     viewer.plot()
>
>



-- 
Daniel Wheeler

Reply via email to