# Module: Elastic :Name: mod_mupro_elastic :Depends on: [mod_mupro_size](size.md), [mod_mupro_fft](fft.md) :Defined variables: None :Defined types: [type_mupro_ElasticContext](#type_mupro_ElasticContext) :::{admonition} Strain is **NOT** in voigt notation :class: warning The strain value in this module is **NOT** in voigt notation. The value of the strain are still as if it's in tensor notation. The reason we have 6 component is to save memory space. ::: ## Defined Types ### type_mupro_ElasticContext #### Variables | Variable | Type | Dimension | Meaning | | :--------------------: | :-------------: | :-------------: | ---------------------------------------------------------------- | | eigenstrain | real64, pointer | (6,Rn3,Rn2,Rn1) | Eigenstrain | | strain | real64 | (6,z,y,x) | Total strain | | displacement | real64 | (6,z,y,x) | Displacement  | | stress | real64 | (6,z,y,x) | Stress | | energy | real64 | (6,z,y,x) | Elastic Energy | | stiffness | real64 | (6,6) | Elastic Stiffness | | filmMisfitStrain11 | real64 | - | Epitaxial misfit strain $\epsilon_{11}$ in thin film setup  | | filmMisfitStrain22 | real64 | - | Epitaxial misfit strain $\epsilon_{22}$ in thin film setup  | | filmMisfitStrain12 | real64 | - | Epitaxial misfit strain $\epsilon_{12}$ in thin film setup  | | filmTopAppliedStress33 | real64 | - | Applied stress $\sigma_{33}$ on film surface in thin film setup  | | filmTopAppliedStress23 | real64 | - | Applied stress $\sigma_{23}$ on film surface in thin film setup  | | filmTopAppliedStress13 | real64 | - | Applied stress $\sigma_{13}$ on film surface in thin film setup | | bulkAppliedStrain | real64 | (6) | Bulk strain constraints | | bulkAppliedStress | real64 | (6) | Bulk stress constraints | | BC | int32 | - | choice of bulk constraint, 1 for strain, 2 for stress | :::{admonition} Stiffness is in voigt notation :class: important For convenience, the stiffness is expressed in voigt notation. The value of stiffness components in voigt notation are the same as their tensor counterparts, there is no multiplier between the conversion. $$ & \begin{pmatrix} C_{11} & C_{12} & C_{13} & C_{14} & C_{15} & C_{16}\\ - & C_{22} & C_{23} & C_{24} & C_{25} & C_{26}\\ - & - & C_{33} & C_{34} & C_{35} & C_{36}\\ - & - & - & C_{44} & C_{45} & C_{46}\\ - & - & - & - & C_{55} & C_{56}\\ - & - & - & - & - & C_{66} \end{pmatrix} = \\ & \begin{pmatrix} C_{1111} & C_{1122} & C_{1133} & C_{1123} & C_{1113} & C_{1112}\\ - & C_{2222} & C_{2233} & C_{2223} & C_{2213} & C_{2212}\\ - & - & C_{3333} & C_{3323} & C_{3313} & C_{3312}\\ - & - & - & C_{2323} & C_{2313} & C_{2312}\\ - & - & - & - & C_{1313} & C_{1312}\\ - & - & - & - & - & C_{1212} \end{pmatrix} $$ ::: #### Procedures ##### setup Link the user defined strain, stress, displacement, etc. arrays to the corresponding array used in the library. Then, perform some necessary setup before actually solve the equation. > call elasticContext%setup() ```{important} setup must be called before the elastic solve subroutines. ``` ##### solve Solve the mechanical equilibrium equation, get the strain, stress, and displacement distribution from the eigenstrain distribution. > call elasticContext%solve()