Metafor

ULiege - Aerospace & Mechanical Engineering

User Tools

Site Tools


commit:2018:10_24

This is an old revision of the document!


Commit - LPx - 24 Octobre 2018

Interface matériaux Lagamine : - Mise en place de la structure informatique - interface de loi “simples”

Contexte :

  • Le projet SolarPerform (Laurent Duchêne UEE), consiste à développer pour CMI une loi matériau pour les tubes de centrales électriques solaires à sels fondus.
  • Une série d'expériences ont été faites par le CRM pour mesurer le comportement du matériau à (très) haute température et Hélène Morch (doctorante chez Laurent) a développé la loi matériau correspondante dans Lagamine.
  • Afin d'assurer l'exploitation de la dite loi par GDTech pour le compte de CMI, il nous a été demandé de retranscrire cette loi dans Metafor (GDTech possédant licences et compétences pour utiliser Metafor).
  • Après réflexion avec Romain et Jean-Philippe, on a plutôt proposé d'interfacer la loi matériau de Lagamine afin de pouvoir l'appeler dans un calcul Metafor.
  • Le présent commit est la première phase de cette interface. Il consiste en :
    • la compilation de Lagamine (Fortran) sous forme d'une librairie statique
    • la génération d'une librairie dynamique appelable par le C++ et contenant les matériaux interfacés
    • la génération d'une structure de matériaux Metafor gérant les paramètres matériaux, les appels aux fonctions de calcul du matériau, la gestions des valeurs aux points d'intégration (GPState) et termes de raideur (GKState),…
    • une première série de tests (ATTENTION, IL N'Y A PAS ENCORE EUT DE VERIFICATION COMPARATIVE ET DETAILLEE DE LA QUALITE DES RESULTATS NUMERIQUES)

Compilation de Lagamine (sous forme de programme)

  • Les sources de Lagamine sont composées d'un prépro (Prepro), du solveur (Lagamine) et d'un post-pro (Select)
  • Un snapshot des sources Lagamine (version officielle du 02/10/2018) a été commitée sur un répository du département UEE du GitLab de l'ULiège : https://gitlab.uliege.be/UEE/Lagamine (en cas de besoin d'accéder à ces sources, demander à L.Duchêne de vous donner l'accès au repository)
  • Ces sources sont actuellement inchangées
  • Une branche dénommée “L.Papeleux” a été créée
  • Des CMakeList.txt ont été ajoutés, fait un peu de nettoyage de forme (suppression de fichiers _old et _bak, suppression des espaces en fin de ligne, …)
  • La compilation sous windows (via le compilateur intel fortran 17) effectuée
  • ATTENTION :
    • la version windows est intimement dépendante d'un module du compilateur fortran nommé "QuickWin"
    • CMake ne supporte pas “QuickWin”.
    • Il faut donc pour compiler Lagamine sous Windows modifier le projet après création par CMake :
      • Sélectionner le projet → properties
      • Dans la configuration Fortran → Librairies : choisir comme RuntimeLibrary “QuickWin” en Release et “Debug QuickWin” en Debug (voir figures)
      • Valider (Apply)

  • Au besoin, faire de même pour les autres projets (Prepro et Select)
  • La suppression de la dépendance à QuickWin ainsi que le portage sous Linux (à sources constantes) demandant de travailler la structure et le fond du code, on n'a pas poursuivi cette voie plus avant (le but d'avoir une version de debug de Lagamine sur mon pc étant atteint)

Compilation de Lagamine (sous forme de librairie)

  • Un projet “LagamineAPI” a été crée dans le groupe du service sur le GitLab ULiège pour générer une librairie dynamique des lois matériaux de Lagamine appelable par Metafor. Ce projet est accessible à l'adresse : https://gitlab.uliege.be/am-dept/MN2L/LagamineAPI
  • Le projet se décompose en
    • LagamineLib : génération d'une lib statique Fortran de Lagamine (tout est dans la lib, sauf les fichiers qui ne compilent pas sous linux). Cette section ne contient aucune source, pour compiler cette lib, il est nécessaire de faire un “git clone” des sources de Lagamine (à partir du gitlab UEE)
    • LagamineAPI : génération d'une lib dynamique C++ contenant uniquement les lois choisies. Actuellement, seules 4 lois matériaux sont interfacées :
      • ELA3D : loi élastique
      • ARB3D : loi élasto-plastique à écrouissage isotrope/mixte/cinématique
      • HILL3D : loi élasto-plastique à surface de plasticité de Hill 48
      • IRSID3D : (je sais pas trop)
    • Pour interfacer une loi, il faut :
      • définir l'interface vers la loi fortran dans le fichier “lagamine.h” (le mecanisme CMake “FortranCInterface” permet d'assurer à travers CMake le respect des Calling Convention entre fortran et C/C++. C'est CMake qui génère les Macros “FC_GLOBAL” et “FC_GLOBAL_”. Voir le fichier FC.h dans le répertoire de compilation du projet)
      • générer une fonction C++ dans le namespace qui se borne à appeler la fonction fortran (fichiers “lagamineAPI.h/cpp”)
    • Attention, pour générer ce projet, il est nécessaire de disposer d'un compilateur Fortran et C++
  • La librairie lagamineAPI.dll (lagamineAPI.so) est compilée dans mes Libs (sur le ftp : /ftp/metafor/bin/VS2015_X64/LibsVS2015_2018-10-23.zip) et installée sur toutes les stations (sauf fabulous)
    • ⇒ mettez à jour vos Libs (et réexecutez le setup)
    • =⇒ mettez à jour vos LinuxBin (~/bin) sur les stations
  • Cette librairie est appelée à évoluer au fur et à mesure que j'ajouterais des lois matériaux dans l'interface

Metafor

  • Nouveau projet dans oo_nda : mtLagamine
  • Le matériau générique LagamineMaterial dérive de HypoMaterial
  • les matériaux interfacé sont :
    • ElaLagMaterial : interface vers ELA3D
    • ArbLagMaterial : interface vers ARB3D
    • Hill48LagMaterial : interface vers HILL3D
  • Les pages de doc sont à faire pour définir la signification des paramètres matériaux ⇒ actuellement regardez dans les tests …
  • Principales différences avec Metafor :
    • Calcul en contraintes (pas de séparation Deviatoric et Volumic) ⇒ pas possible d'utiliser les SRI “PURS”
    • ce n'est pas l'incrément de défo qui est passé au calcul des contraintes, mais le tenseur D “taux de déformation
    • La matrice de raideur est calculée au moment du calcul des contraintes (ca me simplifie le travail, je n'ai que 1 routine à interfacer) ⇒ stoquée dans le LagamineGPKState dans la variable “complianceTensor” (9×9 doubles)
    • Une fonction void FourthOrderTensor3D::addLagamineComplianceTensor(const double *c) ajoute la matrice de raideur matérielle dans le formalisme Metafor

Structure informatique :

Lois interfacées :

UPDATE :

Fichiers ajoutés/supprimés :

Added :
Deleted : 
Moved : 

Tests ajoutés/supprimés

Adding: 
Deleted : 
Moved : 

Luc Papeleux 2018/10/23

commit/2018/10_24.1540317964.txt.gz · Last modified: 2018/10/23 20:06 by papeleux

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki