TestSuiteChecker

L'objet TestSuiteChecker de Metafor est un objet de validation de la batterie de tests. En écrivant en fin de calcul, un certain nombre de grandeurs caractéristiques du déroulement du calcul. Par défaut, les valeurs suivantes sont extraites :

[TSC_STP] Nombre de pas de temps
[TSC-ITE] Nombre d'itérations (Mécaniques, Thermiques selon le calcul)
[TSC-INW] Energie interne (variation d'énergie potentielle)
[TSC-EXW] Travail des forces externes
[TSC-CPU] Temps CPU
[TSC-MEM] Memoire Maximum durant le calcul
[TSC-EXT] Valeur spécifiques extraite du test

Les sorties [TSC_EXT] sont des valeurs spécifiques extraites du problème (mesures caractéristiques du problème). La personalisation du TestSuiteChecker au problème se fait à l'aide des fonctions suivantes :

testSuite = metafor.getTestSuiteChecker() Récupération de la référence vers le TestSuiteChecker
testSuite.checkExtractor(noExtr) Test de la valeur finale de l'extracteur (la courbe) numéro noExtr
testSuite.checkExtractor(noExtr, noComp) Test de la composante noComp (commençant à 0) de l'extracteur (la courbe) numéro noExtr
testSuite.checkExtractorV2sOp(noExtr,VectorToScalarOperator()) Test de la valeur scalaire obtenue après application de l'opérateur ''VectorToScalarOperator'' sur l'extracteur (la courbe) numéro noExtr
testSuite.checkObjectiveFunction(noObj) Test de la valeur de la fonction objective numéro noObj

Classe PythonTestCheck

Il est possible de faire appel à des fonctions matlab de post-traitement à la fin de l'exécution d'un cas test. Cela permet notamment de tester ces fonctions Matlab dans la batterie de Metafor. Pour pouvoir afficher les résultats obtenus avec le post-traitment matlab à côté des autres grandeurs [TSC-EXT] (à la fin du fichier res de Metafor), il faut créer un objet Python dans le cas test (en dehors des fonctions getMetafor() et buildDomain()) qui dérivera de PythonTestCheck . Cet objet python ira relire le fichier matlab.log généré par Matlab.

Exemple :

class ReadMatlabLog(PythonTestCheck):
    def __init__(self):
        PythonTestCheck.__init__(self)
    def __del__(self):
        print "ReadMatlabLog : __del__"
        print "callToDestructor of ReadMatlabLog not allowed. Add ReadMatlabLog.__disown__()"
        raw_input('')
        exit(1)
    def eval(self):
        inirep = os.getcwd()
        moutfile = os.path.abspath(os.path.join("matlab.log"))
        
        fm = open(moutfile,'r')
        lines = fm.readlines()
        for i in lines:
            if ('[TSC-EXT]' in i):
                print i
        fm.close()

Pour faire appel à ReadMatlabLog a la fin de l'exécution du calcul Metafor, il faut rajouter les commandes ci-dessous dans le jeu de données

  testSuite = metafor.getTestSuiteChecker()
  testSuite.checkPythonTestCheck(ReadMatlabLog())
  

On trouvera plus d'infos à ce sujet dans le jeu de données oo_meta.aspCrushing.tests.twoD.ecrasementProfilBetrandie