2

I have posted a previous question at this post. Thanks @AlexTrounex and @user21 for providing very useful comments. The more rigorous 2D plane stress stress operator by considering both position and time dependent temperature fields is: (a=thermal expansion coefficient, ρρ=density)

pst = {Inactive[
  Div][{{-(Y/(1 - nu^2)), 
    0}, {0, -((Y*(1 - nu))/(2*(1 - nu^2)))}} . 
  Inactive[Grad][u[x, y, t], {x, y}], {x, y}] + 
Inactive[
  Div][{{0, -((Y*nu)/(1 - 
         nu^2))}, {-((Y*(1 - nu))/(2*(1 - nu^2))), 0}} . 
  Inactive[Grad][v[x, y, t], {x, y}], {x, y}] + 
     (a*Y*Inactive[D][T[x, y, t], {x}])/(1 - nu) - ρρ*
 Inactive[D][u[x, y, t], {t}], 
 Inactive[
  Div][{{0, -((Y*(1 - nu))/(2*(1 - nu^2)))}, {-((Y*nu)/(1 - 
         nu^2)), 0}} . Inactive[Grad][u[x, y, t], {x, y}], {x, 
  y}] + 
     Inactive[
  Div][{{-((Y*(1 - nu))/(2*(1 - nu^2))), 
    0}, {0, -(Y/(1 - nu^2))}} . 
  Inactive[Grad][v[x, y, t], {x, y}], {x, 
  y}] + (a*Y*Inactive[D][T[x, y, t], {y}])/(1 - 
   nu) - ρρ*Inactive[D][v[x, y, t], {t}]};

By defining displacement and temperature fields as a function of time, I initially thought it would naturally handle a non-steady problem. However, I still have troubles getting reasonable results. Let's consider a simple example. The temperature field is just a function of time: T[t]=10t. The boundary conditions are the left and bottom surfaces of the body are fixed. The code for this problem is:

 Needs["NDSolve`FEM`"];
 L = 1;
 h = 1;
 reg = Rectangle[{0, 0}, {L, h}];
 mesh = ToElementMesh[reg];
 materialParameters = {Y -> 10^10, nu -> 33/100, 
 a -> -0.001, ρρ -> 2000};

 T = 10 t;

 pst = {Inactive[
  Div][{{-(Y/(1 - nu^2)), 
    0}, {0, -((Y*(1 - nu))/(2*(1 - nu^2)))}} . 
  Inactive[Grad][u[x, y, t], {x, y}], {x, y}] + 
  Inactive[
  Div][{{0, -((Y*nu)/(1 - 
         nu^2))}, {-((Y*(1 - nu))/(2*(1 - nu^2))), 0}} . 
  Inactive[Grad][v[x, y, t], {x, y}], {x, y}] + 
     (a*Y*Inactive[D][T, {x}])/(1 - nu) - ρρ*
 Inactive[D][u[x, y, t], {t,2}], 
 Inactive[
  Div][{{0, -((Y*(1 - nu))/(2*(1 - nu^2)))}, {-((Y*nu)/(1 - 
         nu^2)), 0}} . Inactive[Grad][u[x, y, t], {x, y}], {x, 
  y}] + 
     Inactive[
  Div][{{-((Y*(1 - nu))/(2*(1 - nu^2))), 
    0}, {0, -(Y/(1 - nu^2))}} . 
  Inactive[Grad][v[x, y, t], {x, y}], {x, 
  y}] + (a*Y*Inactive[D][T, {y}])/(1 - nu) - ρρ*
 Inactive[D][v[x, y, t], {t,2}]};

 ic = {u[x, y, 0] == 0, 
 v[x, y, 0] == 0, (D[u[x, y, t], t] /. t -> 0) == 
 0, (D[v[x, y, t], t] /. t -> 0) == 0};

{uif, vif} = 
NDSolveValue[{Activate[pst == {0, 0} /. materialParameters], ic, 
DirichletCondition[u[x, y, t] == 0, x == 0], 
DirichletCondition[v[x, y, t] == 0, y == 0]}, {u, v}, {t, 0, 
3}, {x, y} ∈ mesh];

{DensityPlot[uif[x, y, 3], {x, y} ∈ mesh, 
ColorFunction -> "Rainbow", 
PlotLegends -> Placed[Automatic, Bottom], PlotLabel -> "u", 
AspectRatio -> Automatic], 
DensityPlot[vif[x, y, 3], {x, y} ∈ mesh, 
ColorFunction -> "Rainbow", 
PlotLegends -> Placed[Automatic, Bottom], PlotLabel -> "v", 
AspectRatio -> Automatic]}

However, by running this code, all the solved displacements are 0, which obviously does not make any sense.

enter image description here

Looks like that the system equation lacks a term which can account for the time change of the temperature field. Can anyone please help me?

XIJUN SHI
  • 131
  • 4

1 Answers1

1

There is now an application example in the FEMAddOns paclet that contains such a model. You can see it here.

To download the FEMAddOns use:

ResourceFunction["FEMAddOnsInstall"][]
user21
  • 39,710
  • 8
  • 110
  • 167