1@DSL DefaultFiniteStrainDSL; 2@Behaviour SaintVenantKirchhoffElasticity; 3@Author T. Helfer; 4@Date 19/10/2013; 5@Description{ 6 "La loi de SaintVenantKirchhoffElasticity est une extension " 7 "de la loi de Hooke au cas des grandes rotations. " 8 "Elle ne peut être utilisée que pour des petites déformations." 9} 10 11@MaterialProperty stress young; 12young.setGlossaryName("YoungModulus"); 13@MaterialProperty real nu; 14nu.setGlossaryName("PoissonRatio"); 15 16@LocalVariable stress lambda; //<! Premier coefficient de Lamé 17@LocalVariable stress mu; //<! Second coefficient de Lamé 18@LocalVariable StrainStensor e; //<! Déformation de Green-Lagrange 19 20// Nous déclarons le second tenseur de Piola-Kirchhoff en tant que 21// variable locale pour le réutiliser dans le calcul de l'opérateur 22// tangent 23@LocalVariable StressStensor s; //<! Second tenseur des contraintes de Piola-Kirchhoff 24 25@InitLocalVariables{ 26 /*! 27 * Nous commençons par calculer les coefficients de Lame \(\lambda\) 28 * et \(\mu\)~: 29 * \begin{aligned} 30 * \lambda &= \\ 31 * \mu &= \\ 32 * \end{aligned} 33 */ 34 lambda = computeLambda(young,nu); 35 mu = computeMu(young,nu); 36} 37 38@PredictionOperator<DS_DEGL>{ 39 static_cast<void>(smt); // suppression d'un warning : la matrice de 40 // prédiction est toujours l'élastique 41 Dt = lambda*Stensor4::IxI()+2*mu*Stensor4::Id(); 42} 43 44/*! 45 * Nous décrivons ici l'intégration de la loi. 46 */ 47@Integrator{ 48 /*! 49 * Nous calculons ensuite le tenseur de Green-Lagrange 50 */ 51 e = computeGreenLagrangeTensor(F1); 52 // second Piola–Kirchhoff stress 53 s = lambda*trace(e)*StrainStensor::Id()+2*mu*e; 54 // conversion to Cauchy stress tensor 55 sig = convertSecondPiolaKirchhoffStressToCauchyStress(s,F1); 56} 57 58/*! 59 * Nous fournissons l'opérateur tangent le plus naturel pour cette 60 * loi. 61 */ 62@TangentOperator<DS_DEGL>{ 63 static_cast<void>(smt); // suppression d'un warning : la matrice 64 // tangente est toujours l'élastique 65 Dt = lambda*Stensor4::IxI()+2*mu*Stensor4::Id(); 66} 67 68/*! 69 * Nous fournissons un autre l'opérateur tangent, proche de celui 70 * utilisé par le Code-Aster. Cet opérateur aurait pu être calculé 71 * automatiquement par MFront, mais cela impliquait de recalculer le 72 * second tenseur des contraintes de Piola-Kirchhoff à partir des 73 * contraintes de Cauchy. Nous utilisons ici le fait que le second 74 * tenseur de Piola-Kirchhoff est connu à la fin de l'intégration. 75 */ 76@TangentOperator<DTAU_DF>{ 77 static_cast<void>(smt); // suppression d'un warning : la matrice 78 // tangente est toujours l'élastique 79 StiffnessTensor De = lambda*Stensor4::IxI()+2*mu*Stensor4::Id(); 80 t2tost2<N,stress> dS = 0.5*De*t2tost2<N,strain>::dCdF(F1); 81 t2tost2<N,stress> dtau; 82 computePushForwardDerivative(dtau,dS,s,F1); 83 Dt = dtau; 84} 85 86@InternalEnergy{ 87 const auto tr = trace(e); 88 Psi_s = lambda*tr*tr/2+mu*(e|e); 89} 90