Pour Newac, on a besoin de calculer des fréquences propres d'une aube en rotation qui frotte sur un carter. Or, qui dit fréquence propre, dit fft. Comme Matlab fait très bien les fft, je me suis dit avec Romain et Luc que ce serait mieux que ce soit lui (Matlab) et pas moi qui le fasse. J'ai donc, à partir d'un truc de Romain pour ses cas-tests Arcelouille, écrit une petite procédure Python qui appelle Matlab et qui exécute un script Matlab. Dans mon cas, ledit script calcule les fréquences propres.
J'ai fait de la sortie Matlab une fonction objectif, comme ça, on a un extracteur qui vérifie qui l'exécution de Matlab s'est bien déroulée. Petit inconvénient, ça ne marche pas sous les stations vu que Matlab n'est pas installé dessus. Apparemment, ça ne pose pas de problème au niveau de la batterie.
Le problème était le suivant: quand on appelait la fonction createCube
ou createRectangle
, on avait droit à une volée d'arguments (17!) dont on n'avait en général pas grand chose à faire. De plus, quand on voulait ajouter un paramètre, on devait éventuellement modifier tous les cas-tests qui utilisent createCube
pour ajouter ledit paramètre après tous les autres. Bref, c'était fastidieux! Sans compter toutes les fonctions annexes du style createRectangleSameId
, createRectangleAtO
ou encore createRectangleSameIdAtO
qui avaient été écrites justement pour éviter de devoir passer 300 arguments à la fonction.
Tout ça pour essayer d'en venir au fait que Romain a commencé à réécrire createCube
sous forme de classe (GenCube
) pour que ce soit beaucoup plus lisible. J'ai fait de même pour createRectangle
(GenSquare
).
Avant, on écrivait:
from toolbox.meshedGeometry3D import createCube createCube(domain, p['nx'], p['ny'], p['nz'], p['Lx'], p['Ly'], p['Lz'], 0, 0, 0, 0, 0, 0, 0, 0, 0, op)
Bonjour la lisibilité! Si on veut ajouter l'option de mailler en tétra ou au second degré, on doit ajouter encore deux paramètres à la fin de la fonction! Ca devient complètement illisible!
Maintenant, on écrit:
from toolbox.genCube import CubeGenerator cube = CubeGenerator(geometry) cube.setNbElms(p['nx'], p['ny'], p['nz']) cube.setLength(p['Lx'], p['Ly'], p['Lz']) cube.setOperatorList(op) cube.execute()
C'est beaucoup plus clair et plus lisible. Si on veut mettre des tétras, on écrit maintenant simplement:
cube.setTetra(True)
Facile sans tout polluer! Et si on veut ajouter une nouvelle fonctionnalité, il n'y a qu'à écrire une nouvelle fonction dans la classe avec une valeur par défaut et on ne doit pas modifier tous les cas-tests et le code python reste très lisible.
J'ai refait quelques cas-tests selon ce nouveau modèle pour encourager les gens à écrirre leur futurs cas-tests de la même façon bien propre.
elbowGeo
) avec la géométrie qu'il a vraiment utilisée dans sa thèse. Je l'ai converti et je l'ai ajouté dans la batterie. A noter que le calcul s'arrête après 2600s, alors que Laurent le faisait aller jusque 3500s. Si ça amuse quelqu'un de déboguer le super plastic forming, libre à lui. Moi, je l'ai de toute façon bridé à 200s. A toolbox/genSquare.py A toolbox/genCube.py
A sonaca/tools A techspace/tests/impameta A techspace/tests/impametaMesh A techspace/tests/impameta/bucklingBlade.dat A techspace/tests/impameta/bucklingBladeFriction.dat A techspace/tests/impametaMesh/mesh1EasFix1.dat A techspace/tests/impametaMesh/mesh1EasFix2.dat A techspace/tests/impametaMesh/mesh1SriFix2.dat A techspace/tests/impametaMesh/mesh2EasFix1.dat A techspace/tests/impametaMesh/mesh2EasFix2.dat A techspace/tests/impametaMesh/mesh2SriFix2.dat A techspace/tests/impametaMesh/mesh3EasFix1.dat A techspace/tests/impametaMesh/mesh3EasFix2.dat A techspace/tests/impametaMesh/mesh3SriFix2.dat A techspace/tests/impametaMesh/mesh4EasFix1.dat A techspace/tests/impametaMesh/mesh4EasFix2.dat A techspace/tests/impametaMesh/mesh4SriFix2.dat A techspace/tests/impametaMesh/mesh5EasFix1.dat A techspace/tests/impametaMesh/mesh5EasFix2.dat A techspace/tests/impametaMesh/mesh5SriFix2.dat A techspace/tests/impametaMesh/mesh6EasFix2.dat A techspace/tests/impametaMesh/mesh6SriFix2.dat A newac/tools/eigenFrequenciesComputation.m A newac/tools/getDiscretizedValues.m A newac/tools/getEigenValues.m A newac/tools/postMatlabSulzer.py A sonaca/tests/spf/elbowModif12.py A sonaca/tools/__init__.py A sonaca/tools/elbowGeo.py A techspace/tests/impameta/__init__.py A techspace/tests/impameta/bucklingBlade.py A techspace/tests/impameta/bucklingBladeFriction.py A techspace/tests/impametaMesh/__init__.py A techspace/tests/impametaMesh/mesh1EasFix1.py A techspace/tests/impametaMesh/mesh1EasFix2.py A techspace/tests/impametaMesh/mesh1SriFix2.py A techspace/tests/impametaMesh/mesh2EasFix1.py A techspace/tests/impametaMesh/mesh2EasFix2.py A techspace/tests/impametaMesh/mesh2SriFix2.py A techspace/tests/impametaMesh/mesh3EasFix1.py A techspace/tests/impametaMesh/mesh3EasFix2.py A techspace/tests/impametaMesh/mesh3SriFix2.py A techspace/tests/impametaMesh/mesh4EasFix1.py A techspace/tests/impametaMesh/mesh4EasFix2.py A techspace/tests/impametaMesh/mesh4SriFix2.py A techspace/tests/impametaMesh/mesh5EasFix1.py A techspace/tests/impametaMesh/mesh5EasFix2.py A techspace/tests/impametaMesh/mesh5SriFix2.py A techspace/tests/impametaMesh/mesh6EasFix2.py A techspace/tests/impametaMesh/mesh6SriFix2.py A techspace/tools/impametaBladeTools.py R techspace/tests/aubeImpameta.dat R techspace/tests/aubeImpametaFrot.dat R techspace/tests/aubeImpameta.py R techspace/tests/aubeImpametaFrot.py R techspace/tools/aubeImpametaTools.py
— Pierre-Paul Jeunechamps 2009/05/19 22:19