Alexandre Daby-Seesaram
  • Home
  • Research
  • Talks
  • News
  • Resources
  • Teaching
  • Education
  • CV

Continuum mechanics

This static webpage shows the tangible meaning of kinematics quantities usually used in continuum mechanics.

Gradient of the transformation

Let \(\mathcal{F}\) be the transformation such that \(\forall \underline{X} \in \Omega_0\) we can define its counter part \(\underline{x} = \mathcal{F}\left\{\underline{X}\right\} \in \Omega_t\)

Most kinematic quantities that describe the transformation of an elementary volume in the bulk are defined based on \[\underline{\underline{F}} = \underline{\underline{\nabla}}\mathcal{F},\] the gradient of the transformation.

Let’s try to grasp the physical meaning of the component of \(\underline{\underline{F}}\) in a Cartesian framework.

import%20marimo%20as%20mo%0Afrom%20wigglystuff%20import%20Matrix%0Aimport%20numpy%20as%20np%0A%0AF%20%3D%20mo.ui.anywidget(Matrix(np.eye(3)%2C%20step%3D0.01))%0Amo.hstack(%5Bmo.md(r%22%24%5Cunderline%7B%5Cunderline%7BF%7D%7D%3D%24%22)%2C%20F%5D)%0A

You can play with its components (hover and then click + drag directly on the matrix’s components) and observe the impact it has on the deformation of a unit cube. In the following figure we can observe a unit cube initially undeformed (balck) that gets deformed by the action of \(\underline{\underline{F}}\) (red).

import%20plotly.graph_objects%20as%20go%0A%0A%0A%0Anodes_0%20%3D%20np.array(%5B%0A%20%20%20%20%5B0%2C%201%2C%201%2C%200%2C%200%2C%201%2C%201%2C%200%5D%2C%20%20%23%20X-coordinates%0A%20%20%20%20%5B0%2C%200%2C%201%2C%201%2C%200%2C%200%2C%201%2C%201%5D%2C%20%20%23%20Y-coordinates%0A%20%20%20%20%5B0%2C%200%2C%200%2C%200%2C%201%2C%201%2C%201%2C%201%5D%20%20%20%23%20Z-coordinates%0A%5D)%0A%0Anodes_t%20%3D%20F.matrix%40nodes_0%0A%0A%23%20Define%20edges%20by%20vertex%20index%20pairs%0Aedges%20%3D%20np.array(%5B%0A%20%20%20%20%5B0%2C%201%5D%2C%20%5B1%2C%202%5D%2C%20%5B2%2C%203%5D%2C%20%5B3%2C%200%5D%2C%20%20%23%20bottom%20face%0A%20%20%20%20%5B4%2C%205%5D%2C%20%5B5%2C%206%5D%2C%20%5B6%2C%207%5D%2C%20%5B7%2C%204%5D%2C%20%20%23%20top%20face%0A%20%20%20%20%5B0%2C%204%5D%2C%20%5B1%2C%205%5D%2C%20%5B2%2C%206%5D%2C%20%5B3%2C%207%5D%20%20%20%23%20vertical%20edges%0A%5D)%0A%0A
%23%20Create%20figure%0Afig%20%3D%20go.Figure()%0A%0A%23%20Add%20cube%20edges%0Afor%20edge%20in%20edges%3A%0A%20%20%20%20x%20%3D%20nodes_0%5B0%2C%20edge%5D%0A%20%20%20%20y%20%3D%20nodes_0%5B1%2C%20edge%5D%0A%20%20%20%20z%20%3D%20nodes_0%5B2%2C%20edge%5D%0A%20%20%20%20fig.add_trace(go.Scatter3d(%0A%20%20%20%20%20%20%20%20x%3Dx%2C%20y%3Dy%2C%20z%3Dz%2C%0A%20%20%20%20%20%20%20%20mode%3D'lines'%2C%0A%20%20%20%20%20%20%20%20line%3Ddict(color%3D'black'%2C%20width%3D3)%0A%20%20%20%20))%0Afor%20edge%20in%20edges%3A%0A%20%20%20%20x%20%3D%20nodes_t%5B0%2C%20edge%5D%0A%20%20%20%20y%20%3D%20nodes_t%5B1%2C%20edge%5D%0A%20%20%20%20z%20%3D%20nodes_t%5B2%2C%20edge%5D%0A%20%20%20%20fig.add_trace(go.Scatter3d(%0A%20%20%20%20%20%20%20%20x%3Dx%2C%20y%3Dy%2C%20z%3Dz%2C%0A%20%20%20%20%20%20%20%20mode%3D'lines'%2C%0A%20%20%20%20%20%20%20%20line%3Ddict(color%3D'red'%2C%20width%3D6)%0A%20%20%20%20))%0A%0A%23%20Configure%20layout%20with%20turntable%20mode%0Afig.update_layout(%0A%20%20%20%20scene%3Ddict(%0A%20%20%20%20%20%20%20%20aspectmode%3D'cube'%2C%0A%20%20%20%20%20%20%20%20xaxis%3Ddict(range%3D%5B-1%2C%202%5D)%2C%20%20%23%20x-axis%20fixed%20from%200%20to%206%0A%20%20%20%20%20%20%20%20yaxis%3Ddict(range%3D%5B-1%2C%202%5D)%2C%20%20%23%20x-axis%20fixed%20from%200%20to%206%0A%20%20%20%20%20%20%20%20zaxis%3Ddict(range%3D%5B-1%2C%202%5D)%2C%20%20%23%20x-axis%20fixed%20from%200%20to%206%0A%20%20%20%20)%2C%0A%20%20%20%20%23%20scene_camera%3Ddict(%0A%20%20%20%20%23%20%20%20%20%20eye%3Ddict(x%3D1.5%2C%20y%3D1.5%2C%20z%3D1)%2C%0A%20%20%20%20%23%20%20%20%20%20projection%3Ddict(type%3D'perspective')%0A%20%20%20%20%23%20)%2C%0A%20%20%20%20dragmode%3D'turntable'%2C%20%20%23%20%E2%9C%85%20Turntable%20rotation%0A%20%20%20%20title%3D%22Initial%20and%20deformed%20unit%20cubes%22%2C%20%0A%20%20%20%20showlegend%20%3D%20False%0A)%0A%0Amo.ui.plotly(fig)%0A

