===== Commit 2016-06-21 ====== Ce commit permet de faire du thermo-mécanique avec le lagrangien augmenté. Etant donné que c'était assez bien implémenté dans la partie mécanique, il y avait peu de modifications importantes à effectuer pour pouvoir l'utiliser en thermomécanique. ==== Matériau de contact thermo-mécanique ==== Pour faire du thermo-mécanique, il suffit d'instancier les matériaux du type lagrangien augmenté (ceux avec la dénotation AugLag dans leur nom). Le nombre de paramètres utilisateurs est le même entre la version pénalité et la version lagrangien augmenté du matériau. Par exemple, pour du thermomécanique sans frottement, il suffit de substituer TmFrictionlessContactMaterial par TmAugLagFrictionlessContactMaterial dans votre jeux de données. C'est la même chose pour les matériaux de frottement selon le critère de Tresca (TmAugLagTrescaContactMaterial) et de Coulomb (TmAugLagCoulombContactMaterial), et le matériau avec collement (TmAugLagStickingContactMaterial). ==== Mise à jour du pas de temps ==== Sur base de mes travaux précédents, j'ai étendu les méthodes de calcul du pas de temps pour les schémas d'intégration thermomécanique étagé et couplé. En bref, il se base tous les deux sur l'algorithme de mise à jour du pas du temps de JPP où on passe en argument une itération mécanique équivalente (dépendant du nombre d'itérations mécaniques et du nombre d'augmentations) ou une itération thermique. === Schéma d'intégration thermo-mécanique étagé === Le nombre d'itérations correspond au maximum entre les nombres d'itérations mécaniques équivalentes et thermiques : tscm = NbOfStaggeredTmAugLagNRIterationsTimeStepComputationMethod(metafor) tscm.setEquivalentIteMethod(_equivalentIteMethod) tscm.setTimeStepDivisionFactor(_timeStepDivisionFactor) tscm.setMaxNbOfIteInAdaptOfTimeStep(_maxNbOfIteInAdaptOfTimeStep) tscm.setNbOptiIte(_nbOptiIte) tsm.setTimeStepComputationMethod(tscm) === Schéma d'intégration thermo-mécanique couplé === Le nombre d'itérations correspond au nombre d'itérations thermomécaniques équivalentes : tscm = NbOfCoupledTmAugLagNRIterationsTimeStepComputationMethod(metafor) tscm.setEquivalentIteMethod(_equivalentIteMethod) tscm.setTimeStepDivisionFactor(_timeStepDivisionFactor) tscm.setMaxNbOfIteInAdaptOfTimeStep(_maxNbOfIteInAdaptOfTimeStep) tscm.setNbOptiIte(_nbOptiIte) tsm.setTimeStepComputationMethod(tscm) === Schéma d'intégration mécanique avec Lagrangien Augmenté === Le nombre d'itérations correspond au nombre d'itérations mécaniques : tscm = NbOfMechAugLagNRIterationsTimeStepComputationMethod(metafor) tscm.setEquivalentIteMethod(_equivalentIteMethod) tscm.setTimeStepDivisionFactor(_timeStepDivisionFactor) tscm.setMaxNbOfIteInAdaptOfTimeStep(_maxNbOfIteInAdaptOfTimeStep) tscm.setNbOptiIte(_nbOptiIte) tsm.setTimeStepComputationMethod(tscm) ==== Paramètres ==== ^ Paramètre ^ Défaut ^ Description ^ | ''maxNbOfIteInAdaptOfTimeStep'' | 0 | Nombre d'itérations maximales pour faire diminuer le pas de temps si le nombre d'itérations est supérieur au nombre d'itérations optimales | | ''nbOptiIte'' | 4 | Nombre d'itérations optimales | | ''timeStepDivisionFactor'' | 3.0 | Facteur de division du pas de temps en cas de problème durant la résolution du step | Pour le paramètre equivalentIte, je vous renvoie à mon commit précédent [[commit:2016:04_25]]. ==== Méthode par défaut de chaque schéma d'intégration ==== ^ Intégration temporelle ^ Défaut ^ | ''Quasi-statique Mechanical Time Integration'' | "NbOfMechAugLagNRIterationsTimeStepComputationMethod" | | ''Implicit Mechanical Time Integration'' | "NbOfMechAugLagNRIterationsTimeStepComputationMethod" | | ''Coupled ThermoMechanical Time Integration'' | "NbOfCoupledTmAugLagNRIterationsTimeStepComputationMethod" | | ''Staggered ThermoMechanical Time Integration'' | "NbOfStaggeredTmAugLagNRIterationsTimeStepComputationMethod" | Par défaut, si on active le lagrangien augmenté, la bonne méthode de calcul du pas de temps est automatiquement instanciée dans le time step manager avec les paramètres par défaut. Attention le schéma d'intégration thermomécanique couplé n'est pas totalement validé ! Il faut l'utiliser avec précaution et privilégier le schéma d'intégration thermomécanique étagé ! ==== Cas-tests d'écrasement d'un bloc élastique en état plan déformation ==== J'ai ajouté quelques cas-tests d'interface pour les matériaux de contact en lagrangien augmenté avec un schéma d'intégration thermomécanique étagé et couplé. Il semblerait qu'il ne soit pas possible de faire passer le cas test d'écrasement d'un bloc en schéma d'intégration thermomécanique couplé avec un matériau du type Coulomb. Il est vrai que ce type de schéma d'intégration n'est pas totalement validé dans Metafor (Matrice de raideur numérique par exemple, enchainement des opérations, etc ...). ===== Fichiers ajoutés/supprimés ====== [a]:mtContact/src/TmAugLagCoulombContactMaterial.cpp [a]:mtContact/src/TmAugLagCoulombContactMaterial.h [a]:mtContact/src/TmAugLagFrictionlessContactMaterial.cpp [a]:mtContact/src/TmAugLagFrictionlessContactMaterial.h [a]:mtContact/src/TmAugLagStickingContactMaterial.cpp [a]:mtContact/src/TmAugLagStickingContactMaterial.h [a]:mtContact/src/TmAugLagTrescaContactMaterial.cpp [a]:mtContact/src/TmAugLagTrescaContactMaterial.h [a]:mtFEM/algos/NbOfAugLagNRIterationsTimeStepComputationMethod.cpp [a]:mtFEM/algos/NbOfAugLagNRIterationsTimeStepComputationMethod.h [a]:mtFEM/algos/NbOfCoupledTmAugLagNRIterationsTimeStepComputationMethod.cpp [a]:mtFEM/algos/NbOfCoupledTmAugLagNRIterationsTimeStepComputationMethod.h [a]:mtFEM/algos/NbOfStaggeredTmAugLagNRIterationsTimeStepComputationMethod.cpp [a]:mtFEM/algos/NbOfStaggeredTmAugLagNRIterationsTimeStepComputationMethod.h [r]: [rename]:mtFEM/algos/NbOfMechAugLagNRIterationsTimeStepComputationMethod.cpp => mtFEM/algos/NbOfAugLagMechNRIterationsTimeStepComputationMethod.cpp [rename]:mtFEM/algos/NbOfMechAugLagNRIterationsTimeStepComputationMethod.h => mtFEM/algos/NbOfAugLagMechNRIterationsTimeStepComputationMethod.h ===== Cas tests ajoutés/supprimés ====== [a]:apps/contactTm/RdEplBlockAugLagCoulomb.py [a]:apps/contactTm/RdEplBlockAugLagFrictionLess.py [a]:apps/contactTm/RdEplBlockAugLagSticking.py [a]:apps/contactTm/RdEplBlockAugLagTresca.py [a]:apps/contactTm/RdEplBlockAugLagFrictionLessFull.py [a]:apps/contactTm/RdEplBlockAugLagStickingFull.py [a]:apps/contactTm/RdEplBlockAugLagTrescaFull.py [a]:apps/contactTm/RdEplBlockFrictionLessFull.py [a]:apps/contactTm/RdEplBlockStickingFull.py [a]:apps/contactTm/RdEplBlockTrescaFull.py [r]: