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
