// ************************************************************************ // --- Logiciel MEF++ // --- // --- Copyright 1996-2006 GIREF, Université Laval // --- TOUS DROITS RÉSERVÉS // --- ALL RIGHTS RESERVED // --- // --- Ce logiciel est couvert par la Loi sur le droit d'auteur. // --- L'utilisation, ou la modification de ce logiciel sous toutes ses // --- formes, que ce soit code source ou code compilé, à des fins // --- personnelles et non commerciales sont autorisées sans frais pour // --- autant que la présente notice de copyright ainsi que cette // --- permission apparaissent dans toutes les copies ainsi que dans la // --- documentation. // --- Le GIREF et l'Université Laval ne prétendent en aucune façon que // --- ce code convient à un emploi quelconque. Celui-ci est distribué // --- sans aucune garantie implicite ou explicite. // ************************************************************************ #ifndef ChampQijklCelluleViscoMaxwellHPP_DEJA_INCLUS #define ChampQijklCelluleViscoMaxwellHPP_DEJA_INCLUS // ******************************************************************** // Nom du fichier: ChampQijklCelluleViscoMaxwellHPP // // Nom de la classe: ChampQijklCelluleViscoMaxwellHPP // // Sommaire: Classe calculant, pour une cellule visco-élastique de Maxwell avec // l'hypothèse des petites perturbations (élasticité linéaire), // et une resolution par thetaschema un TO4. En cas // de viellissement on a la possibilité de distinguer deux états du solide // et d'employer deux lois de comportement: loi de Hooke ou loi de Bazant. // // Description: Ce champ calcul un tenseur O4 à partir du tenseur d'élasticité E et du // tenseur de viscosité N de la cellule visco-elastique linéaire. Il sert à produire // la contribution aux contraintes cellule visco-élastique de Maxwell. // On se place dans le cas des petites perturbations // (élasticité linéaire) et en cas de vieillissement on peut distinguer deux états exigeant // un traitement différent. Généralelement il s'agit de distinguer le durcissement ou // l'assouplissementle via signe de la dérivée de l'élasticité p/r au temps. Pour ces deux // états on peut utiliser une des deux lois de comportement: loi de Hooke (sigma = E epsilon) // ou de Bazant (dsigma/dt = E depsilon/dt) via un indicateur d'état. On suppose dans cette classe // que ces tenseurs peuvent dépendre du temps de la façon suivante: //

//!{! E_{ijkh}(t,x) = b(t,x)E_{ijkl}^{ref}(x) !}! le champ du tenseur d'élasticité:,

//!{! N_{ijkh}(t,x) = a(t,x)N_{ijkl}^{ref}(x) !}! le champ du tenseur de viscosite:,

//!{! l(x,t) =\frac{b}{a}(x,t)!} le champ multiplicatif de \Lambda^{ref}_{ijkl}(x)= \frac{E_{ijkl}^{ref}(x)}{N_{ijkl}^{ref}(x)} //!{! \chi(t,x) \le 0\text{ si loi de Hooke} !}! //!{! \chi(t,x) > 0 \text{ si loi de Bazant} !}! // NOTE: le non-vieillissement correspond au cas b(t,x)=b(x) !

//

// Ce champ est utilisé pour calculer:

//!{!E^{3,p}_{ijkl} = -E_{ijkl}^{ref}(x)[\frac{1-(1-\theta) \Delta{t}\gamma^{p, n}_{ijkl}} // {1+\theta \Delta{t}\alpha^{p, n+1}_{ijkl}} !}! //

//!{!\alpha^{p, n+1}_{ijkl} l^{n+1}(x)\Lambda^{ref}_{ijkl} -p\frac{db^{n+1}\dt(x)}{b^{n+1}(x)} !}! //

// !{!\Gamma^{p, n+1}_{ijkl} (db\dt)(t,x) +b^{n+1}(x)\alpha^{p, n+1}_{ijkl} !}! //

// // ChampTensorielO4Sym *aChampElasticiteRef: l'élasticité de référence // ChampTensorielO4Sym *aChampViscositeRef: la viscosite de référence // ChampScalaire *aChampMultiplicateur_b; // ChampScalaire *aChampMultiplicateur_bPrecedent; // ChampScalaire *aChampDeriveeMultiplicateur_b; // ChampScalaire *aChampDeriveeMultiplicateur_bPrecedent; // ChampScalaire *aChampFonctionVieillisementLambda: \frac{b(t_{n+1},x)}{a(t_{n+1},x)} // ChampScalaire *aChampFonctionVieillisementLambdaPrecedent: \frac{b(t_n,x)}{a(t_n,x)} // ChampScalaire *aChampIndicateurEtat; // DReel *aPasDeTemps; // DReel aThetaSchema; // ******************************************************************** #include "MEFPPUtil.h" #include "ChampAnalytiqueBaseDiscParElement.h" #include "ChampScalaireComposanteDiscontinu.h" #include "ChampTensO4SymDiscParElement.h" #include "ChampTensO4SymMinDiscParElement.h" #include "TenseurO4Sym.h" #include "TenseurO4SymMin.h" class ChampVect3DContinu; class ChampTensorielO4Sym; class ChampTensorielO4SymMin; class ChampQijklCelluleViscoMaxwellHPP : public ChampAnalytiqueBaseDiscParElement { public: typedef InfoLocalesChamp InfoLocalesChampTO4Sym; ChampQijklCelluleViscoMaxwellHPP (const std::string& pNom = "Defaut"); ChampQijklCelluleViscoMaxwellHPP (const ChampQijklCelluleViscoMaxwellHPP& pChampQijklCelluleViscoMaxwellHPP); ~ChampQijklCelluleViscoMaxwellHPP(); ChampQijklCelluleViscoMaxwellHPP& operator= (const ChampQijklCelluleViscoMaxwellHPP& pChampQijklCelluleViscoMaxwellHPP); virtual void ajouteEvaluationsAFaire(Entier pChoixEvaluations, const SchemaIntg& pSchemaIntg); virtual void ajouteSchemaIntegration(const SchemaIntg& pSchemaIntg); virtual void enleveToutSchemaIntegrations(); virtual void remetAZeroEvaluationsAFaire(const SchemaIntg& pSchemaIntg); void asgnChampsSansVieillissement(ChampTensorielO4Sym &pChampElasticiteRef, ChampTensorielO4Sym &pChampFonctionElasticiteViscositeRef, DReel &pPasDeTemps, const DReel &pThetaSchema); void asgnChampsAvecVieillissement(ChampTensorielO4Sym &pChampElasticiteRef, ChampTensorielO4Sym &pChampFonctionElasticiteViscositeRef, ChampScalaire &pChampMultiplicateur_b, ChampScalaire &pChampMultiplicateur_bPrecedent, ChampScalaire &pChampDeriveeMultiplicateur_b, ChampScalaire &pChampDeriveeMultiplicateur_bPrecedent, ChampScalaire &pChampFonctionVieillisementLambda, ChampScalaire &pChampFonctionVieillisementLambdaPrecedent, ChampScalaire &pChampIndicateurEtat, DReel &pPasDeTemps, const DReel &pThetaSchema); template const VectDyn >& transfertChampSurGenerique(const PTTypeObjet& pObjet, const SchemaIntg& pSchemaIntg, const VectDyn& pVectInfoLocalesTransformation) const; virtual const VectDyn >& transfertChampSur(const Maillage::TypeElement& pElem, const SchemaIntg& pSchemaIntg, const VectDyn& pVectInfoLocalesTransformation) const; virtual void asgnTemps (const DReel& pTemps); virtual void evalue(const Vecteur3D& pCoor, const DReel& pTemps, TenseurO4Sym& pValeur) const; virtual ERMsg importeVersion0 (std::istream& pEntree); virtual ERMsg exporteVersion0 (std::ostream& pSortie) const; virtual void ecrisVirtuel (PRStreamEcriture& pPREcriture) const; virtual void lisVirtuel (PRStreamLecture& pPRLecture); virtual ChampQijklCelluleViscoMaxwellHPP* newChamp() const; virtual ChampQijklCelluleViscoMaxwellHPP* newChampCopie() const ; virtual ChampScalaire& reqComposante (const Entier pIndice) ; virtual const ChampScalaire& reqComposante (const Entier pIndice) const ; private: ChampTensorielO4Sym *aChampElasticiteRef; ChampTensorielO4Sym *aChampFonctionElasticiteViscositeRef; ChampScalaire *aChampMultiplicateur_b; ChampScalaire *aChampMultiplicateur_bPrecedent; ChampScalaire *aChampDeriveeMultiplicateur_b; ChampScalaire *aChampDeriveeMultiplicateur_bPrecedent; ChampScalaire *aChampFonctionVieillisementLambda; ChampScalaire *aChampFonctionVieillisementLambdaPrecedent; ChampScalaire *aChampIndicateurEtat; DReel *aPasDeTemps; DReel aThetaSchema; VectFixe, 21> aComposantes; bool aAppelRecursifComposante; _GIREF_DECLARE_INVARIANTS; }; #endif // #ifndef ChampQijklCelluleViscoMaxwellHPP_DEJA_INCLUS