← Back to team overview

yslopeusers team mailing list archive

Re: ymport.py

 

Salut,

Je n'ai pas pu imaginer de quels fichiers texte tu parlais exactement. Je t'ai déposé sur http://3sr-perso.hmg.inpg.fr/jduriez/ un dossier avec différentes choses :
- les deux xml dont je t'ai parlé, et d'autres choses...
Et il y a en fait normalement tout pour que tu puisses regénérer ces deux fichiers :

- TestPrNewExport qui si tu l'exécutes tel quel (avec des versions de export/ymport tels que > r8 de Launchpad) devrait te donner le même fichier que bloc30DegTest_JCFpm.spheres qui est dans le dossier - Puis, en utilisant TestPrNewExportSuite.py, tu devrais donc arriver directement à ce BlocAvecNewImport.xml

De l'autre côté, si tu modifies les dernières lignes de TestPrNewExport.py, pour générer deux fichiers de sortie - en utilisant les export/ymport < r7 de Launchpad (les mêmes que sur ton pc normalement...) -, puis que tu exécutes blocTest.py (que tu m'avais filé), tu devrais tomber sur BlocAvecOldImport.xml

Et à ce moment là - normalement... - constater les mêmes différences que moi...

Voilà... J'espère avoir répondu à ta question...

Jérôme


Le 02/12/2010 09:35, luc scholtes a écrit :
euh... aurais tu les fichiers textes obtenus avec les deux methodes stp. Cela me permettrait de voir si le pb vient de la fonction d'import ou si cela vient de la fonction d'export.

merci

  Luc

Le 2 décembre 2010 18:32, luc scholtes <lscholtes63@xxxxxxxxx <mailto:lscholtes63@xxxxxxxxx>> a écrit :

    Ok, merci pour tes eclaircissements.

    Effectivement, executer la simu a la suite de l'identification est
    une solution qui evite les erreurs de lecture/ouverture de
    fichiers. J'ai vu que la definition de onJ ne marchait pas...
    C'est le fait que les normales correspondantes etaient differentes
    qui me sauvait jusqu'a present... hum... Par contre, je ne
    comprends tjrs pas la difference de 4%... D'apres ce que j'ai pu
    tester, la methode de detection ne donne pas de resultats
    aleatoires... La, il y a un truc a creuser... Si je comprends
    bien, c'est comme si certaines spheres etaient "zappees" dans mon
    import...Ca m'inquiete un peu...

    Concernant ton idee de regrouper les etapes dans le meme script,
    cela me parait plutot bon, mais par contre, si cette methode
    semble judicieuse pour le cas ou il y a tres peu de spheres et
    tres peu de joints, je me demande ce que cela donnera avec bcp de
    spheres et bcp de joints. En effet, le temps de detection peut
    etre long et dans ce cas la, mieux vaudra distinguer les deux
    etapes, d'autant plus si l'on veut faire une etude parametrique
    avec la meme configuration (refaire la meme identification pour
    lancer un calcul dans lequel change seulement une propriete
    mecanique comme l'angle de frottement du joint par exemple ne
    parait pas tres pratique)... Bref, pas vraiment de reponse a te
    donner ici... Mais j'adhere assez a l'idee de n'avoir qu'un
    fichier regroupant toutes les infos.

    J'essaie de m'y plonger un peu plus pour trouver d'ou vient ce 4%...

      ++

    Le 1 décembre 2010 23:04, Jerome Duriez <duriez@xxxxxxxxxxxxxxx
    <mailto:duriez@xxxxxxxxxxxxxxx>> a écrit :

        Bon alors finalement tout ceci ne sera peut être plus d'actualité.

           Je viens de me rendre compte qu'on pouvait apparemment
        faire très bien sans export/ymport. Je viens de mettre sur
        Launchpad, une version du script IdentificationSpheresOnJoint
        ne contenant uniquement que les opérations de détection. Tu
        peux l'appeler depuis n'importe quel autre script par :
        execfile('IdentificationSpheresOnJoint.py')
           Je me suis donc rendu compte que je pouvais très bien dans
        un même script définir mes sphères (la géométrie du massif),
        leur affecter les propriétés mécaniques que je veux (avec un
        JCFpmMat adéquat), et exécuter ensuite le script, puis
        commencer réellement la simulation.

           Je viens de retrouver que tu m'avais dit que tu voulais
        séparer l'étape de détection des simulations. Ici on va dire
        qu'elles le sont à moitié puisque les instructions sont
        écrites dans deux scripts différents, mais que ceux ci sont
        exécutés directement à la suite l'un de l'autre. Qu'en penses
        tu ? (plus d'histoire d'ymport/export, dans ce cas...)

        Jérôme

        Le 01/12/2010 11:32, Jerome Duriez a écrit :

            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
            <http://bazaar.launchpad.net/%7Eyslopeusers/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
            <https://launchpad.net/%7Eyslopeusers>
            Post to     : yslopeusers@xxxxxxxxxxxxxxxxxxx
            <mailto:yslopeusers@xxxxxxxxxxxxxxxxxxx>
            Unsubscribe : https://launchpad.net/~yslopeusers
            <https://launchpad.net/%7Eyslopeusers>
            More help   : https://help.launchpad.net/ListHelp


-- Jérôme Duriez
        ATER Polytech' Grenoble - Laboratoire 3S-R
        04.56.52.86.49 (ne pas laisser de messages sur le répondeur)


        _______________________________________________
        Mailing list: https://launchpad.net/~yslopeusers
        <https://launchpad.net/%7Eyslopeusers>
        Post to     : yslopeusers@xxxxxxxxxxxxxxxxxxx
        <mailto:yslopeusers@xxxxxxxxxxxxxxxxxxx>
        Unsubscribe : https://launchpad.net/~yslopeusers
        <https://launchpad.net/%7Eyslopeusers>
        More help   : https://help.launchpad.net/ListHelp




--
Jérôme Duriez
ATER Polytech' Grenoble - Laboratoire 3S-R
04.56.52.86.49 (ne pas laisser de messages sur le répondeur)




References