Hello all,
I would like to know what are the available methods to assign values to a fespace
variable.
I am trying to solve a transient diffusion problem where the diffusivity depends upon the variable of interest. For this purpose I have code which looks as follows:
func real diff(real X, real T) {
real Deff;
Deff = 2.4e-7 * ( 1 - exp(-7.9e14*(X^15.7)) + X^0.686 ) * exp(-3156/(T+273));
return Deff;
}
real u0 = 0.3, T = 40;
fespace Vh(Th,P1);
Vh u = u0, v, uold, diffu;
// ...
problem diffusion(u,v) =
int2d(Th) (u*v/dt + diffu*(dx(u)*dx(v) + dy(u)*dy(v)))
- int2d(Th) (uold*v/dt)
+ on(2,u=0.1);
// ...
for (int i = 0; i < nsteps; i++) {
uold = u;
// Evaluate diffusivity
for (int i = 0; i < Vh.ndof; i++) {
diffu[][i] = diff(uold[][i],T);
}
diffusion;
t += dt;
}
Is the preferred solution to use a macro like
macro diff(X,T)
2.4e-7 * ( 1 - exp(-7.9e14*(X^15.7)) + X^0.686 ) * exp(-3156/(T+273)) // EOM
in place of my current loop calling the scalar function?