// This file is part of the Herezh++ application.
//
// The finite element software Herezh++ is dedicated to the field
// of mechanics for large transformations of solid structures.
// It is developed by Gérard Rio (APP: IDDN.FR.010.0106078.000.R.P.2006.035.20600)
// INSTITUT DE RECHERCHE DUPUY DE LÔME (IRDL) <https://www.irdl.fr/>.
//
// Herezh++ is distributed under GPL 3 license ou ultérieure.
//
// Copyright (C) 1997-2022 Université Bretagne Sud (France)
// AUTHOR : Gérard Rio
// E-MAIL : gerardrio56@free.fr
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License,
// or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty
// of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
// See the GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
//
// For more information, please consult: <https://herezh.irdl.fr/>.
#include"Hyper10.h"#include"Loi_comp_abstraite.hc"# include <iostream>usingnamespacestd;//introduces namespace std
#include<math.h>#include<stdlib.h>#include"Sortie.h"Hyper10::Hyper10():// Constructeur par defaut
Hyper3D(ISOHYPER10,false),K(0.),Qor(0.),mur(0.),mu_inf(0.){};// Constructeur de copie
Hyper10::Hyper10(constHyper10&loi):Hyper3D(loi),K(loi.K),Qor(loi.Qor),mur(loi.mur),mu_inf(loi.mu_inf){};// Lecture des donnees de la classe sur fichier
voidHyper10::LectureDonneesParticulieres(UtilLecture*entreePrinc){// lecture des quatres coefficients de la loi
*(entreePrinc->entree)>>K>>Qor>>mur>>mu_inf;// appel au niveau de la classe mère
Loi_comp_abstraite::Lecture_type_deformation_et_niveau_commentaire(*entreePrinc,lesFonctionsnD,false);};// affichage de la loi
voidHyper10::Affiche(){cout<<"\n loi de comportement 3D hyperélastique isotrope nb 10 : "<<Nom_comp(id_comp)<<" paramètres : \n";cout<<" K= "<<K<<" ; Qor = "<<Qor<<" ; mur = "<<mur<<" ; mu_inf = "<<mu_inf;cout<<endl;};// test si la loi est complete
intHyper10::TestComplet(){intret=LoiAbstraiteGeneral::TestComplet();if((K==0.)&&(Qor==0.)&&(mur==0.)&&(mu_inf==0.)){cout<<"\n Les paramètres ne sont pas défini pour la loi "<<Nom_comp(id_comp)<<'\n';ret=0;}returnret;};// =========== METHODES Protégées dérivant de virtuelles : ==============
// calcul du potentiel et de ses dérivées non compris la phase
voidHyper10::Potentiel(double&,double&V,double&Qeps,double&E,double&EV,double&EQeps){// le potentiel
doubleco1=Qor*Qor/2./mur;doubleA=cosh(2.*mur*Qeps/Qor);doubleco2=co1/A*2.*mur/Qor;doublelogV=log(V);doubleKsur6=K/6.;doubleKsur12logVsurV=K/12.*log(V)/V;doubledeux_mu_inf_Qeps=mu_inf*2.*Qeps;E=Ksur6*(logV)*(logV)+co1*log(A)+mu_inf*Qeps*Qeps;EV=Ksur12logVsurV;EQeps=co1/A*sinh(2.*mur*Qeps/Qor)*2.*mur/Qor;};// calcul du potentiel et de ses dérivées avec la phase
voidHyper10::PotentielPhase(double&,double&,double&,double&,double&,double&,double&,double&,double&){// le potentiel ne dépend pas de la phase d'où un message d'erreur
{cout<<"\nErreur : Hyper10::PotentielPhase( ... !";cout<<"\n le potentiel Hyper10 ne dépend pas de la phase !\n";Sortie(1);};};// calcul du potentiel sans phase et dérivées avec ses variations par rapport aux ddl
voidHyper10::Potentiel_et_var(double&,Tableau<double>&,double&V,Tableau<double>&dV,double&Qeps,