From this second order tensor, we can also compute the associated right Cauchy–Green deformation tensor

F_mat%20%3D%20np.array(F.matrix)%0A%0AC%20%3D%20mo.ui.anywidget(Matrix(F_mat.T%40F_mat%2C%20step%3D0.0))%0Amo.hstack(%5Bmo.md(r%22%24%5Cunderline%7B%5Cunderline%7BC%7D%7D%3D%24%22)%2C%20C%5D)%0A

that is not impacted by rigid body motions (translations or rotations).

The variation of the volume is given by the jacobian \[J=\text{det}\left(\underline{\underline{F}}\right).\] The current volume \(V_t\) is computed as \[V_t = J~V_0\] with \(V_0\) being the volume of the initial cube.

jacobian%20%3D%20np.linalg.det(F.matrix) mo.md(rf%22See%20the%20new%20volume%20%24V_t%24%20%3D%7Bjacobian%3A.1f%7D%24%5Ctimes%20V_0%24%22)%0A

Stress tensor

The Cauchy strain tensor \(\underline{\underline{\sigma}}\) describe internal traction forces. To get an idea of the physical interpretation of each of its component let’s manipulate this tensor and look at the impact it has on the corresponding traction forces on an elementary volume element.

normal_axis_dropdown%20%3D%20mo.ui.dropdown(options%3D%5B%22e_1%22%2C%20%22e_2%22%2C%20%22e_3%22%2C%22-e_1%22%2C%20%22-e_2%22%2C%20%22-e_3%22%5D%2C%20label%3D%22Select%20the%20normal%20vector%20you%20want%20here%3A%20%22%2C%20value%20%3D%20%22e_1%22)%0A%0Anormal_axis_dropdown%0A

And see how the components of

sigma%20%3D%20mo.ui.anywidget(Matrix(np.eye(3)%2C%20step%3D0.01%2Cmirror%3DTrue))%0A%0Amo.hstack(%5Bmo.md(r%22%24%5Cunderline%7B%5Cunderline%7B%5Csigma%7D%7D%3D%24%22)%2C%20sigma%5D)%0A

sigma affect the traction vector \(\underline{T} = \underline{\underline{\sigma}} \underline{n}\)

normal_axis%20%3D%20normal_axis_dropdown.value%0A%0A%0Amatch%20normal_axis%3A%0A%20%20%20%20case%20%22e_1%22%3A%0A%20%20%20%20%20%20%20%20n_axis%20%3D%20np.array(%5B%5B1%2C0%2C0%5D%5D).T%0A%20%20%20%20%20%20%20%20T_0%20%3D%20np.array(%5B%5B1%2C0.5%2C0.5%5D%5D).T%0A%20%20%20%20case%20%22-e_1%22%3A%0A%20%20%20%20%20%20%20%20n_axis%20%3D%20np.array(%5B%5B-1%2C0%2C0%5D%5D).T%0A%20%20%20%20%20%20%20%20T_0%20%3D%20np.array(%5B%5B0%2C0.5%2C0.5%5D%5D).T%0A%20%20%20%20case%20%22e_2%22%3A%0A%20%20%20%20%20%20%20%20n_axis%20%3D%20np.array(%5B%5B0%2C1%2C0%5D%5D).T%0A%20%20%20%20%20%20%20%20T_0%20%3D%20np.array(%5B%5B0.5%2C1%2C0.5%5D%5D).T%0A%20%20%20%20case%20%22-e_2%22%3A%0A%20%20%20%20%20%20%20%20n_axis%20%3D%20np.array(%5B%5B0%2C-1%2C0%5D%5D).T%0A%20%20%20%20%20%20%20%20T_0%20%3D%20np.array(%5B%5B0.5%2C0%2C0.5%5D%5D).T%0A%20%20%20%20case%20%22e_3%22%3A%0A%20%20%20%20%20%20%20%20n_axis%20%3D%20np.array(%5B%5B0%2C0%2C1%5D%5D).T%0A%20%20%20%20%20%20%20%20T_0%20%3D%20np.array(%5B%5B0.5%2C0.5%2C1%5D%5D).T%0A%20%20%20%20case%20%22-e_3%22%3A%0A%20%20%20%20%20%20%20%20n_axis%20%3D%20np.array(%5B%5B0%2C0%2C-1%5D%5D).T%0A%20%20%20%20%20%20%20%20T_0%20%3D%20np.array(%5B%5B0.5%2C0.5%2C0%5D%5D).T%0A%0AT_sigma%20%3D%20sigma.matrix%40n_axis%2F2%0A%0Ax_T_sigma%20%3D%20np.hstack(%5BT_0%2CT_0%2BT_sigma%5D)%0A fig_sigma%20%3D%20go.Figure()%0A%0A%0Amatch%20normal_axis%3A%0A%20%20%20%20case%20%22-e_3%22%3A%0A%20%20%20%20%20%20%20%20fig_sigma.add_trace(go.Surface(%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%20x%3Dx_n%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%20y%3Dx_n%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%20z%3Dz_n%2C%20%20%23%20z%20%3D%200%20plane%0A%20%20%20%20%20%20%20%20%20%20%20%20x%3D%5B%5B0%2C1%5D%2C%5B0%2C1%5D%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20y%3D%5B%5B0%2C0%5D%2C%5B1%2C1%5D%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20z%3D%5B%5B0%2C0%5D%2C%5B0%2C0%5D%5D%2C%20%20%23%20z%20%3D%200%20plane%0A%20%20%20%20%20%20%20%20%20%20%20%20showscale%3DFalse%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20opacity%3D0.5%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20colorscale%3D%5B%5B0%2C%20'blue'%5D%2C%20%5B1%2C%20'blue'%5D%5D%0A%20%20%20%20%20%20%20%20))%0A%20%20%20%20case%20%22e_3%22%3A%0A%20%20%20%20%20%20%20%20fig_sigma.add_trace(go.Surface(%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%20x%3Dx_n%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%20y%3Dx_n%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%20z%3Dz_n%2C%20%20%23%20z%20%3D%200%20plane%0A%20%20%20%20%20%20%20%20%20%20%20%20x%3D%5B%5B0%2C1%5D%2C%5B0%2C1%5D%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20y%3D%5B%5B0%2C0%5D%2C%5B1%2C1%5D%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20z%3D%5B%5B1%2C1%5D%2C%5B1%2C1%5D%5D%2C%20%20%23%20z%20%3D%200%20plane%0A%20%20%20%20%20%20%20%20%20%20%20%20showscale%3DFalse%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20opacity%3D0.5%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20colorscale%3D%5B%5B0%2C%20'blue'%5D%2C%20%5B1%2C%20'blue'%5D%5D%0A%20%20%20%20%20%20%20%20))%0A%20%20%20%20case%20%22e_1%22%3A%0A%20%20%20%20%20%20%20%20fig_sigma.add_trace(go.Surface(%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%20x%3Dx_n%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%20y%3Dx_n%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%20z%3Dz_n%2C%20%20%23%20z%20%3D%200%20plane%0A%20%20%20%20%20%20%20%20%20%20%20%20x%3D%5B%5B1%2C1%5D%2C%5B1%2C1%5D%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20y%3D%5B%5B0%2C1%5D%2C%5B0%2C1%5D%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20z%3D%5B%5B0%2C0%5D%2C%5B1%2C1%5D%5D%2C%20%20%23%20z%20%3D%200%20plane%0A%20%20%20%20%20%20%20%20%20%20%20%20showscale%3DFalse%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20opacity%3D0.5%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20colorscale%3D%5B%5B0%2C%20'blue'%5D%2C%20%5B1%2C%20'blue'%5D%5D%0A%20%20%20%20%20%20%20%20))%0A%20%20%20%20case%20%22-e_1%22%3A%0A%20%20%20%20%20%20%20%20fig_sigma.add_trace(go.Surface(%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%20x%3Dx_n%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%20y%3Dx_n%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%20z%3Dz_n%2C%20%20%23%20z%20%3D%200%20plane%0A%20%20%20%20%20%20%20%20%20%20%20%20x%3D%5B%5B0%2C0%5D%2C%5B0%2C0%5D%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20y%3D%5B%5B0%2C1%5D%2C%5B0%2C1%5D%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20z%3D%5B%5B0%2C0%5D%2C%5B1%2C1%5D%5D%2C%20%20%23%20z%20%3D%200%20plane%0A%20%20%20%20%20%20%20%20%20%20%20%20showscale%3DFalse%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20opacity%3D0.5%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20colorscale%3D%5B%5B0%2C%20'blue'%5D%2C%20%5B1%2C%20'blue'%5D%5D%0A%20%20%20%20%20%20%20%20))%0A%20%20%20%20case%20%22-e_2%22%3A%0A%20%20%20%20%20%20%20%20fig_sigma.add_trace(go.Surface(%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%20x%3Dx_n%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%20y%3Dx_n%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%20z%3Dz_n%2C%20%20%23%20z%20%3D%200%20plane%0A%20%20%20%20%20%20%20%20%20%20%20%20x%3D%5B%5B0%2C0%5D%2C%5B1%2C1%5D%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20y%3D%5B%5B0%2C0%5D%2C%5B0%2C0%5D%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20z%3D%5B%5B0%2C1%5D%2C%5B0%2C1%5D%5D%2C%20%20%23%20z%20%3D%200%20plane%0A%20%20%20%20%20%20%20%20%20%20%20%20showscale%3DFalse%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20opacity%3D0.5%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20colorscale%3D%5B%5B0%2C%20'blue'%5D%2C%20%5B1%2C%20'blue'%5D%5D%0A%20%20%20%20%20%20%20%20))%0A%20%20%20%20case%20%22e_2%22%3A%0A%20%20%20%20%20%20%20%20fig_sigma.add_trace(go.Surface(%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%20x%3Dx_n%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%20y%3Dx_n%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%23%20z%3Dz_n%2C%20%20%23%20z%20%3D%200%20plane%0A%20%20%20%20%20%20%20%20%20%20%20%20x%3D%5B%5B0%2C0%5D%2C%5B1%2C1%5D%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20y%3D%5B%5B1%2C1%5D%2C%5B1%2C1%5D%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20z%3D%5B%5B0%2C1%5D%2C%5B0%2C1%5D%5D%2C%20%20%23%20z%20%3D%200%20plane%0A%20%20%20%20%20%20%20%20%20%20%20%20showscale%3DFalse%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20opacity%3D0.5%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20colorscale%3D%5B%5B0%2C%20'blue'%5D%2C%20%5B1%2C%20'blue'%5D%5D%0A%20%20%20%20%20%20%20%20))%0A%0Afig_sigma.add_trace(go.Scatter3d(%0A%20%20%20%20x%3Dx_T_sigma%5B0%2C%3A%5D%2C%20y%3Dx_T_sigma%5B1%2C%3A%5D%2C%20z%3Dx_T_sigma%5B2%2C%3A%5D%2C%0A%20%20%20%20mode%3D'lines'%2C%0A%20%20%20%20name%3D'Traction%20vector'%2C%0A%20%20%20%20line%3Ddict(color%3D'red'%2C%20width%3D5)%0A))%0A%0Afor%20edge_sigma%20in%20edges%3A%0A%20%20%20%20x_sigma%20%3D%20nodes_0%5B0%2C%20edge_sigma%5D%0A%20%20%20%20y_sigma%20%3D%20nodes_0%5B1%2C%20edge_sigma%5D%0A%20%20%20%20z_sigma%20%3D%20nodes_0%5B2%2C%20edge_sigma%5D%0A%20%20%20%20fig_sigma.add_trace(go.Scatter3d(%0A%20%20%20%20%20%20%20%20x%3Dx_sigma%2C%20y%3Dy_sigma%2C%20z%3Dz_sigma%2C%0A%20%20%20%20%20%20%20%20mode%3D'lines'%2C%0A%20%20%20%20%20%20%20%20showlegend%3DFalse%2C%0A%20%20%20%20%20%20%20%20line%3Ddict(color%3D'black'%2C%20width%3D3)%0A%20%20%20%20))%0A%0Afig_sigma.update_layout(%0A%20%20%20%20scene%3Ddict(%0A%20%20%20%20%20%20%20%20aspectmode%3D'cube'%2C%0A%20%20%20%20%20%20%20%20xaxis%3Ddict(range%3D%5B-1%2C%202%5D)%2C%20%20%23%20x-axis%20fixed%20from%200%20to%206%0A%20%20%20%20%20%20%20%20yaxis%3Ddict(range%3D%5B-1%2C%202%5D)%2C%20%20%23%20x-axis%20fixed%20from%200%20to%206%0A%20%20%20%20%20%20%20%20zaxis%3Ddict(range%3D%5B-1%2C%202%5D)%2C%20%20%23%20x-axis%20fixed%20from%200%20to%206%0A%20%20%20%20)%2C%0A%20%20%20%20%23%20scene_camera%3Ddict(%0A%20%20%20%20%23%20%20%20%20%20eye%3Ddict(x%3D1.5%2C%20y%3D1.5%2C%20z%3D1)%2C%0A%20%20%20%20%23%20%20%20%20%20projection%3Ddict(type%3D'perspective')%0A%20%20%20%20%23%20)%2C%0A%20%20%20%20dragmode%3D'turntable'%2C%20%20%23%20%E2%9C%85%20Turntable%20rotation%0A%20%20%20%20title%3D%22Infinitesimal%20volume%20and%20traction%20vector%22%2C%20%0A%20%20%20%20showlegend%20%3D%20True%0A)%0A%0Amo.ui.plotly(fig_sigma)%0A
Back to top