1 /*! 2 * \file AbaqusSymbolsGenerator.cxx 3 * \brief 4 * \author Thomas Helfer 5 * \date 19/07/2018 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 #include <ostream> 15 #include "TFEL/Raise.hxx" 16 #include "MFront/BehaviourDescription.hxx" 17 #include "MFront/StandardBehaviourInterface.hxx" 18 #include "MFront/AbaqusInterface.hxx" 19 #include "MFront/AbaqusSymbolsGenerator.hxx" 20 21 namespace mfront { 22 23 AbaqusSymbolsGenerator::AbaqusSymbolsGenerator() = default; 24 writeAdditionalSymbols(std::ostream &,const StandardBehaviourInterface &,const BehaviourDescription &,const FileDescription &,const std::string &,const Hypothesis) const25 void AbaqusSymbolsGenerator::writeAdditionalSymbols( 26 std::ostream&, 27 const StandardBehaviourInterface&, 28 const BehaviourDescription&, 29 const FileDescription&, 30 const std::string&, 31 const Hypothesis) const { 32 } // end of AbaqusSymbolsGenerator::writeAdditionalSymbols 33 writeSpecificSymbols(std::ostream & out,const StandardBehaviourInterface & i,const BehaviourDescription & mb,const FileDescription &,const std::string & name) const34 void AbaqusSymbolsGenerator::writeSpecificSymbols( 35 std::ostream& out, 36 const StandardBehaviourInterface& i, 37 const BehaviourDescription& mb, 38 const FileDescription&, 39 const std::string& name) const { 40 if (mb.getSymmetryType() == mfront::ORTHOTROPIC) { 41 if (!mb.hasAttribute( 42 AbaqusInterface::orthotropyManagementPolicy)) { 43 out << "MFRONT_SHAREDOBJ unsigned short " 44 << i.getFunctionNameBasis(name) 45 << "_OrthotropyManagementPolicy = 0u;\n\n"; 46 } else { 47 const auto omp = mb.getAttribute<std::string>( 48 AbaqusInterface::orthotropyManagementPolicy); 49 if (omp == "MFront") { 50 out << "MFRONT_SHAREDOBJ unsigned short " 51 << i.getFunctionNameBasis(name) 52 << "_OrthotropyManagementPolicy = 2u;\n\n"; 53 } else if (omp == "Native") { 54 out << "MFRONT_SHAREDOBJ unsigned short " 55 << i.getFunctionNameBasis(name) 56 << "_OrthotropyManagementPolicy = 1u;\n\n"; 57 } else { 58 tfel::raise( 59 "AbaqusSymbolsGenerator::writeSpecificSymbols: " 60 "unsupported orthotropy management policy"); 61 } 62 } 63 } 64 } // end of AbaqusSymbolsGenerator::writeSpecificSymbols 65 writeBehaviourTypeSymbols(std::ostream & out,const StandardBehaviourInterface & i,const BehaviourDescription & mb,const std::string & name) const66 void AbaqusSymbolsGenerator::writeBehaviourTypeSymbols( 67 std::ostream& out, 68 const StandardBehaviourInterface& i, 69 const BehaviourDescription& mb, 70 const std::string& name) const { 71 auto throw_if = [](const bool b, const std::string& m) { 72 tfel::raise_if(b, 73 "AbaqusSymbolsGenerator::writeBehaviourTypeSymbols: " + m); 74 }; 75 out << "MFRONT_SHAREDOBJ unsigned short " 76 << i.getFunctionNameBasis(name) << "_BehaviourType = "; 77 if (mb.getBehaviourType() == 78 BehaviourDescription::STANDARDSTRAINBASEDBEHAVIOUR) { 79 if ((AbaqusInterfaceBase::hasFiniteStrainStrategy(mb)) && 80 (AbaqusInterfaceBase::getFiniteStrainStrategy(mb) != "Native")) { 81 out << "2u;\n\n"; 82 } else { 83 out << "1u;\n\n"; 84 } 85 } else if (mb.getBehaviourType() == 86 BehaviourDescription::STANDARDFINITESTRAINBEHAVIOUR) { 87 out << "2u;\n\n"; 88 } else { 89 throw_if(true, "unsupported behaviour type"); 90 } 91 } // end of AbaqusSymbolsGenerator::writeBehaviourTypeSymbols 92 writeBehaviourKinematicSymbols(std::ostream & out,const StandardBehaviourInterface & i,const BehaviourDescription & mb,const std::string & name) const93 void AbaqusSymbolsGenerator::writeBehaviourKinematicSymbols( 94 std::ostream& out, 95 const StandardBehaviourInterface& i, 96 const BehaviourDescription& mb, 97 const std::string& name) const { 98 auto throw_if = [](const bool b, const std::string& m) { 99 tfel::raise_if( 100 b, "AbaqusSymbolsGenerator::writeBehaviourKinematicSymbols: " + m); 101 }; 102 out << "MFRONT_SHAREDOBJ unsigned short " 103 << i.getFunctionNameBasis(name) << "_BehaviourKinematic = "; 104 if (mb.getBehaviourType() == 105 BehaviourDescription::STANDARDSTRAINBASEDBEHAVIOUR) { 106 if (AbaqusInterfaceBase::hasFiniteStrainStrategy(mb)) { 107 out << "3u;\n\n"; 108 } else { 109 out << "1u;\n\n"; 110 } 111 } else if (mb.getBehaviourType() == 112 BehaviourDescription::STANDARDFINITESTRAINBEHAVIOUR) { 113 out << "3u;\n\n"; 114 } else { 115 throw_if(true, "unsupported behaviour type"); 116 } 117 } // end of AbaqusSymbolsGenerator::writeBehaviourKinematicSymbols 118 handleStrainMeasure() const119 bool AbaqusSymbolsGenerator::handleStrainMeasure() const{ 120 return true; 121 } // end of AbaqusSymbolsGenerator::handleStrainMeasure 122 123 AbaqusSymbolsGenerator::~AbaqusSymbolsGenerator() = default; 124 125 } // end of namespace mfront 126