Salut Luc,
Je vais essayer d'être un peu plus clair.
- Sur export / ymport. Je me suis dit (on en avait parlé un peu à
Paris) que c'était dommage d'avoir à utiliser deux fichier : un
Bloc.spheres, et un Bloc_JCFpm.spheres. J'ai donc essayé de faire en
sorte de n'avoir à en utiliser qu'un.
Premièrement j'ai donc modifié la fonction export, exactement
comme tu le dis toi même :
en modifiant legerement la fonction export, on peut arriver a creer
un fichier texte avec toutes les infos necessaires
(x,y,z,r,onJ,nj,j11,etc...).
Deuxièmement, il fallait modifier la fonction ymport. Ce que j'ai
fait (cf code sur launchpad :
http://bazaar.launchpad.net/~yslopeusers/yslope/trunk/annotate/head%3A/py/ymport.py#L44).
Avec cette nouvelle fonction ymport.textExt, en une importation (via
ymport.textExt, on n'utilise plus ymport.text), on a les positions des
billes, leurs rayons, et toutes les variables onJ,nj,j11..... Car en
fait, tu pourras remarquer que l'instance matériau est définie
directement dans cette ymport.textExt.
Le problème est que dans le matériau, il n'y a pas que onJ,nj,
j11... mais aussi "density", "young".... Et que, tel que c'est écrit
actuellement dans ymport.textExt, ce sont les valeurs par défaut de
ces autres paramètres qui sont utilisées lors de la création des
sphères. Hormis "density", c'est assez facile de changer à la main ces
valeurs, une fois que les bodies existent (une fois qu'on a fait
l'importation avec ymport.textExt). Pour density c'est un peu plus
pénible, puisque il faudrait changer en plus "mass" et "inertia"
(variables des bodies, découlant de la variable "density" du
matériau). Et que donc j'ai décidé d'écrire dans ymport.textExt, que
density = 2400 (afin que ce soit bien 2400 qui soit utilisé, et pas la
valeur par défaut = 1000). Pour une autre valeur de density, il
faudrait modifier à cet endroit.
En résumé, je te conseillerais de jeter un coup d'oeil au script
ci - joint. Tu ne pourras pas l'exécuter, mais les commentaires
devraient t'aider à voir la démarche (si les nouvelles explications
plus haut sont toujours aussi peu claires). Et donc en particulier,
maintenant j'écris plus (comme toi avant) :
def sphereMat(): return
JCFpmMat(type=1,young=10e9,frictionAngle=radians(30),density=2400)
et
O.bodies.append(ymport.text(O.tags['id']+'.spheres',scale=1.,shift=[0,0,0],material=sphereMat))
- Passons ensuite à cette "comparaison". Une fois que j'ai fait
tout ça, j'ai voulu vérifier que je trouvais bien la même chose que
toi. Effectivement l'identification en elle même n'a rien à voir avec
l'export et "l'ymport"; mais on peut très bien bien identifier, si
après lors des étapes d'export et "d'ymport" il y a des erreurs,
l'échantillon final sera quand même "pas bon"...
J'ai donc pris l'exemple du bloc avec fissure à 30 degrés.
Premièrement, avec l'ancienne méthode (ce que tu faisais), j'ai
identifié, j'ai exporté (dans deux fichiers : .spheres, et
_JCFpm.spheres), puis j'ai utilisé ces deux fichiers comme toi : avec
ymport.text, et la boucle python pour lire (et affecter aux sphères)
onJ, nj, j11.... => Ca donne BlocAvecOldImport.xml.
La remarque sur le booleen onJ, c'est que, en faisant ça
directement avec les scripts que tu m'avais envoyés (où il y avait
marqué onJ = _*bool*_(line.split()[1]) ), je n'ai eu finalement pour
les sphères que des onJ = 0. Alors que dans le fichier _JCFpm.spheres,
il y avait bien des "1" aussi. Et que j'ai donc dû changer onJ =
_*bool*_(line.split()[1]) par onJ = _*int*_(line.split()[1]) dans le
script pour que ça marche.
Deuxièmement, j'ai cherché à utiliser les nouvelles versions
d'export/ymport. A la fin de l'identification (la même), j'exporte
donc un seul fichier, avec export.textExt (version modifiée, cf
launchpad). Puis (cf d'ailleurs TestPrNewExportSuite.py), j'importe
uniquement ce fichier, avec ymport.textExt, la version modifiée
toujours. Reste encore alors à affecter les mêmes prop mécaniques, que
je fais à la main, plutôt qu'en affectant une instance précise de
"Material".
J'obtiens donc un 2d échantillon => BlocAvecNewImport.xml
Je compare donc finalement les 2 échantillons, et c'est là où j'ai
4% d'erreur, sans que je ne puisse trop l'expliquer (à part une
différence dans les 2 méthodes, due à une erreur, est-ce qu'il y
aurait un caractère légèrement aléatoire de l'identification ? je n'ai
pas regardé ça)
Bon je reconnais que tout ça est un peu inutile, puisque tu avais
un truc qui t'allait apparemment. Mais je trouvais cette histoire de
"deux fichiers" pas à mon goût, c'est pour ça que j'ai fait ça.
Maintenant on a plus qu'un fichier, mais c'est vrai que c'est peut
être moins pratique pour définir young, frictionAngle, density...
J'espère dans tous les cas avoir été plus clair !
Jérôme
_______________________________________________
Mailing list: https://launchpad.net/~yslopeusers
Post to : yslopeusers@xxxxxxxxxxxxxxxxxxx
Unsubscribe : https://launchpad.net/~yslopeusers
More help : https://help.launchpad.net/ListHelp