Metafor

ULiege - Aerospace & Mechanical Engineering

User Tools

Site Tools


commit:2018:01_06

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
Last revisionBoth sides next revision
commit:2018:01_06 [2018/01/06 22:33] – [LineSearch - Initial Balancing et IterationResolution] wauteletcommit:2018:01_06 [2018/01/07 14:54] wautelet
Line 2: Line 2:
  
 Ce commit est pour un petit nettoyage de la routine IterationResolution. Ce commit est pour un petit nettoyage de la routine IterationResolution.
- 
-==== IterationResolution ==== 
- 
-J'ai fait entré la ligne de code im.incrementIterationNo() dans le "if/else im.getMaxNbOfIterationsReached()", ce qui est beaucoup plus cohérent ! 
- 
-J'ai commentarisé la ligne de commande  "this->metafor.getDomain().getEqualityDofConstraintsSet().impose();" car ceci est fait plus bas suite à la routine dofsCorrections(). 
- 
-J'ai formalisé la sortie du Line Search comme les itérations mécaniques : notations scientifiques sous forme exponentielle.  
  
 ==== LineSearch - Initial Balancing et IterationResolution ==== ==== LineSearch - Initial Balancing et IterationResolution ====
Line 23: Line 15:
 $$ res_{LS} \left(0 \right) = \mathbf{F}^{OOB}\left(\mathbf{x}^{(i)} \right)  . \mathbf{\Delta x}^{(i)} $$ $$ res_{LS} \left(0 \right) = \mathbf{F}^{OOB}\left(\mathbf{x}^{(i)} \right)  . \mathbf{\Delta x}^{(i)} $$
  
-Puisque la direction de recherche $\mathbf{\Delta x^{(i)}$ respecte la relation suivante :  +Puisque la direction de recherche $\mathbf{\Delta x}^{(i)}$ respecte la relation suivante : 
- +
-$$\mathbf{K}_{T}^(i) \mathbf{\Delta x^{(i)} = - \mathbf{F}^{{OOB}^{(i)}}$$ +
- +
-Ainsi, nous avons que le résidu du line search est négatif si la matrice de raideur tangente est définie positive. +
  
 +$$\mathbf{K}_{T}^{(i)} . \mathbf{\Delta x}^{(i)} = - \mathbf{F}^{{OOB}^{(i)}}$$
  
 +Ainsi, nous avons que le résidu du line search est négatif en $\alpha = 0$ si la matrice de raideur tangente est définie positive : 
  
 +$$ res_{LS} \left(0 \right) = - \ \mathbf{\Delta x}^{(i)} . \mathbf{K}_{T}^{(i)} . \mathbf{\Delta x}^{(i)} $$
  
 ==== Nettoyage du flag forcesAreComputed de IterationManager ==== ==== Nettoyage du flag forcesAreComputed de IterationManager ====
  
-Ce flag est utilisée principalement pour éviter de calculer deux fois d'affiler les forces lorsque que l'on utilise le Line Search. Par exemple, apps_qs_cont2AnaLineSearch, nous avons à +Ce flag est utilisée principalement pour éviter de calculer deux fois d'affiler les forces lorsque que l'on utilise le Line Search. Par exemple, apps_qs_cont2AnaLineSearch, nous avons au dernier step : 
  
 +<code>
 + *** STEP 28: t= 2 - dt= 0.015238 - CPU= 1.72s/6.60s
 + 
 +mechanical iteration  0 : Rmean =   1.500380e-01 Rmax =   8.334497e+01 (Calcul des forces en $\mathbf{x}^(0)$)
 +cpuRatio = 4 reactualisation = 1 iterationIsRefused = 0
 +  - Line search : iteration  0, coefficient =   0.000000e+00, residual =  -8.948260e-02 
 +  - Line search : iteration  1, coefficient =   1.000000e+00, residual =   7.992926e-04 (Calcul des forces en$\mathbf{x}^(1)$)
 +mechanical iteration  1 : Rmean =   5.908959e-03 Rmax =   3.549713e+00 (On ne recalcule pas les forces en $\mathbf{x}^(1)$)
 +</code>
  
 On comprend directement l'intérêt de ne pas calculer deux fois la même chose ! On comprend directement l'intérêt de ne pas calculer deux fois la même chose !
  
-Le plus gros problème est qu'il faut garantir quelque soit le comportement des algorithmes utilisée pour la résolution d'un pas de temps, que ce flag soit dans un état cohérent, ce qui est loin d'être trivial vu le nombre de situation complexe à considérer. Pour se faire, j'ai supprimé ce flag de l'IterationManager et j'ai instancié une variable booléenne "forcesAreComputed" au niveau de la boucle d'intégration temporelle du schéma d'intégration (même niveau que la variable booléenne "rester"). Ainsi, j'ai fait passer en argument d'entrée aux fonctions iterationResolution, auxiliaryMethods, iterationInitialisation, skylineUpdate.+Le plus gros problème est qu'il faut garantir quelque soit le comportement des algorithmes utilisés pour la résolution d'un pas de temps, que ce flag soit dans un état cohérent, ce qui est loin d'être trivial vu le nombre de situation complexe à considérer. Pour se faire, j'ai supprimé ce flag de l'IterationManager et j'ai instancié une variable booléenne "forcesAreComputed" au niveau de la boucle d'intégration temporelle du schéma d'intégration (même niveau que la variable booléenne "rester"). Ainsi, j'ai fait passer en argument d'entrée aux fonctions iterationResolution, auxiliaryMethods, iterationInitialisation, skylineUpdate.
    
  
commit/2018/01_06.txt · Last modified: 2018/01/09 22:53 by wautelet

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki