yslopeusers team mailing list archive
-
yslopeusers team
-
Mailing list archive
-
Message #00003
ymport.py
Salut Luc,
Juste quelques nouvelles à propos d'une chose dont on avait parlé à
Paris : cette division en deux fichiers des infos sur l'échantillon de
sphères, une fois les sphères "onJoint" déterminées.
J'ai donc modifié ymport.py et export.py (les versions
correspondantes sont sur Launchpad). En fait ça peut marcher.
Maintenant, il suffit juste que IdentificationSpheresOnJoint.py génere
un seul fichier avec export.textExt, dans lequel il y aurait la liste
des spheres, avec leurs positions, leurs rayons, et surtout tout ce qui
concerne le smooth joint model : "joint", "onJoint", "jointNormal...".
Après si tu veux l'utiliser, plus qu'une seule étape est nécessaire :
celle d'importer ce fichier.
Parmi les bémols :
- dans export.textExt, tout ce qui concerne les propriétés méca n'est
pas exporté. Et dans ymport.textExt, tu ne peux pas passer d'instances
de JCFpmMat en paramètre => ce sont en général les valeurs par défaut de
density, young, frictionAngle... qui sont utilisées.
Hormis density, ce n'est pas problématique de les changer à la main
(avec une boucle sur les bodies), une fois l'importation réalisée.
Pour density, comme la masse des bodies est calculée dès
"O.bodies.append(ymport...)", en fonction d'une certaine density, j'ai
décidé finalement d'écrire que density = 2400 dans ymport.textExt. Si on
veut utiliser une autre valeur, il vaut donc mieux modifier directement
là dedans (puis faire un - rapide - scons).
- j ai voulu comparer cette nouvelle méthode avec ce que tu faisais
avant. Sur l'exemple blocTest.py que tu m'avais filé. J'ai fait la
détection des contacts, l'exportation, puis l'importation... dans les
deux cas de figure jusqu'à arriver à deux .xml que j'ai alors comparés
(avec "kompare"). Et en fait il y a malheureusement quelques
différences... Pour à la louche 50 sphères, j'ai un onJoint = 1 avec ma
méthode, et = 0 avec la tienne. Sur 1267 sphères avec onJoint = 1, ça ne
fait que 4% d'erreur mais c'est un peu inconfortable
intellectuellement... Mais bon je t'avoue que je vais peut être en
rester là. Pour te faire une petite idée, cf l'image jointe. C'est donc
mon bloc qui a été séparé en deux, les billes onJoint == 0 sont
coloriées en bleu, et celles onJoint ==1 en rouge. En vert, tu as deux
exemples de billes qui sont onJoint ==1 avec ma nouvelle méthode, et qui
ne le seraient pas avec ce que tu fais...
- à noter quand même que, pour réaliser la même procédure que toi, je
n'ai pas pu utiliser directement blocTest.py que tu m'avais envoyé par
mail. Il y avait l.51 un onJ = _*bool*_(line.split()[1]) qui était
toujours nul, alors qu'en changeant par onJ = _*int*_(line.split()[1])
je retrouvais bien soit des "1" soit des "0"...
Voilà pour les dernières nouvelles. Bon retour dans l'hémisphère sud !
Jérôme
--
Jérôme Duriez
ATER Polytech' Grenoble - Laboratoire 3S-R
04.56.52.86.49 (ne pas laisser de messages sur le répondeur)
Attachment:
Bloc.png
Description: PNG image