← Back to team overview

yslopeusers team mailing list archive

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