//************************************************************************ // --- 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 GeorgesVisco_ChampPseudoContraintesO4_DEJA_INCLUS #define GeorgesVisco_ChampPseudoContraintesO4_DEJA_INCLUS //******************************************************************** // Nom du fichier: GeorgesVisco_ChampPseudoContraintesO4.h // // Nom de la classe: GeorgesVisco_ChampPseudoContraintesO4 // // Sommaire: Classe calculant un champ de pseudo-contraintes (tenseur d'ordre 4 à symétries mineures) // en se servant d'une relation de de reccurence comme celle retrouvée dans un modèle visco-élastique // de Maxwell ou Kelvin-Voigt. // // Description: Ce champ calcul le tenseur des pseudo-contraintes à partir du champ des déplacements // au temps précédent et courant, de la pseudo-contrainte précédente et des tenseur d'ordre 4 // I et S. Dans le cas du modèle de Maxwell I et S dépendent du temps de relaxation et les pseudo-contraintes // contiennent l'historique des contraintes et servent au calcul des contraintes courantes. // //

// !{!\sigma_{ijkl} = S_{ijkl}(\epsilon_{kl}(U) -\epsilon_{kl}(UPrec)) + I_{ijkl}\sigma^{Prec}_{ijkl}\quad\text{sans\,sommation}!}! //

// Si on assigne pas le champ des deplacements au pas precedent on suppose une formulation incrementale. //

//!{! U !}! champ des deplacements (ou l'increment des deplacements si UPrec absent)

//!{! UPrec !}! champ des deplacements au temps precedent

//!{!I_{ijkh} !}! champ de tenseur d'ordre 4 symetrique

//!{!S _{ijkh} !}! champ de tenseur d'ordre 4 symetrique

//!{!\sigma^{Prec}_{ijkl}!}! champ de pseudo-contrainte au pas precedent

//!{!\epsilon_{kl}!}! champ des deformations

!{!\epsilon_{ij}=\frac{1}{2}(U_{i,j}+ U_{j,i})!}!

// Attributs: // ChampTensorielO4SymMin *aSigmaPrecedent // ChampTensorielO4Sym *aI // ChampTensorielO4Sym *aS // ChampVectoriel3D *aChampDeplacements // ChampVectoriel3D *aChampDeplacementPrecedents // //**************************************************************************************** #include "MEFPPUtil.h" #include "ChampAnalytiqueBaseDiscParElement.h" #include "ChampScalaireComposanteDiscontinu.h" #include "ChampTensO4SymMinDiscParElement.h" #include "TenseurO4SymMin.h" #include class ChampScalContinu; class ChampTensorielO4SymMin; class GeorgesVisco_ChampPseudoContraintesO4: public ChampAnalytiqueBaseDiscParElement { public: GeorgesVisco_ChampPseudoContraintesO4(const std::string& pNom = "Defaut"); GeorgesVisco_ChampPseudoContraintesO4(const GeorgesVisco_ChampPseudoContraintesO4& pGeorgesVisco_ChampPseudoContraintesO4); ~GeorgesVisco_ChampPseudoContraintesO4(); GeorgesVisco_ChampPseudoContraintesO4& operator= (const GeorgesVisco_ChampPseudoContraintesO4& pGeorgesVisco_ChampPseudoContraintesO4); virtual void ajouteEvaluationsAFaire(Entier pChoixEvaluations, const SchemaIntg& pSchemaIntg); virtual void ajouteSchemaIntegration(const SchemaIntg& pSchemaIntg); virtual void enleveToutSchemaIntegrations(); virtual void remetAZeroEvaluationsAFaire(const SchemaIntg& pSchemaIntg); void calculVectInfoLocalesChamp(const VectDyn > & pSigmaPrecedent, const VectDyn > & pI, const VectDyn > & pS, const VectDyn > & pU, const VectDyn > & pUPrecedent, VectDyn > & pSigma) const; void asgnChamps (ChampTensorielO4SymMin & pSigmaPrecedent, ChampTensorielO4Sym & pI, ChampTensorielO4Sym & pS, ChampVectoriel3D & pChampDeplacement, ChampVectoriel3D & pChampDeplacementsPrecedent); void asgnChamps (ChampTensorielO4SymMin & pSigmaPrecedent, ChampTensorielO4Sym & pI, ChampTensorielO4Sym & pS, ChampVectoriel3D & pChampDeplacement); 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, TenseurO4SymMin& 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 GeorgesVisco_ChampPseudoContraintesO4* newChamp() const; virtual GeorgesVisco_ChampPseudoContraintesO4* newChampCopie() const ; virtual ChampScalaire& reqComposante (const Entier pIndice) ; virtual const ChampScalaire& reqComposante (const Entier pIndice) const ; private: ChampTensorielO4SymMin *aSigmaPrecedent; ChampTensorielO4Sym *aI; ChampTensorielO4Sym *aS; ChampVectoriel3D *aChampDeplacements; ChampVectoriel3D *aChampDeplacementsPrecedent; VectFixe, 36> aComposantes; bool aNonIncrementale; bool aAppelRecursifComposante; _GIREF_DECLARE_INVARIANTS; }; #endif // #ifndef GeorgesVisco_ChampPseudoContraintesO4_DEJA_INCLUS