Robustification batterie (-fpe) Elimination des blas dans systèmes petite taille Simplification interface FrequencyAnalysis
Suite à la découverte d'une division par 0 dans le matrices de raideur numériques, j'ai rendu possible l'execution de la batterie avec l'option “fpe” (cad sans laisser au processeur la possibilité de gérer les divisions par 0, sqrt(neg), … à travers des “NotANumber” “NaN”):
metafor -fpe metafor_d -fpe python battery.py --fpe python battery.py --debug --fpe
La batterie ne passe pas entièrement en “-fpe” (pas encore tout corrigé), et sous linux, la batterie ne démarre même pas en “-fpe” ⇒ à corriger…
Le lancement de tests instables en debug et avec l'option “-fpe” m'a permis de retrouver bon nombre de bugs :
getThermalTheta()
)LineSearch
de Romain : le test de sortie sur valeurs confondues a été déplacé juste avant calcul de la nouvelle valeur test (on évite ainsi un risque de division par 0.)LineSearch
(à 3 points sans calcul de dérivées)$$ \sigma_{vm}= P_1 \left[ P_2 \sigma_{vm} + P_3 \overline{\varepsilon}^{vp} \right] ^{P_4} $$
MaxIteReachedException();
induisant la division par 3 de la taille du pas de temps …inv
invSquare
invSqrt
squareRoot
squareLog
DSquareLog
DSqrt
DinvSqrt
DinvSquare
HypoMaterial::computeInitialYieldingStress
avait pour but de calculer la limite de plasticité dynamique en début de pas de temps pour calculer l'énergie dissipée. Or depuis que l'on a implémenté le calcul de la limite élastique dynamique (prenant en compte les aspects visco-plastiques), pour les écrouissages isotriopes, cette manière de faire est obsolète. ⇒ à remplacer par getMatFields(GPM0, IF_DYNAMIC_YIELD)
IsoHypoMaterial::computeDissipatedEnergy
), via une seule méthode quel que soit le matériau.
C'est cette fonction computeDissipatedEnergy
qui doit remonter dans chaque matériau et particularisée à chaque modèle matériau…
⇒ il faut identifier les fonctions appelées au niveau global et les interfacer différement …
daxpy
par l'opération + sur le stockdaxpy
par l'opération - sur le stockdaxpy
: A += fact*Bdscal
par l'opérateur * sur le stockdaxpy
pas des operations directes sur les valeursdaxpy
dger
dger
ddot
ddot
ddot
FrequencyAnalysisValueExtractor
et FrequencyAnalysisObjectiveFunction
: freqAna = LanczosFrequencyAnalysisMethod(domain) freqAna.setNumberOfEigenValues(p['nbEigenVal']) freqAna.setSpectralShifting(p['spectralShifting']) freqAna.setComputeEigenVectors(True) freqAna.setComputeErrors(True) freqAna.setVerbose(p['verbose']) freqAna.setSymmetrizeK(False) if p['useDss'] == True : try: freqAna.setSolver(DSSolver()) print "OK : DSSolver found" except NameError: print "DSSolver not found. Use of default skyline instead" pass # Value Extractor freqAnaVE = FrequencyAnalysisValueExtractor(freqAna) vm.add(no, freqAnaVE ,name) # Objective Function freqAnalyFObj = FrequencyAnalysisObjectiveFunction(no, freqAna)
getRow(size_t indexI)
et getColumn(size_t indexJ)
.$Id$
(pas $Id: $
) et svn se charge automatiquement de compléter l'entête…Adding: oo_meta\CMake\win64-vs2012-student.cmake text/plain Adding: oo_meta\mtFrequencyAnalysis\src\FrequencyAnalysisObjectiveFunction.cpp text/plain Adding: oo_meta\mtFrequencyAnalysis\src\FrequencyAnalysisObjectiveFunction.h text/plain Adding: oo_meta\mtFrequencyAnalysis\src\FrequencyAnalysisValueExtractor.cpp text/plain Adding: oo_meta\mtFrequencyAnalysis\src\FrequencyAnalysisValueExtractor.h text/plain Deleting: oo_meta\mtFrequencyAnalysis\src\FrequencyValueExtractor.cpp Deleting: oo_meta\mtFrequencyAnalysis\src\FrequencyValueExtractor.h
Adding: Deleting:
— Luc Papeleux 2016/11/08