Metafor

ULiege - Aerospace & Mechanical Engineering

User Tools

Site Tools


commit:2019:08_13

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
commit:2019:08_13 [2019/08/13 22:50] – [Divers] wauteletcommit:2019:08_13 [2019/08/14 22:56] (current) – [Commit 2019-08-13] wautelet
Line 1: Line 1:
 ===== Commit 2019-08-13 ====== ===== Commit 2019-08-13 ======
  
-Ce commit a pour but d'interfacer directement l'algorithme du Line Search Structural dans le jeux de données python. Dès lors, nous ne passerons plus par l'IterationManager pour pouvoir l'activer dans notre jeux de données.+Ce commit a pour but d'interfacer directement l'algorithme du Line Search Structural dans le jeux de données python. Dès lors, nous ne passerons plus par l'IterationManager pour pouvoir l'activer dans nos jeux de données.
    
 <note important>Il y a un changement majeur dans l'interface du Line Search Structural ! </note> <note important>Il y a un changement majeur dans l'interface du Line Search Structural ! </note>
 +
 +Pour mon prochain commit, il y aura une nouvelle implémentation du Line Search Structural plus performante que celle actuelle.
 ==== Structural Line Search - Refactoring ==== ==== Structural Line Search - Refactoring ====
  
-=== FullStepStructuralLineSearch ===+J'ai placé les fonctions relatives à l'algorithme du Line Search Structural de l'IterationManager vers une nouvelle arborescence d'objets. La classe d'interface pure virtuelle est StructuralLineSearchBase qui permet de communiquer entre l'IterationManager et l'algorithme du Line Search Structural.
  
-=== StandardStructuralLineSearch ===+=== FullStepStructuralLineSearch (Derive de StructuralLineSearchBase) ===
  
 +Cette méthode correspond à la méthode classique de Newton Raphson où la taille du pas selon la direction de recherche est de 1.
 +
 +<code>
 +mim = metafor.getIterationManager()
 +lineSearch = FullStepStructuralLineSearch(mim)
 +lineSearch.setVerbose(boolParameter|default value = False)
 +lineSearch.setDebug(boolParameter|default value = False)
 +mim.setStructuralLineSearch(lineSearch)
 +</code>
 +
 +<note important>Cette méthode est celle utilisée par défaut.</note> 
 +
 +=== StandardStructuralLineSearch (Derive de StructuralLineSearch = une classe virtuelle) ===
 +
 +Cette méthode correspond au Line Search Structural programmée par Ludovic Noëls. Je remets ici les différents paramètres d'utilisation de l'algorithme.
 +
 +<code>
 +mim = metafor.getIterationManager()
 +lineSearch = StandardStructuralLineSearch(mim)
 +lineSearch.setVerbose(boolParameter|default value = False)
 +lineSearch.setDebug(boolParameter|default value = False)
 +lineSearch.setMaxNbOfLineSearchIterations(integerParameter|default value = 10);
 +lineSearch.setLineSearchTolerance1(doubleParameter|default value = 1.0);
 +lineSearch.setLineSearchTolerance2(doubleParameter|default value = 1.0E-8);
 +lineSearch.setAbsMaxLineSearchCoefficient(doubleParameter|default value = 10.0);
 +lineSearch.setAbsMinLineSearchCoefficient(doubleParameter|default value = 0.0);
 +mim.setStructuralLineSearch(lineSearch)
 +</code>
 +
 +Désormais, il est possible de normaliser le résidu du Line Search Structural via la commande suivante :
 +
 +<code>
 +lineSearch.setUseNormalisedCriterion(boolParameter|default value = False)
 +</code>
  
 +On divise tout simplement les résidus du Line Search Structural par la valeur obtenue à l'itération numéro 0. La tolérance 1 dans ce cas de figure est relative et non plus absolue.
  
 ==== Jeux de données - Structural Line Search ==== ==== Jeux de données - Structural Line Search ====
Line 20: Line 57:
 J'ai regroupé dans cette section différentes modifications du code source. J'ai regroupé dans cette section différentes modifications du code source.
  
-=== MiscValueExtractor ===+  * MiscValueExtractor 
  
