I try to solve the problem:

u_t=Du_xx

with

phi(x)=u(x,0)=0 for x<0
phi(x)=u(x,0)=1 for x>0
ph(x)=0 at x=0

as boundary conditions at t=0

and phi=1 at t=0

I have some difficult to set this boundary condition in the following
program(in red) could any one help to set it?

nx=50
dx=1.
from fipy.meshes.grid1D import Grid1D
mesh=Grid1D(nx=nx, dx=dx)
from fipy.variables.cellVariable import CellVariable
phi=CellVariable(name="solution variable",mesh=mesh,value=1)
D=1.
#valueLeft=1.
#valueRight=0.

x=mesh.getCellCenters()[...,0]
valueLeft=phi.setValue(0, where=x < 0)
valueRight=phi.setValue(1, where=x > 0)

from fipy.boundaryConditions.fixedValue import FixedValue
BCs=(FixedValue(faces=mesh.getFacesRight(), value=valueRight),
     FixedValue(faces=mesh.getFacesLeft(), value=valueLeft))

from fipy.terms.explicitDiffusionTerm import ExplicitDiffusionTerm
from fipy.terms.transientTerm import TransientTerm
eqX=TransientTerm()==ExplicitDiffusionTerm(coeff=D)
timeStepDuration=0.9*dx**2/(2*D)
steps=100
t=timeStepDuration*steps
from fipy.tools.numerix import sqrt
phiAnalytical=CellVariable(name="analytical value", mesh=mesh)
try:
    from scipy.special import erf
    phiAnalytical.setValue(.5*(1+erf(x/(sqrt(4*D*t)))))
except importError:
    print "The Scipy library is not available to test the solution to the
transient diffusion equation"
if __name__ =='__main__':
    from fipy import viewers
    viewer=viewers.make(vars=(phi, phiAnalytical), limits={'datamin':-1.,
'datamax':2.})
    viewer.plot()
    #raw_input("Explicit transient diffusion. Press <return> to proceed...")
for step in range(steps):
    eqX.solve(var=phi,boundaryConditions=BCs,dt=timeStepDuration)
    if __name__ == '__main__':
        viewer.plot()
print phi.allclose(phiAnalytical, atol = 7e-4)

Regards

2008/8/10 franck kalala <[EMAIL PROTECTED]>

> Thanks I have already discover this miskate and fixed it.
>
> Regards.
>
> 2008/8/10 Daniel Stiles <[EMAIL PROTECTED]>
>
>> Hello,
>>
>>
>> That error means that you are missing a quote somewhere in your program.
>> I believe it is here:
>>
>> except importError:
>>     print "The Scipy library is not available to \
>> test the solution to the transient diffusion equation
>>
>> You should have a " at the end of that last line
>>
>> Sincerely,
>> Daniel
>>
>>
>> On Sat, Aug 9, 2008 at 2:33 PM, franck kalala <
>> [EMAIL PROTECTED]> wrote:
>>
>>> Thanks for the answer;
>>>
>>> I tryed the first example in the documentation.
>>> I wanted just to write code for the first part as a python programme
>>> but I have an error message, could any one correct this this programme
>>> for me?
>>>
>>> ***************************************************************************************************************
>>> nx=50
>>> dx=1.
>>> from fipy.grid1D import Grid1D
>>> mesh=Grid1D(nx=nx, dx=dx)
>>> from fipy.variables.cellVariables import CellVariable
>>> phi=CellVariable(name="solution variable",mesh=mesh,value=0)
>>> D=1.
>>> valueLeft=1.
>>> valueRight=0.
>>> from fipy.boundaryConditions.fixedValue import FixedValue
>>> BCs=(FixedValue(faces=mesh.getFacesRight(), value=valueLeft),
>>>      FixedValue(faces=mesh.getFacesLeft(), value=valueRight))
>>> from fipy.terms.explicitDiffusionTerm import ExplicitDiffusionTerm
>>> from fipy.terms.transientTerm import TransientTerm
>>> eqX=TransientTerm()==ExplicitDiffusionTerm(coeff=D)
>>> timeStepDuration=0.9*dx**2/(2*D)
>>> steps=100
>>> x=mesh.getCellCenters()[...,0]
>>> t=timeStepDuration*steps
>>> from fipy.tools.numerix import sqrt
>>> phiAnalytical=CellVariable(name="analytical value", mesh=mesh)
>>> try:
>>>     from scipy.special import erf
>>>     phiAnalytical.setValue(1-erf(x/(2*sqrt(D*t))))
>>> except importError:
>>>     print "The Scipy library is not available to \
>>> test the solution to the transient diffusion equation
>>> if __name__ =='__main__':
>>>     from fipy import viewers
>>>     viewer=viewers.make(vars(phi, phiAnalytical), limits={'datamin':0,
>>> 'datamax':1.})
>>>     viewer.plot()
>>> for step in range(steps):
>>>     eqX.solve(var=phi,boundaryConditions=BCs,dt=timeStepDuration)
>>>     if __name__=='__main__':
>>>         viewer.plot()
>>> print phi.allclose(phiAnalytical, atol=7e-4)
>>> if __name__ == '__main__':
>>>     raw_input("Explicit transcient diffusion. Press <return> to
>>> proceed...")
>>>
>>> ******************************************************************************************************************
>>> here is the message error:
>>>
>>> There an error in your program:
>>> EOL while scanning single-quoted string
>>>
>>> I dont understand this error message
>>>
>>> regards
>>>
>>> Franck.
>>>
>>>
>>>
>>>
>>>
>>>
>>> 2008/8/9 Jonathan Guyer <[EMAIL PROTECTED]>
>>>
>>>
>>>>
>>>> On Aug 9, 2008, at 10:15 AM, franck kalala wrote:
>>>>
>>>>  Thanks for the answer. Then how do I set this initial value
>>>>>
>>>>> phi(x)=0 for x<0
>>>>> phi(x)=1 for x>0
>>>>>
>>>>
>>>> In FiPy 1.2:
>>>>
>>>>    >>> x = mesh.getCellCenters()[..., 0]
>>>>    >>> phi.setValue(0, where=x < 0)
>>>>    >>> phi.setValue(1, where=x > 0)
>>>>
>>>> You should also specify what happens at x == 0.
>>>>
>>>>
>>>> If you're using trunk/ then the first line would be
>>>>
>>>>    >>> x, = mesh.getCellCenters()
>>>>
>>>>
>>>>
>>>>
>>>
>>>
>>> --
>>> ***********************************************
>>> ***********************************************
>>> Franck Kalala Mutombo
>>> [EMAIL PROTECTED]
>>> African Institut for Mathematical Sciences, Muizenberg Cape Town, South
>>> Africa
>>> [EMAIL PROTECTED]
>>> ************************************************
>>> ************************************************
>>>
>>
>>
>>
>> --
>> -Daniel Stiles
>>
>
>
>
> --
> ***********************************************
> ***********************************************
> Franck Kalala Mutombo
> [EMAIL PROTECTED]
> African Institut for Mathematical Sciences, Muizenberg Cape Town, South
> Africa
> [EMAIL PROTECTED]
> ************************************************
> ************************************************
>



-- 
***********************************************
***********************************************
Franck Kalala Mutombo
[EMAIL PROTECTED]
African Institut for Mathematical Sciences, Muizenberg Cape Town, South
Africa
[EMAIL PROTECTED]
************************************************
************************************************

Reply via email to