Elastic structure analysis with two different material constants depending on region (can't [region] be specified in [buildmesh]?)

Hello, FF++ developers!

I would like to do structural analysis of elastic bodies with different material constants in different regions.
When creating a mesh with the square command, the [region] can be set, but this is not possible with the [buildmesh] command.
How can I do it?

I am considering the analysis of an elastic body with a region (A, B) having two different material constants, with the description of the equation as shown below.

solve Elasticity ([uu, vv], [w, s])
= int2d(th,regionA)(
+ 2.mu( epsilon(w,s)'epsilon(uu,vv) )
+ 2.mu( epsilon(w,s)'epsilon(uu,vv) )
+ int2d(th)(
- gravity
+ on(1, uu=0, vv=0)

Thank you in advance.

See if this helps. IIRC, It makes a mesh with a line in the middle creating two regions
which can then be used to determine material properties etc.

innerline.edp (1.4 KB)

 cat drill.edp 
load "medit" 
macro buildouter()
border left(t=0, 1){x=-szx/2; y=szy*(t-.5);label=1; }
border top(t=0, 1){x=szx*(t-.5);y=szy/2; label=2; }
border right(t=0, 1){x=szx/2; y=-szy*(t-.5);label=3; }
border bottom(t=0, 1){x=-szx*(t-.5);y=-szy/2; label=4; }
 // EOM
real szx=2;
real szy=1;
int nx=20;
int ny=20;
border middle(t=0, 1){x=0; y=-szy*(t-.5);label=5; }

mesh Th = buildmesh(left(-ny)+top(-nx)+right(-ny)+bottom(-nx)
 + middle(ny));
macro Op(xx,vxx) (dx(xx)*dx(vxx)+dy(xx)*dy(vxx)) // 
fespace Vh1(Th,P1);
fespace Vh2(Th,P2);
Vh1 a1,va1,b1=0;
Vh2 a2,va2,b2=0;
// https://doc.freefem.org/examples/mesh-generation.html
int rl=Th(-szx/2,0).region;
int rr=Th(szx/2,0).region;;
cout<<" rl="<<rl<<" rr="<<rr<<endl; cout.flush;
problem both([a1,a2],[va1,va2],solver=sparsesolver,tgv=-1)
//problem both([a1,a2],[va1,va2],solver=CG)
= int2d(Th,rl)(Op(a1,va1))+int2d(Th,rl)(b1*va1)
+ int2d(Th,rr)(Op(a2,va2))+int2d(Th,rr)(b2*va2)
// otherwise use CG 
// a1 to a2 boundary 

Vh1 net=a1+a2;


Hi Keita,

Please, take a look at Chapter 2, Section 2.15 Optimal Control (https://doc.freefem.org/pdf/FreeFEM-documentation.pdf). In such a problem, the reference domain is a circle with three smaller circles within. Each circle has a different material property. The mesh is created from the buildmesh command.

;D I hope it is useful.

Dear marchywka

Thank you very much for your prompt reply !!
When setting the area with [buildmesh], I was able to do what I wanted by using [border] to delimit the area around the area I wanted to distinguish.
I see that different region labels change the color of the mesh (sorry, amateur).

・Create a region mesh with [buildmesh] (use only the minimum necessary [border])
・Add [border] to delimit the area

Thank you for your continued support.
Keita Kambayashi

Dear lucassfernandez

Thank you for your prompt reply!!
I have checked the references you indicate.
The reference you provided is for a function that returns a value for each region (Ib, Ic … etc.) that return different values for each region.
This could be implemented for various regions by combining inequalities for the functions used to create [border].

Your advice was very useful, but in this case I have adopted the other comment.
I will refer to it in the future.

Thank you for your continued support.
Keita Kambayashi