1/*! 2 * \file StiffnessTensor.ixx 3 * \brief 4 * \author Thomas Helfer 5 * \date 23 oct. 2014 6 * \copyright Copyright (C) 2006-2018 CEA/DEN, EDF R&D. All rights 7 * reserved. 8 * This project is publicly released under either the GNU GPL Licence 9 * or the CECILL-A licence. A copy of thoses licences are delivered 10 * with the sources of TFEL. CEA or EDF may also distribute this 11 * project under specific licensing conditions. 12 */ 13 14#ifndef LIB_TFEL_MATERIAL_STIFFNESSTENSORIXX 15#define LIB_TFEL_MATERIAL_STIFFNESSTENSORIXX 16 17#include<algorithm> 18 19namespace tfel{ 20 21 namespace material{ 22 23 namespace internals{ 24 25 template<unsigned short N,StiffnessTensorAlterationCharacteristic smt> 26 struct ComputeIsotropicStiffnessTensorI; 27 28 template<unsigned short N,StiffnessTensorAlterationCharacteristic smt> 29 struct ComputeOrthotropicStiffnessTensorI; 30 31 template<> 32 struct ComputeIsotropicStiffnessTensorI<1u,StiffnessTensorAlterationCharacteristic::UNALTERED> 33 { 34 template<typename StressType,typename RealType> 35 static TFEL_MATERIAL_INLINE void 36 exe(tfel::math::st2tost2<1u,StressType>& C, 37 const StressType E,const RealType n){ 38 const StressType l = E*n/((1.-2*n)*(1+n)); 39 const StressType G = E/(1+n); 40 const StressType C11 = l+G; 41 C(0,0)=C11; 42 C(0,1)=C(0,2)=l; 43 C(1,1)=C11; 44 C(1,0)=C(1,2)=l; 45 C(2,0)=C(2,1)=l; 46 C(2,2)=C11; 47 } 48 }; 49 50 template<> 51 struct ComputeIsotropicStiffnessTensorI<1u,StiffnessTensorAlterationCharacteristic::ALTERED> 52 { 53 template<typename StressType,typename RealType> 54 static TFEL_MATERIAL_INLINE void 55 exe(tfel::math::st2tost2<1u,StressType>& C, 56 const StressType E,const RealType n) 57 58 { 59 constexpr const StressType zero = StressType(0); 60 const StressType C1 = E/(1-n*n); 61 const StressType C2 = n*C1; 62 C(0,0)=C1; 63 C(0,1)=C2; 64 C(0,2)=C(0,3)=zero; 65 C(1,0)=C2; 66 C(1,1)=C1; 67 C(1,2)=C(1,3)=zero; 68 C(2,0)=C(2,1)=zero; 69 } // end of struct computeIsotropicPlaneStressAlteredStiffnessTensor 70 }; 71 72 template<> 73 struct ComputeIsotropicStiffnessTensorI<2u,StiffnessTensorAlterationCharacteristic::UNALTERED> 74 { 75 template<typename StressType,typename RealType> 76 static TFEL_MATERIAL_INLINE void 77 exe(tfel::math::st2tost2<2u,StressType>& C, 78 const StressType E,const RealType n) 79 { 80 constexpr const StressType zero = StressType(0); 81 const StressType l = E*n/((1-2*n)*(1+n)); 82 const StressType G = E/(1+n); 83 const StressType C11 = l+G; 84 C(0,0)=C11; 85 C(0,1)=l; 86 C(0,2)=l; 87 C(0,3)=zero; 88 C(1,0)=l; 89 C(1,1)=C11; 90 C(1,2)=l; 91 C(1,3)=zero; 92 C(2,0)=l; 93 C(2,1)=l; 94 C(2,2)=C11; 95 C(2,3)=C(3,0)=zero; 96 C(3,1)=C(3,2)=zero; 97 C(3,3)=G; 98 } 99 }; // end of struct ComputeIsotropicStiffnessTensorI 100 101 102 template<> 103 struct ComputeIsotropicStiffnessTensorI<2u,StiffnessTensorAlterationCharacteristic::ALTERED> 104 { 105 template<typename StressType,typename RealType> 106 static TFEL_MATERIAL_INLINE void 107 exe(tfel::math::st2tost2<2u,StressType>& C, 108 const StressType E,const RealType n) 109 110 { 111 constexpr const StressType zero = StressType(0); 112 const StressType C1 = E/(1-n*n); 113 const StressType C2 = n*C1; 114 const StressType C3 = (1-n)*C1; 115 C(0,0)=C1; 116 C(0,1)=C2; 117 C(0,2)=C(0,3)=zero; 118 C(1,0)=C2; 119 C(1,1)=C1; 120 C(1,2)=C(1,3)=zero; 121 C(2,0)=C(2,1)=zero; 122 C(2,2)=C(2,3)=zero; 123 C(3,0)=C(3,1)=zero; 124 C(3,2)=zero; 125 C(3,3)=C3; 126 } // end of struct computeIsotropicPlaneStressAlteredStiffnessTensor 127 }; 128 129 template<StiffnessTensorAlterationCharacteristic smt> 130 struct ComputeIsotropicStiffnessTensorI<3u,smt> 131 { 132 template<typename StressType,typename RealType> 133 static TFEL_MATERIAL_INLINE void 134 exe(tfel::math::st2tost2<3u,StressType>& C, 135 const StressType E,const RealType n) 136 { 137 constexpr const StressType zero = StressType(0); 138 const StressType l = E*n/((1-2*n)*(1+n)); 139 const StressType G = E/(1+n); 140 const StressType C11 = l+G; 141 C(0,0)=C11; 142 C(0,1)=C(0,2)=l; 143 C(0,3)=C(0,4)=C(0,5)=zero; 144 C(1,0)=C(1,2)=l; 145 C(1,1)=C11; 146 C(1,3)=C(1,4)=C(1,5)=zero; 147 C(2,0)=C(2,1)=l; 148 C(2,2)=C11; 149 C(2,3)=C(2,4)=C(2,5)=zero; 150 C(3,0)=C(3,1)=C(3,2)=zero; 151 C(3,3)=G; 152 C(3,4)=C(3,5)=C(4,0)=zero; 153 C(4,1)=C(4,2)=C(4,3)=zero; 154 C(4,4)=G; 155 C(4,5)=C(5,0)=C(5,1)=zero; 156 C(5,2)=C(5,3)=C(5,4)=zero; 157 C(5,5)=G; 158 } // end of struct computeStiffnessTensor 159 }; 160 161 template<> 162 struct ComputeOrthotropicStiffnessTensorI<1u,StiffnessTensorAlterationCharacteristic::UNALTERED> 163 { 164 template<typename StressType,typename RealType> 165 static TFEL_MATERIAL_INLINE void 166 exe(tfel::math::st2tost2<1u,StressType>& C, 167 const StressType E1,const StressType E2,const StressType E3, 168 const RealType n12,const RealType n23,const RealType n13, 169 const StressType,const StressType,const StressType){ 170 const auto S11=1/E1; 171 const auto S22=1/E2; 172 const auto S33=1/E3; 173 const auto S12=-n12/E1; 174 const auto S13=-n13/E1; 175 const auto S23=-n23/E2; 176 const auto inv_detS=1/(S11*S22*S33+2*S23*S13*S12-S11*S23*S23-S22*S13*S13-S33*S12*S12); 177 C(0,0)=(S22*S33-S23*S23)*inv_detS; 178 C(0,1)=(S13*S23-S12*S33)*inv_detS; 179 C(0,2)=(S12*S23-S13*S22)*inv_detS; 180 C(1,0)=(S13*S23-S12*S33)*inv_detS; 181 C(1,1)=(S11*S33-S13*S13)*inv_detS; 182 C(1,2)=(S12*S13-S11*S23)*inv_detS; 183 C(2,0)=(S12*S23-S13*S22)*inv_detS; 184 C(2,1)=(S12*S13-S11*S23)*inv_detS; 185 C(2,2)=(S11*S22-S12*S12)*inv_detS; 186 } 187 }; 188 189 template<> 190 struct ComputeOrthotropicStiffnessTensorI<1u,StiffnessTensorAlterationCharacteristic::ALTERED> 191 { 192 template<typename StressType,typename RealType> 193 static TFEL_MATERIAL_INLINE void 194 exe(tfel::math::st2tost2<1u,StressType>& C, 195 const StressType E1,const StressType E2,const StressType E3, 196 const RealType n12,const RealType n23,const RealType n13, 197 const StressType,const StressType,const StressType) 198 { 199 const auto S11=1/E1; 200 const auto S22=1/E2; 201 const auto S33=1/E3; 202 const auto S12=-n12/E1; 203 const auto S13=-n13/E1; 204 const auto S23=-n23/E2; 205 const auto inv_detS=1/(S11*S22*S33+2*S23*S13*S12-S11*S23*S23-S22*S13*S13-S33*S12*S12); 206 const auto C00=(S22*S33-S23*S23)*inv_detS; 207 const auto C01=(S13*S23-S12*S33)*inv_detS; 208 const auto C02=(S12*S23-S13*S22)*inv_detS; 209 const auto C10=(S13*S23-S12*S33)*inv_detS; 210 const auto C11=(S11*S33-S13*S13)*inv_detS; 211 const auto C12=(S12*S13-S11*S23)*inv_detS; 212 const auto C20=(S12*S23-S13*S22)*inv_detS; 213 const auto C21=(S12*S13-S11*S23)*inv_detS; 214 const auto C22=(S11*S22-S12*S12)*inv_detS; 215 const auto tmp20 = C20/C22; 216 const auto tmp21 = C21/C22; 217 std::fill(C.begin(),C.end(),StressType(0.)); 218 C(0,0)=C00-C02*tmp20; 219 C(0,1)=C01-C02*tmp21; 220 C(1,0)=C10-C12*tmp20; 221 C(1,1)=C11-C12*tmp21; 222 } // end of exe 223 }; 224 225 template<> 226 struct ComputeOrthotropicStiffnessTensorI<2u,StiffnessTensorAlterationCharacteristic::UNALTERED> 227 { 228 template<typename StressType,typename RealType> 229 static TFEL_MATERIAL_INLINE void 230 exe(tfel::math::st2tost2<2u,StressType>& C, 231 const StressType E1,const StressType E2,const StressType E3, 232 const RealType n12,const RealType n23,const RealType n13, 233 const StressType G12,const StressType,const StressType) 234 { 235 const auto S11=1/E1; 236 const auto S22=1/E2; 237 const auto S33=1/E3; 238 const auto S12=-n12/E1; 239 const auto S13=-n13/E1; 240 const auto S23=-n23/E2; 241 const auto inv_detS=1/(S11*S22*S33+2*S23*S13*S12-S11*S23*S23-S22*S13*S13-S33*S12*S12); 242 std::fill(C.begin(),C.end(),StressType(0.)); 243 C(0,0)=(S22*S33-S23*S23)*inv_detS; 244 C(0,1)=(S13*S23-S12*S33)*inv_detS; 245 C(0,2)=(S12*S23-S13*S22)*inv_detS; 246 C(1,0)=(S13*S23-S12*S33)*inv_detS; 247 C(1,1)=(S11*S33-S13*S13)*inv_detS; 248 C(1,2)=(S12*S13-S11*S23)*inv_detS; 249 C(2,0)=(S12*S23-S13*S22)*inv_detS; 250 C(2,1)=(S12*S13-S11*S23)*inv_detS; 251 C(2,2)=(S11*S22-S12*S12)*inv_detS; 252 C(3,3)=2*G12; 253 } // end of exe 254 }; 255 256 template<> 257 struct ComputeOrthotropicStiffnessTensorI<2u,StiffnessTensorAlterationCharacteristic::ALTERED> 258 { 259 template<typename StressType,typename RealType> 260 static TFEL_MATERIAL_INLINE void 261 exe(tfel::math::st2tost2<2u,StressType>& C, 262 const StressType E1,const StressType E2,const StressType E3, 263 const RealType n12,const RealType n23,const RealType n13, 264 const StressType G12,const StressType,const StressType) 265 { 266 const auto S11=1/E1; 267 const auto S22=1/E2; 268 const auto S33=1/E3; 269 const auto S12=-n12/E1; 270 const auto S13=-n13/E1; 271 const auto S23=-n23/E2; 272 const auto inv_detS=1/(S11*S22*S33+2*S23*S13*S12-S11*S23*S23-S22*S13*S13-S33*S12*S12); 273 const auto C00=(S22*S33-S23*S23)*inv_detS; 274 const auto C01=(S13*S23-S12*S33)*inv_detS; 275 const auto C02=(S12*S23-S13*S22)*inv_detS; 276 const auto C10=(S13*S23-S12*S33)*inv_detS; 277 const auto C11=(S11*S33-S13*S13)*inv_detS; 278 const auto C12=(S12*S13-S11*S23)*inv_detS; 279 const auto C20=(S12*S23-S13*S22)*inv_detS; 280 const auto C21=(S12*S13-S11*S23)*inv_detS; 281 const auto C22=(S11*S22-S12*S12)*inv_detS; 282 const auto tmp20 = C20/C22; 283 const auto tmp21 = C21/C22; 284 std::fill(C.begin(),C.end(),StressType(0.)); 285 C(0,0)=C00-C02*tmp20; 286 C(0,1)=C01-C02*tmp21; 287 C(1,0)=C10-C12*tmp20; 288 C(1,1)=C11-C12*tmp21; 289 C(3,3)=2*G12; 290 } // end of exe 291 }; 292 293 template<StiffnessTensorAlterationCharacteristic smt> 294 struct ComputeOrthotropicStiffnessTensorI<3u,smt> 295 { 296 template<typename StressType,typename RealType> 297 static TFEL_MATERIAL_INLINE void 298 exe(tfel::math::st2tost2<3u,StressType>& C, 299 const StressType E1,const StressType E2,const StressType E3, 300 const RealType n12,const RealType n23,const RealType n13, 301 const StressType G12,const StressType G23,const StressType G13) 302 { 303 const auto S11=1/E1; 304 const auto S22=1/E2; 305 const auto S33=1/E3; 306 const auto S12=-n12/E1; 307 const auto S13=-n13/E1; 308 const auto S23=-n23/E2; 309 const auto inv_detS=1/(S11*S22*S33+2*S23*S13*S12-S11*S23*S23-S22*S13*S13-S33*S12*S12); 310 std::fill(C.begin(),C.end(),StressType(0.)); 311 C(0,0)=(S22*S33-S23*S23)*inv_detS; 312 C(1,1)=(S11*S33-S13*S13)*inv_detS; 313 C(2,2)=(S11*S22-S12*S12)*inv_detS; 314 C(0,1)=C(1,0)=(S13*S23-S12*S33)*inv_detS; 315 C(0,2)=C(2,0)=(S12*S23-S13*S22)*inv_detS; 316 C(1,2)=C(2,1)=(S12*S13-S11*S23)*inv_detS; 317 C(3,3)=2*G12; 318 C(4,4)=2*G13; 319 C(5,5)=2*G23; 320 } // end of struct exe 321 }; 322 323 template<ModellingHypothesis::Hypothesis H, 324 StiffnessTensorAlterationCharacteristic> 325 struct ComputeIsotropicStiffnessTensorII 326 : public ComputeIsotropicStiffnessTensorI<ModellingHypothesisToSpaceDimension<H>::value, 327 StiffnessTensorAlterationCharacteristic::UNALTERED> 328 {}; 329 330 template<> 331 struct ComputeIsotropicStiffnessTensorII<ModellingHypothesis::PLANESTRESS, 332 StiffnessTensorAlterationCharacteristic::ALTERED> 333 : public ComputeIsotropicStiffnessTensorI<2u,StiffnessTensorAlterationCharacteristic::ALTERED> 334 {}; 335 336 template<> 337 struct ComputeIsotropicStiffnessTensorII<ModellingHypothesis::AXISYMMETRICALGENERALISEDPLANESTRESS, 338 StiffnessTensorAlterationCharacteristic::ALTERED> 339 : public ComputeIsotropicStiffnessTensorI<1u,StiffnessTensorAlterationCharacteristic::ALTERED> 340 {}; 341 342 template<ModellingHypothesis::Hypothesis H, 343 StiffnessTensorAlterationCharacteristic smt> 344 struct ComputeOrthotropicStiffnessTensorII 345 : public ComputeOrthotropicStiffnessTensorI<ModellingHypothesisToSpaceDimension<H>::value, 346 StiffnessTensorAlterationCharacteristic::UNALTERED> 347 {}; 348 349 template<> 350 struct ComputeOrthotropicStiffnessTensorII<ModellingHypothesis::PLANESTRESS, 351 StiffnessTensorAlterationCharacteristic::ALTERED> 352 : public ComputeOrthotropicStiffnessTensorI<2u,StiffnessTensorAlterationCharacteristic::ALTERED> 353 {}; 354 355 template<> 356 struct ComputeOrthotropicStiffnessTensorII<ModellingHypothesis::AXISYMMETRICALGENERALISEDPLANESTRESS, 357 StiffnessTensorAlterationCharacteristic::ALTERED> 358 : public ComputeOrthotropicStiffnessTensorI<1u,StiffnessTensorAlterationCharacteristic::ALTERED> 359 {}; 360 361 /*! 362 * \brief class in charge of computing an orthotropic stiffness 363 * tensor according to: 364 * - The modelling hypothesis. 365 * - The choice of computing an altered or unaltered stiffness 366 * tensor. This parameter is only useful in plane stress 367 * modelling hypotheses. 368 * - The orthotropic axes convention. 369 * \tparam H: modelling hypothesis 370 * \tparam smt: stiffness matrix alteration choice 371 * \tparam c: orthotropic axis convention 372 */ 373 template<ModellingHypothesis::Hypothesis, 374 StiffnessTensorAlterationCharacteristic, 375 OrthotropicAxesConvention> 376 struct ComputeOrthotropicStiffnessTensor; 377 /*! 378 * \brief partial specialisation for the 379 * `OrthotropicAxesConvention::DEFAULT` orthotropic axes 380 * convention. 381 * \tparam H: modelling hypothesis 382 * \tparam smt: stiffness matrix alteration choice 383 */ 384 template<ModellingHypothesis::Hypothesis H, 385 StiffnessTensorAlterationCharacteristic smt> 386 struct ComputeOrthotropicStiffnessTensor<H,smt,OrthotropicAxesConvention::DEFAULT> 387 : public ComputeOrthotropicStiffnessTensorII<H,smt> 388 {}; 389 /*! 390 * \brief partial specialisation for the 391 * `OrthotropicAxesConvention::PIPE` orthotropic axes 392 * convention. 393 * \tparam H: modelling hypothesis 394 * \tparam smt: stiffness matrix alteration choice 395 */ 396 template<ModellingHypothesis::Hypothesis H, 397 StiffnessTensorAlterationCharacteristic smt> 398 struct ComputeOrthotropicStiffnessTensor<H,smt,OrthotropicAxesConvention::PIPE> 399 : public ComputeOrthotropicStiffnessTensorII<H,smt> 400 {}; 401 /*! 402 * \brief partial specialisation for the: 403 * - `ModellingHypothesis::PLANESTRESS` modelling hypothesis. 404 * - `OrthotropicAxesConvention::PIPE` orthotropic axes 405 * convention. 406 * \tparam smt: stiffness matrix alteration choice 407 */ 408 template<StiffnessTensorAlterationCharacteristic smt> 409 struct ComputeOrthotropicStiffnessTensor<ModellingHypothesis::PLANESTRESS, 410 smt,OrthotropicAxesConvention::PIPE> 411 { 412 template<typename StressType,typename RealType> 413 static TFEL_MATERIAL_INLINE void 414 exe(tfel::math::st2tost2<2u,StressType>& C, 415 const StressType E1, const StressType E2, const StressType E3, 416 const RealType n12,const RealType n23,const RealType n13, 417 const StressType G12,const StressType G23,const StressType G13) 418 { 419 using COST = ComputeOrthotropicStiffnessTensorII<ModellingHypothesis::PLANESTRESS,smt>; 420 COST::exe(C,E1,E3,E2, 421 n13,n23*E3/E2,n12, 422 G13,G23,G12); 423 424 } 425 }; 426 /*! 427 * \brief partial specialisation for the: 428 * - `ModellingHypothesis::PLANESTRAIN` modelling hypothesis. 429 * - `OrthotropicAxesConvention::PIPE` orthotropic axes 430 * convention. 431 * \tparam smt: stiffness matrix alteration choice 432 */ 433 template<StiffnessTensorAlterationCharacteristic smt> 434 struct ComputeOrthotropicStiffnessTensor<ModellingHypothesis::PLANESTRAIN, 435 smt,OrthotropicAxesConvention::PIPE> 436 { 437 template<typename StressType,typename RealType> 438 static TFEL_MATERIAL_INLINE void 439 exe(tfel::math::st2tost2<2u,StressType>& C, 440 const StressType E1, const StressType E2, const StressType E3, 441 const RealType n12,const RealType n23,const RealType n13, 442 const StressType G12,const StressType G23,const StressType G13) 443 { 444 using COST = ComputeOrthotropicStiffnessTensorII<ModellingHypothesis::PLANESTRAIN,smt>; 445 COST::exe(C,E1,E3,E2, 446 n13,n23*E3/E2,n12, 447 G13,G23,G12); 448 } 449 }; 450 /*! 451 * \brief partial specialisation for the: 452 * - `ModellingHypothesis::GENERALISEDPLANESTRAIN` modelling 453 * hypothesis. 454 * - `OrthotropicAxesConvention::PIPE` orthotropic axes 455 * convention. 456 * \tparam smt: stiffness matrix alteration choice 457 */ 458 template<StiffnessTensorAlterationCharacteristic smt> 459 struct ComputeOrthotropicStiffnessTensor<ModellingHypothesis::GENERALISEDPLANESTRAIN, 460 smt,OrthotropicAxesConvention::PIPE> 461 { 462 template<typename StressType,typename RealType> 463 static TFEL_MATERIAL_INLINE void 464 exe(tfel::math::st2tost2<2u,StressType>& C, 465 const StressType E1, const StressType E2, const StressType E3, 466 const RealType n12,const RealType n23,const RealType n13, 467 const StressType G12,const StressType G23,const StressType G13) 468 { 469 using COST = 470 ComputeOrthotropicStiffnessTensorII<ModellingHypothesis::GENERALISEDPLANESTRAIN,smt>; 471 COST::exe(C,E1,E3,E2, 472 n13,n23*E3/E2,n12, 473 G13,G23,G12); 474 } 475 }; 476 477 } // end of namespace internals 478 479 template<ModellingHypothesis::Hypothesis H> 480 template<typename StressType> 481 void 482 ComputeAlteredStiffnessTensor<H>::exe(tfel::math::st2tost2<ModellingHypothesisToSpaceDimension<H>::value,StressType>& Da, 483 const tfel::math::st2tost2<ModellingHypothesisToSpaceDimension<H>::value,StressType>& D) 484 { 485 Da = D; 486 } 487 488 template<typename StressType> 489 void 490 ComputeAlteredStiffnessTensor<ModellingHypothesis::PLANESTRESS>::exe(tfel::math::st2tost2<2u,StressType>& Da, 491 const tfel::math::st2tost2<2u,StressType>& D) 492 { 493 Da(0,0)=D(0,0)-D(2,0)/D(2,2)*D(0,2); 494 Da(0,1)=D(0,1)-D(2,1)/D(2,2)*D(0,2); 495 Da(1,0)=D(1,0)-D(2,0)/D(2,2)*D(1,2); 496 Da(1,1)=D(1,1)-D(2,1)/D(2,2)*D(1,2); 497 Da(0,2)=StressType(0); 498 Da(1,2)=StressType(0); 499 Da(2,0)=StressType(0); 500 Da(2,1)=StressType(0); 501 Da(2,2)=StressType(0); 502 Da(0,3)=StressType(0); 503 Da(1,3)=StressType(0); 504 Da(2,3)=StressType(0); 505 Da(3,0)=StressType(0); 506 Da(3,1)=StressType(0); 507 Da(3,2)=StressType(0); 508 Da(3,3)=D(3,3); 509 } // end of computeAlteredStiffnessTensor 510 511 template<unsigned short N,StiffnessTensorAlterationCharacteristic smt, 512 typename StressType,typename RealType> 513 void computeIsotropicStiffnessTensorII(tfel::math::st2tost2<N,StressType>& C, 514 const StressType E, 515 const RealType n) 516 { 517 tfel::material::internals::ComputeIsotropicStiffnessTensorI<N,smt>::exe(C,E,n); 518 } 519 520 template<unsigned short N,StiffnessTensorAlterationCharacteristic smt, 521 typename StressType,typename RealType> 522 void computeOrthotropicStiffnessTensorII(tfel::math::st2tost2<N,StressType>& C, 523 const StressType E1,const StressType E2,const StressType E3, 524 const RealType n12,const RealType n23,const RealType n13, 525 const StressType G12,const StressType G23,const StressType G13) 526 { 527 tfel::material::internals::ComputeOrthotropicStiffnessTensorI<N,smt>::exe(C,E1,E2,E3, 528 n12,n23,n13, 529 G12,G23,G13); 530 } 531 532 template<ModellingHypothesis::Hypothesis H,StiffnessTensorAlterationCharacteristic smt, 533 typename StressType,typename RealType> 534 void computeIsotropicStiffnessTensor(tfel::math::st2tost2<ModellingHypothesisToSpaceDimension<H>::value,StressType>& C, 535 const StressType E, 536 const RealType n) 537 { 538 tfel::material::internals::ComputeIsotropicStiffnessTensorII<H,smt>::exe(C,E,n); 539 } 540 541 template<ModellingHypothesis::Hypothesis H,StiffnessTensorAlterationCharacteristic smt, 542 typename StressType,typename RealType> 543 void computeOrthotropicStiffnessTensor(tfel::math::st2tost2<ModellingHypothesisToSpaceDimension<H>::value,StressType>& C, 544 const StressType E1,const StressType E2,const StressType E3, 545 const RealType n12,const RealType n23,const RealType n13, 546 const StressType G12,const StressType G23,const StressType G13) 547 { 548 tfel::material::internals::ComputeOrthotropicStiffnessTensorII<H,smt>::exe(C,E1,E2,E3, 549 n12,n23,n13, 550 G12,G23,G13); 551 } 552 553 template<ModellingHypothesis::Hypothesis H, 554 StiffnessTensorAlterationCharacteristic smt, 555 OrthotropicAxesConvention c, 556 typename StressType,typename RealType> 557 void computeOrthotropicStiffnessTensor(tfel::math::st2tost2<ModellingHypothesisToSpaceDimension<H>::value,StressType>& C, 558 const StressType E1, const StressType E2, const StressType E3, 559 const RealType n12,const RealType n23,const RealType n13, 560 const StressType G12,const StressType G23,const StressType G13) 561 { 562 internals::ComputeOrthotropicStiffnessTensor<H,smt,c>::exe(C,E1,E2,E3, 563 n12,n23,n13, 564 G12,G23,G13); 565 } 566 567 } // end of namespace material 568 569} // end of namespace tfel 570 571#endif /* LIB_TFEL_MATERIAL_STIFFNESSTENSORIXX */ 572