There is no need to define these coefficients as Variable. This is the
"coefficients are functions of solution variables" case that I spoke of.
Instead of:
coeff1 = Variable(value=L_CrFe*d2G)
coeff21 = Variable(value=L_CrFe)
coeff22 = Variable(value=kappa)
eq = (TransientTerm() == DiffusionTerm(coeff=coeff1) -
DiffusionTerm(coeff=(coeff21,coeff22)))
while elapsed < duration:
:
:
coeff1.value = L_CrFe*d2G
coeff21.value = L_CrFe
coeff22.value = kappa
just do:
coeff1 = L_CrFe*d2G
coeff21 = L_CrFe
coeff22 = kappa
eq = (TransientTerm() == DiffusionTerm(coeff=coeff1) -
DiffusionTerm(coeff=(coeff21,coeff22)))
while elapsed < duration:
:
:
The coefficients will update automatically.
On Mar 21, 2014, at 12:04 PM, Thomas Barkar <[email protected]> wrote:
> Thank you for your answer!
>
> When the coeffs are made into "Variable" as suggested, I get the error:
>
> File "C:\Python27\lib\site-packages\fipy\terms\abstractDiffusionTerm.py",
> line 188, in _calcGeomCoeff
> raise IndexError, 'diffusion coefficent tensor is not an appropriate shape
> for this mesh'
> IndexError: diffusion coefficent tensor is not an appropriate shape for this
> mesh
>
> This is probably because myCoeff is of type "class
> 'fipy.variables.binaryOperatorVariable.binOp'" before I make it into a
> "Variable".
>
> Since we calculate all the values of our coeff values with an external
> software, unfortunately we cannot define the coeff inside the
> DiffusionTerm(). Is there a way around this problem? (i.e. change the value
> of a binaryOperatorVariable during calculation I guess?).
>
> See attached file for the complete context.
>
>
>
>
>
> Best Regards
>
> Thomas
>
>
>
> -----Original Message-----
> From: [email protected] [mailto:[email protected]] On Behalf Of
> Guyer, Jonathan E. Dr.
> Sent: den 20 mars 2014 22:47
> To: FIPY
> Subject: Re: update values of coefficients
>
> On Mar 20, 2014, at 11:06 AM, Thomas Barkar <[email protected]> wrote:
>
>> I have a question about the setting of coefficients.
>> We are currently trying to solve a diffusion problem with variable
>> coefficients. Is there a way to set a new value for the coefficients in
>> every time step? See schematic example below:
>>
>>
>> eq = TransientTerm() == DiffusionTerm(coeff=myCoeff1) -
>> DiffusionTerm((coeff=myCoeff2,myCoeff3))
>> while t < duration:
>> myCoeff1 = someNewValue
>> myCoeff2 = someNewValue
>> myCoeff3 = someNewValue
>> eq.solve(var=phi, dt=dt)
>
> Simplest case:
>
> myCoeff1 = Variable(value=someValue)
> myCoeff2 = Variable(value=someValue)
> myCoeff3 = Variable(value=someValue)
>
> eq = TransientTerm() == DiffusionTerm(coeff=myCoeff1) -
> DiffusionTerm((coeff=myCoeff2,myCoeff3))
> while t < duration:
> myCoeff1.value = someNewValue
> myCoeff2.value = someNewValue
> myCoeff3.value = someNewValue
> eq.solve(var=phi, dt=dt)
>
>
> If your coefficients are functions of solution variables or time, then you
> should just write myCoeff1 et al. as the appropriate expressions and let
> FiPy's lazy evaluation take care of things for you. See
> examples/diffusion/mesh1D.py for examples of a time-dependent boundary
> condition (a time-dependent coefficient would work the same) and of a
> coefficient that is a function of the solution variable.
>
>
> _______________________________________________
> fipy mailing list
> [email protected]
> http://www.ctcms.nist.gov/fipy
> [ NIST internal ONLY: https://email.nist.gov/mailman/listinfo/fipy ]
> <mailingListQuestion.py>_______________________________________________
> 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 ]