Assign different materials (composites)


I want to simulate a composite material made of matrix (E1) and inclusion (E2). I am not sure how to assign two different material properties and integrate over the domain.
Assume a classic elasticity problem…how can I modify the following code to separately define C1 and C2 matrices and integrate them in the “solve” command?

// Material Parameters
real E1 = 100.; // Elastic modulus of matrix
real nu1 = 0.3; // Poisson’s ratio
real mu1 = E1/(2*(1+nu1)); // Lame’s constants
real lambda1 = E1nu1/((1+nu1)(1-2*nu1)); // Lame’s constants

real E2 = 1; // Elastic modulus of matrix
real nu2 = 0.01; // Poisson’s ratio
real mu2 = E2/(2*(1+nu2)); // Lame’s constants
real lambda2 = E2nu2/((1+nu2)(1-2*nu2)); // Lame’s constants

func C1 = [[lambda1+2mu1, lambda1, 0], [lambda1, lambda1+2mu1, 0], [0, 0, 2mu1]]; // matrix
func C2 = [[lambda2+2
mu2, lambda2, 0], [lambda2, lambda2+2mu2, 0], [0, 0, 2mu2]]; // inclusion

// Geometric Parameters
real L = 1;
real t = 0.1;

// Geometry
border botout(a=-L/2., L/2){x=a; y=-L/2;}
border rightout(a=-L/2, L/2){x=L/2; y=a;}
border topout(a=L/2, -L/2){x=a; y=L/2;}
border leftout(a=L/2, -L/2){x=-L/2; y=a;}

border botin(a=-L/2+t/2., L/2-t/2.){x=a; y=-L/2+t/2.;}
border rightin(a=-L/2+t/2., L/2-t/2.){x=L/2-t/2.; y=a;}
border topin(a=L/2-t/2., -L/2+t/2.){x=a; y=L/2-t/2.;}
border leftin(a=L/2-t/2., -L/2+t/2.){x=-L/2+t/2.; y=a;}

// Meshing
mesh Th = buildmesh(botout(45) + rightout(45) + topout(45) + leftout(45) + botin(25) + rightin(25) + topin(25) + leftin(25));
plot(Th, wait=true);

// FE space
fespace Vh(Th, [P1, P1], periodic=[[rightout,y], [leftout,y], [botout,x], [topout,x]]);
Vh [u1, u2]; //unknowns
Vh [v1, v2]; //test functions

// Definitions
macro epsilon(u1,u2) [dx(u1), dy(u2), dx(u2)+dy(u1)] //EOM

func Ebar = [1., 0., 0.]; // Applied load

solve Elastic([u1, u2], [v1, v2]) = int2d(Th)(epsilon(v1,v2)'Cepsilon(u1,u2)) + int2d(Th)(epsilon(v1,v2)'CEbar) ;


Use a P0 function instead of constant scalars. See, e.g., aldaas2019multi/elasticity-2d.edp at main · prj-/aldaas2019multi · GitHub.


where C1 and C2 are used in your code ? in “solve Elastic(…” ??

Have you solved this problem?
I have the same problem as you.

I think @prj has pointed out how this can be done. Yet, the slicing of the domain was not really straightforward to me so I still could not put it into a code for my case.

Yes, they are supposed to appear in my “solve” equation. But I still could not figure out how to divide my domain and assign different materials.

Thank you very much.

Something along the following lines.

fespace Ph(Vh, P0);
Ph lambda = (x < L/4.0 && x > -L/4.0 && y < L/4.0 && y > -L/4.0) ? lambda2 : lambda1;