Hi,
I am trying to rewrite the Fenics example to FreeFem++ and I ran into some problems when I tried to rewrite the following piece
metadata = {"quadrature_degree": deg_stress, "quadrature_scheme": "default"}
dxm = dx(metadata=metadata)
a_Newton = inner(eps(v), sigma_tang(eps(u_)))*dxm
res = -inner(eps(u_), as_3D_tensor(sig))*dxm + F_ext(u_)
The above is then used to later assemble the final system.
Here is my freefem attempt:
int initLoadLoop = 1;
for (int t = initLoadLoop; t <= loadSteps; t++){
if (verbosity > 1) {
cout << "======================" << endl;
cout << "Load step: " << t << "/" << loadSteps << "." << endl;
cout << "======================" << endl;
}
real tension = sqrt(real(t) * 1.1 / real(loadSteps)) * pres;
// Assemble system.
varf elasticity(tu, v) =
int2d(Th)(sigma(tu)' * e(v))
+ on(1, tuy = 0)
+ on(3, tux = 0)
;
varf ext(tu, v) =
- int2d(Th)(e(tu)` * sig)
int1d(Th, 2)(tension * [N.x, N.y, N.z]' * v)
+ on(1, tuy = 0)
+ on(3, tux = 0)
;
real[int] fExternal = ext(0, Nh);
}
Question
I assume the a_Newton
from fenics is the same as my varf elasticity
. But I can’t figure out how to write the res
from fenics, because it would require to compute int2d(Th)(e(tu)
* sig) ` in freefem, which is for some reason not allowed.
Is there a way I can get the sig
variable to the varf
function?