-Suite au refactoring du Line Search, j'ai remis à plat les grandeurs archivées pour le Line Search.+Suite au refactoring du Line Search, j'ai remis à plat les grandeurs archivées pour le Line Search Structural mécanique et thermique via le MiscValueExtractor(). J'en ai profité pour sortir aussi les nombres d'itération mécanique ou thermique avec ou sans mise à jour de la matrice de raideur tangente.
  
 +<code>
 +  valueExtractor = MiscValueExtractor(meta, type)
 +</code>  
  
-Les cas-tests ont été adapté de manière à conserver les valeurs archivées avant le commit.+Je vous renvoie vers la documentation mise à jour pour plus d'informations [[doc:user:results:courbes_res|]].
  
-=== Cast Test - nastranTriSkinContactTool.py ===+Les cas-tests avec le Line Search Structural ont été adapté de manière à conserver les valeurs archivées avant le commit. 
 + 
 +  * Cast Test - nastranTriSkinContactTool.py
  
 Pour diminuer l'utilisation du temps CPU lors de la recherche du contact, j'ai activé l'utilisation des arbres (BoundaryVolumeHierarchy).  Pour diminuer l'utilisation du temps CPU lors de la recherche du contact, j'ai activé l'utilisation des arbres (BoundaryVolumeHierarchy). 
  
-=== VectorToScalarOperator ===+  * VectorToScalarOperator  
 + 
 +J'ai ajouté de nouveaux opérateurs pour l'archivage des grandeurs au cours d'un calcul : 
  
-Recherche du minimum parmi les valeurs d'un vecteur en excluant les valeurs nulles.+1) Recherche du minimum parmi les valeurs d'un vecteur en excluant les valeurs nulles.
    
 <code> <code>
Line 39: Line 83:
 </code> </code>
  
-Recherche du maximum parmi les valeurs d'un vecteur en excluant les valeurs nulles.+2) Recherche du maximum parmi les valeurs d'un vecteur en excluant les valeurs nulles.
  
 <code> <code>
Line 45: Line 89:
 </code> </code>
  
-Recherche du minimum en valeur absolue parmi les valeurs d'un vecteur en excluant les valeurs nulles. Cette grandeur garde son signe. +3) Recherche du minimum en valeur absolue parmi les valeurs d'un vecteur en excluant les valeurs nulles. Cette grandeur garde son signe. 
  
 <code> <code>
Line 51: Line 95:
 </code> </code>
  
-Recherche du maximum en valeur absolue parmi les valeurs d'un vecteur en excluant les valeurs nulles. Cette grandeur garde son signe. +4) Recherche du maximum en valeur absolue parmi les valeurs d'un vecteur en excluant les valeurs nulles. Cette grandeur garde son signe. 
  
 <code> <code>
 AbsMaxOfNonZeroOperator()  AbsMaxOfNonZeroOperator() 
 </code> </code>
-Recherche du minimum en valeur absolue parmi les valeurs prises en valeur absolue d'un vecteur en excluant les valeurs nulles. Cette grandeur est toujours positive.  + 
 +5) Recherche du minimum parmi les valeurs prises en valeur absolue d'un vecteur en excluant les valeurs nulles. Cette grandeur est toujours positive.   
 <code> <code>
 MinAbsOfNonZeroOperator() MinAbsOfNonZeroOperator()
 </code>  </code> 
-Recherche du maximum parmi les valeurs prises en valeur absolue d'un vecteur en excluant les valeurs nulles. Cette grandeur est toujours positive. + 
 +6) Recherche du maximum parmi les valeurs prises en valeur absolue d'un vecteur en excluant les valeurs nulles. Cette grandeur est toujours positive.  
 <code> <code>
 MaxAbsOfNonZeroOperator() MaxAbsOfNonZeroOperator()
 </code> </code>
  
-=== QuadSide ===+  * QuadSide 
  
 J'ai enrichi le message d'erreur et le message de warning lors l’exécution de la fonction giveCornerEdgeProjection(). J'ai enrichi le message d'erreur et le message de warning lors l’exécution de la fonction giveCornerEdgeProjection().
 +
 ===== Fichiers ajoutés/supprimés ====== ===== Fichiers ajoutés/supprimés ======
  
commit/2019/08_13.1565729419.txt.gz · Last modified: 2019/08/13 22:50 by wautelet

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki