Metafor

ULiege - Aerospace & Mechanical Engineering

User Tools

Site Tools


commit:2016:01_06

Commit 2016-01-06

  • Déplacement des GPM0_d et GPM1_d dans les MechanicalVolumeIntegrationMethod
  • Correction mesure temps CPU dans le cas de très petits cas tests (Yves)

GPMx_d => MechanicalVolumeIntegrationMethod

Depuis la mise en place des méthodes d'intégration mécaniques , il était prévu que celles-ci contiennent leurs données propres d'intégration. C'est maintenant chose faite pour les éléments volumiques / AEJ et XFEM (pas les coques qui n'ont pas été écrite dans ce schéma):

  • Déplacement de VolumeElement::GPMx_d → MechanicalVolumeIntegrationMethod::GPMx
  • Déplacement de VolumeElement::GPTMx_d → MechanicalVolumeIntegrationMethod::GPTMx
  • Suppression de tous les passage de GPMx, GPTMx dans les fonctions entre les éléments et leurs méthodes d'intégration
  • Déplacement des allocations / désallocations / meminfo / … relatifs aux variables aux IP
  • suppression de la référence au nombre de points d'intégration dans les éléments (numberofIpv, numberOfIpd,…)
  • Vu le déplacement des GPM, les facs sont incompatibles avec la version précédente (sorry, peux pas faire autrement)
  • J'ai du laisser 4 fonctions d'accès aux GPM dans les mvim POUR LES XFEM UNIQUEMENT. NE PAS UTILISER EN DEHORS SVP…
    • MechanicalGpState &getGPM0(size_t ipt);
    • MechanicalGpState &getGPM1(size_t ipt);
    • MechanicalGpkState &getGKstate(size_t ipt);
    • double getWeightDetJ(size_t ipt);

AEJ :

  • Application de ces modifs aux AEJ
  • next step : faire dériver les AEJ des volumeElements (suppression des copiers-coller) : le but initial de ce boulot

XFEM :

  • Tentative de nettoyage des éléments XFEM de Ewen pour tenter de suivre ce schéma. Ce qui est implémenté ne sont pas des XFEM avec variables d'enrichissement, mais juste une intégration par sous triangles des éléments partiellement remplis, mais sur les shapeFunctions du quad. Au delà de la gestion géométrique (par levelset, je ne suis pas allé voir à quoi ca ressemblait), ca devrait être géré par une méthode d'intégration uniquement !!!
  • Vu la localisation des GPM dans les MVIM, il n'y a plus de conflit entre les GPM du quad et des tri sous jascents…
  • Globalement : Attention, c'est le musée des horreurs
    • mise en page illisible
    • commentaire disant l'inverse de ce qui est fait
    • variables/typedefs dont le nom ne correspond pas à la valeur (ex : Configuration Conf0 = Configuration::currentConf ; ) : facile pour débugger
    • calcul des déformation : j'ai fini par comprendre son résonnement, mais ca fait peur !!!
    • code non utilisé (ex : matrice de raideur analytique même si gros commentaire disant que seule l'analytique est utilisable, tout passe par la numérique vu que la fonction noAnalyticalStiffnessAvailable n'existe pas)
    • sousIntégration : sur les triangles uniquement ⇒ ca doit pas bien marcher !!!

Divers

  • Les méthodes d'intégrations gérant dorénavant la problématique de sous intégration de la pression ⇒ simplification des io via ajout d'une fonction isMechanicalInternalField(type) reprenant le gros if dupliqué 50 fois dans le code!!
  • Nettoyage des fonctions d'extrapolation loufoques des éléments de degré 2
  • bugFix TM Adiabatique :
    • l'appel à la fonction computeMaterialPartOfVolumicStiffnessAdiab ne se faisait jamais que sur les valeurs du premier point d'intégration déviatorique (qu'on soit std/sri/eas/… GPM[0]⇒GPM[ptg])
  • unification du passage en const de la NatureID des fonctions d'extraction :
    • bool fillElementMeanInternalField(ScalarNatureID const &type, double &value);
    • bool fillElementGpInternalField(ScalarNatureID const &, std::vector<double> &values);
    • bool getTdField(ScalarNatureID const &type, double &value);
  • renaming :
    • getCurrentPositionOfGaussianPoints → getPosOfIntegrationPoints
    • nom de variable trop long : MechanicalVolumeIntegrationMethods<DIM> *mechanicalVolumeIntegrationMethods; → MechanicalVolumeIntegrationMethods<DIM> *mechIntegMethods;
  • renaming to continue :
    • GP→IP
    • supprimer les référence à déviatoric : _d / deviatoric / …

Modification mesure temps CPU (Yves)

Suppression de l'opérateur bool de la classe Times.

operator bool() const;

Celui-ci était utilisé lors du “if(tStart)” lors de l'appel à la fonction read() renvoyant la mesure du temps.

Times
Timer::read() const
{
    if(tStart)
        return tElaps + Times().read() - tStart;
    else
        return tElaps;
}

L'appel au if(tStart) renvoyait un static_cast<bool>(user): user étant le temps écoulé dans l'espace utilisateur depuis le début du process. Cette valeur pouvait être nulle dans le cas où la phase de prépro précédent le démarrage du timer est très courte comme dans MetaLub2.0. Dans ce cas, le if(tStart) renvoyait 0, la fonction read() renvoyait tElaps initialisé à 0 et les différentes composantes du temps (kernel, user et real) étaient nulles bien que le temps CPU ait été différent de 0.

Pour corriger ça, j'ai introduit un booléen isOn dans la fonction read(), isOn étant mis à true lors du démarrage du timer.

Times
Timer::read() const
{
    if (isOn)
        return tElaps + Times().read() - tStart;
    else
        return tElaps;
}

tests

  • neant

Fichiers ajoutés/supprimés

Added : 
Renamed : 
Deleted : oo_meta\mtElements\aej\AejElement.inl

Tests ajoutés/supprimés

Added : 
Renamed : 
Deleted :

Luc Papeleux 2016/01/06

commit/2016/01_06.txt · Last modified: 2018/05/04 15:46 by boman