Is it possible to use a matrix for the E value in Elasticity problem where the value at each cell of the matrix corresponds to the value of E of a single node of the designed mesh?
No problem, You have just to set E is a FE element function P0
mesh Th= ...
fespace Ph(Th,P0); // constant par triangle
Ph E;
// def E on each element
real sigma = 0.29;
real gravity = -0.05;
func mu = E/(2*(1 + sigma));
func lambda = E*sigma/((1 + sigma)*(1 - 2*sigma));
// Fespace
fespace Vh(Th, [P2, P2]);
Vh [uu, vv], [w, s];
// Macro
real sqrt2 = sqrt(2.);
macro epsilon(u1, u2) [dx(u1), dy(u2), (dy(u1) + dx(u2))/sqrt2] // EOM
macro div(u, v) (dx(u) + dy(v)) // EOM
solve Elasticity ([uu, vv], [w, s], solver=sparsesolver)
= int2d(th)(
lambda*div(w, s)*div(uu, vv)
+ 2.*mu*(epsilon(w, s)' * epsilon(uu, vv))
)
- int2d(th)(gravity*s)
+ on(1, uu=0, vv=0)
;
1 Like
It works great but I have one more issue. I’m gonna use this code inside a loop and I want to be able to change the E value on certain nodes with each loop. I don’t have the equation with which the Elasticity change will be decided yet but the issues that I see will come forward soon are that I need to extract the E space at the end of the program and change some values of the E space at the start of the program.
Defined the problem in the loop and change E in the loop no problem !!!
Which command to you suggest using to change the node values? I tried using real or func and as I was certain it didn’t work.
You can change the finite element function E in the loop
reset all E with
for (int i = 0 ; i< niter;++i)
{
E= abs(x*i+y); // stupide exemple
or
E[][i] = 35; // change the value in element i => niter <= Th.nt;
}
1 Like