commit:futur:gaetan
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
commit:futur:gaetan [2016/04/23 16:16] – wautelet | commit:futur:gaetan [2019/07/14 11:11] (current) – [Boundary Volume Hierarchy] wautelet | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== Commit | + | ====== Commit |
===== Modifications principales ===== | ===== Modifications principales ===== | ||
- | Ce commit porte principalement sur l' | + | Ce commit porte principalement sur l' |
- | ==== Algorithme du Lagrangien Augmenté ==== | + | |
- | Je vous met à profit les derniers développements sur l' | + | ==== Algorithme du Line Search Structurel |
+ | |||
+ | Je vous mets à profit les derniers développements sur l' | ||
=== Algorithme Général === | === Algorithme Général === | ||
- | J'ai constaté à ma grande surprise qu'il faut forcer le calcul d'une itération mécanique après une augmentation. | ||
- | Après chaque augmentation (modification des lagrangiens augmentés à configuration cinématique fixée), on résout l' | ||
- | |||
- | Il est vrai que les articles de référence en la matière travaillent en général en terme de norme énergétique (ce qui nécessite d' | ||
- | |||
- | Dans le jeux de données Python, on a | ||
< | < | ||
Line 24: | Line 19: | ||
</ | </ | ||
- | Par défaut, ce paramètre est mis à False ! | ||
- | === Mise à jour des lagrangiens augmentés | + | ==== Algorithme du Lagrangien Augmenté dans le contexte de la mise en charge avec vitesse de rotation initiale ==== |
- | J'ai développé une autre approche pour mettre à jour les lagrangiens augmentés sur base de l' | + | ==== Divers ==== |
- | Avec ces derniers gardes fous, l' | ||
- | < | ||
- | augLagAugmentation = AugLagExtrapolationAugmentation(alm) | ||
- | augLagAugmentation.setUseStabilityCriterion(True) | ||
- | augLagAugmentation.setUseExtrapolationCriterion(True) | ||
- | augLagAugmentation.setExtrapolationFactor(_factor) | ||
- | augLagAugmentation.setResetPreviousAugmentedLagrangians(True) | ||
- | </ | ||
- | La dernière option permet d' | + | === VectorToScalarOperator === |
- | Par défaut, tous les critères sont activés et le facteur d' | + | === MiscValueExtractor === |
- | Cette procédure est activée si on a le nœud de contact est en contact au cours de deux résolutions successives de l' | ||
- | === Critère d' | + | ==== Boundary Volume Hierarchy ==== |
- | J'ai ajouté une nouvelle méthode de calcul de longueur de contact utilisée lors des critères géométriques normalisés. | ||
- | Dans les estimateurs de pas de temps critique dans les schémas explicites, la notion de dimension équivalente d'un élément apparaît naturellement dans la définition du pas de temps critique. Cependant, ce choix reste vague (distance minimale entre deux nœuds de la maille ou autre) et dès lors, il propose une analyse des valeurs propres à partir de laquelle il dérive une longueur équivalente (plus conservative !). Leur raisonnement est indépendant à priori du type de maille et de la dimension de l' | ||
- | En résumé, on a les méthodes suivantes : | ||
- | * _method | + | === Cas Tests Modifiés === |
- | * _method | + | |
- | * _method | + | |
- | Par exemple, | + | En activant l' |
- | * _method = ALM_AIC_LENGTH : LcN=LcT=b2 | ||
- | * _method = ALM_GEO_LENGTH : LcN=a2 et LcT=b2 | ||
- | * _method = ALM_CRITICAL_LENGTH : LcN=LcT=a√1+b2a2 (= Moitié de la diagonale si on a un carré b=a.) | ||
- | Dans le jeux de données Python, on choisit les options comme ceci : | ||
- | < | + | Nastran test |
- | augLagGeoCriterion = AugLagNormalisedGeoCriterion(alm) | + | |
- | augLagGeoCriterion.setCharacteristicLengthMeth(_method) | + | |
- | </ | + | |
- | + | ||
- | Sur un pas de temps donné, la maille peut subir de grande déformation d'où le fait que l'on recalcule à chaque fois la longueur caractéristique au cours des augmentations. | + | |
- | === Mise à jour du pas de temps === | + | J'ai activé l' |
- | L' | ||
- | * _equivalentIteMethod = ALM_TSCM_FIRST : Nombre d' | + | apps.toolbox.createContactTests.py |
- | * _equivalentIteMethod = ALM_TSCM_MAX : Nombre d' | + | |
- | * _equivalentIteMethod = ALM_TSCM_MEAN : Nombre d' | + | |
- | * _equivalentIteMethod = ALM_TSCM_WEIGHTEDMEAN : Nombre d' | + | |
- | Cette valeur d' | ||
- | Dans le jeux de données Python, on a | + | La fonction defineMim() passe de cinq arguments d' |
- | + | ||
- | < | + | |
- | tscm = NbOfAugLagMechNRIterationsTimeStepComputationMethod(metafor) | + | |
- | tscm.setTimeStepDivisionFactor(_timeStepDivisionFactor) | + | |
- | tscm.setEquivalentIteMethod(_equivalentIteMethod) | + | |
- | tscm.setMaxNbOfIteInAdaptOfTimeStep(_maxNbOfIteInAdaptOfTimeStep) | + | |
- | tscm.setNbOptiIte(_nbOptiIte) | + | |
- | tsm.setTimeStepComputationMethod(tscm) | + | |
- | </ | + | |
- | Par exemple, si on a le profil suivant de convergence sur un pas de temps de donné | + | SurfaceSelector() Nouveau selecteur... |
- | ^ ALM ITE NO ^ MECH ITE NUMBER | + | |
- | | 0 | 2 | | + | |
- | | 1 | 3 | | + | |
- | | 2 | 4 | | + | |
- | | 3 | 3 | | + | |
- | | 4 | 3 | | + | |
- | | 5 | 3 | | + | |
- | | 6 | 2 | | + | |
- | | 7 | 2 | | + | |
- | | 8 | 2 | | + | |
- | | 9 | 2 | | + | |
- | | 10 | 2 | | + | |
- | | 11 | 1 | | + | |
- | | 12 | 1 | | + | |
- | on obtient l' | + | |
- | ^ ALMTSCM | + | |
- | | ALM_TSCM_FIRST | + | |
- | | ALM_TSCM_MAX | + | |
- | | ALM_TSCM_MEAN | + | |
- | | ALM_TSCM_WEIGHTEDMEAN | + | |
- | === Benchmark - Cont2 === | ||
- | ==== Informations sur Interaction de Contact ==== | + | === Vector To Scalar Operator |
- | Il est possible de demander d' | + | J'ai ajouté |
- | < | + | |
- | ci = RdContactInteraction(1) | + | |
- | ci.setShowInformation(True) | + | |
- | </ | + | |
- | Voici un exemple de sortie. | + | |
- | < | + | |
- | mechanical iteration 0 : Rmean = 1.000000e+000 | + | |
- | RdContactInteraction #2 | + | |
- | Actual/ | + | |
- | Number of Nodes in Sticking/ | + | |
- | mechanical iteration 1 : Rmean = 2.192696e-001 | + | |
- | RdContactInteraction #2 | + | |
- | Actual/ | + | |
- | Number of Nodes in Sticking/ | + | |
- | mechanical iteration 2 : Rmean = 2.016662e-001 | + | |
- | RdContactInteraction #2 | + | |
- | Actual/ | + | |
- | Number of Nodes in Sticking/ | + | |
- | mechanical iteration 3 : Rmean = 1.084675e-001 | + | |
- | RdContactInteraction #2 | + | |
- | Actual/ | + | |
- | Number of Nodes in Sticking/ | + | |
- | mechanical iteration 4 : Rmean = 2.831632e-002 | + | |
- | RdContactInteraction #2 | + | |
- | Actual/ | + | |
- | Number of Nodes in Sticking/ | + | |
- | mechanical iteration 5 : Rmean = 1.060746e-003 | + | |
- | RdContactInteraction #2 | + | |
- | Actual/ | + | |
- | Number of Nodes in Sticking/ | + | |
- | mechanical iteration 6 : Rmean = 1.744038e-005 | + | |
- | RdContactInteraction #2 | + | |
- | Actual/ | + | |
- | Number of Nodes in Sticking/ | + | |
- | </ | + | |
- | Cela peut permettre de comprendre la raison pour laquelle un pas de temps ne converge pas (Status collant glissant qui change ou status en contact ou hors contact qui change). | + | |
- | + | ||
- | ==== Nombre de conditionnement réciproque ==== | + | |
- | + | ||
- | Il est désormais possible d' | + | |
- | + | ||
- | On peut demander de calculer à chaque résolution du système linéaire, le nombre de conditionnement réciproque. Pour se faire, il suffit de faire : | + | |
- | + | ||
- | < | + | |
- | solvermanager = metafor.getSolverManager() | + | |
- | solver = DSSolver() | + | |
- | solver.setShowRCond(True) | + | |
- | solvermanager.setSolver(solver) | + | |
- | </ | + | |
- | + | ||
- | Également, il est possible de faire un extracteur de cette grandeur (Nombre de conditionnement réciproque de la matrice FreeJacobian du schéma d' | + | |
- | + | ||
- | < | + | |
- | valuesmanager.add(1, | + | |
- | </ | + | |
- | + | ||
- | Dans Matlab, on compare ce nombre de conditionnement réciproque avec l' | + | |
- | + | ||
- | Finalement, cet extracteur peut aider à quantifier l' | + | |
- | + | ||
- | + | ||
- | ==== Nouveaux extracteurs de contact ==== | + | |
- | + | ||
- | Par la même occasion, j'ai ajouté plein de nouveau extracteurs de variables de contact. | + | |
+ | MinOfNonZeroOperator() | ||
+ | MaxOfNonZeroOperator() | ||
+ | AbsMinOfNonZeroOperator() | ||
+ | AbsMaxOfNonZeroOperator() | ||
+ | MinAbsOfNonZeroOperator() | ||
+ | MaxAbsOfNonZeroOperator() | ||
Line 199: | Line 77: | ||
< | < | ||
[r]: | [r]: | ||
- | [a]: | + | [a]: |
</ | </ | ||
- | --- // | + | --- // |
commit/futur/gaetan.1461420983.txt.gz · Last modified: 2016/04/23 16:16 by wautelet