// ************************************************************************ // --- 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 ChampCelluleViscoElastiqueFormulationThetaSchemasMaxwellHPP_DEJA_INCLUS #define ChampCelluleViscoElastiqueFormulationThetaSchemasMaxwellHPP_DEJA_INCLUS // ******************************************************************** // Nom du fichier: ChampCelluleViscoElastiqueFormulationThetaSchemasMaxwellHPP.h // // Nom de la classe: ChampCelluleViscoElastiqueFormulationThetaSchemasMaxwellHPP // // 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^{1,p}_{ijkl} = E_{ijkl}^{ref}(x)(b^{n+1}(x)-\frac{\theta \Delta{t}\gamma^{p, n+1}_{ijkl}} // {1+\theta \Delta{t}\alpha^{p, n+1}_{ijkl}} !}! //

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

// !{!\Gamma^{p, n+1}_{ijkl} (db\dt)(t,x) +b(x,t)\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 *aChampDeriveeMultiplicateur_b; // ChampScalaire *aChampFonctionVieillisementLambda: \frac{b(t,x)}{a(t,x)} // ChampScalaire *aChampIndicateurEtat; // DReel *aPasDeTemps; // DReel *aThetaSchema; // ******************************************************************** #include "MEFPPUtil.h" #include "ChampAnalytiqueBaseDiscParElement.h" #include "ChampScalaireComposanteDiscontinu.h" #include "ChampTensO4SymDiscParElement.h" #include "TenseurO4Sym.h" class ChampVect3DContinu; class ChampTensorielO4Sym; class ChampCelluleViscoElastiqueFormulationThetaSchemasMaxwellHPP : public ChampAnalytiqueBaseDiscParElement { public: typedef InfoLocalesChamp InfoLocalesChampTO4Sym; ChampCelluleViscoElastiqueFormulationThetaSchemasMaxwellHPP (const std::string& pNom = "Defaut"); ChampCelluleViscoElastiqueFormulationThetaSchemasMaxwellHPP (const ChampCelluleViscoElastiqueFormulationThetaSchemasMaxwellHPP& pChampCelluleViscoElastiqueFormulationThetaSchemasMaxwellHPP); ~ChampCelluleViscoElastiqueFormulationThetaSchemasMaxwellHPP(); ChampCelluleViscoElastiqueFormulationThetaSchemasMaxwellHPP& operator= (const ChampCelluleViscoElastiqueFormulationThetaSchemasMaxwellHPP& pChampCelluleViscoElastiqueFormulationThetaSchemasMaxwellHPP); 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 &pChampElasticite, ChampTensorielO4Sym &pChampFonctionElasticiteViscositeRef, DReel &pPasDeTemps, const DReel &pThetaSchema); void asgnChampsAvecVieillissement(ChampTensorielO4Sym &pChampElasticiteRef, ChampTensorielO4Sym &pChampFonctionElasticiteViscositeRef, ChampScalaire &pChampMultiplicateur_b, ChampScalaire &pChampDeriveeMultiplicateur_b, ChampScalaire &pChampFonctionVieillisementLambda, 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 ChampCelluleViscoElastiqueFormulationThetaSchemasMaxwellHPP* newChamp() const; virtual ChampCelluleViscoElastiqueFormulationThetaSchemasMaxwellHPP* 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 *aChampFonctionVieillisementLambda; ChampScalaire *aChampIndicateurEtat; DReel *aPasDeTemps; DReel aThetaSchema; VectFixe, 21> aComposantes; bool aAppelRecursifComposante; _GIREF_DECLARE_INVARIANTS; }; #endif // #ifndef ChampCelluleViscoElastiqueFormulationThetaSchemasMaxwellHPP_DEJA_INCLUS