IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Simulation Discussion :

VUMAT et la double précision


Sujet :

Simulation

  1. #1
    Membre régulier Avatar de rogue-spectre
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 104
    Points : 122
    Points
    122
    Par défaut VUMAT et la double précision
    Bonsoir à tous,

    Je travaille actuellement sur une routine VUMAT pour Abaqus… pour l'instant j'ai la version 6.8 au boulot. Ma petite sous routine est acceptée parfaitement en simple précision… mais lorsque je veux utiliser la double précision, que je force dans mon fichier fortran ET au niveau du job dans Abaqus cae, celui ci ne veux tout simplement pas lancer de calcul. Demain je vais essayer de faire quelque chose avec les indications données ici : http://polymerfem.com/showthread.php...shared-library. En attendant si vous avez d'autres idées ou si vous voulez me réconforter disant que tout va aller pour le mieux avec une version plus récente d'Abaqus, je suis preneur.

    Bonne soirée
    Libérez vos documents http://fr.libreoffice.org/ et vos doigts en tapant en BÉPO http://bepo.fr/wiki/Accueil:, rangez les cartes perforées dans une armoire et GOTO work

  2. #2
    Membre régulier Avatar de rogue-spectre
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 104
    Points : 122
    Points
    122
    Par défaut
    petit mémo pour moi même et pour ceux qui ne veulent pas aller voir la réponse en anglais http://polymerfem.com/showthread.php...shared-library.

    L'astuce citée ici est valable pour la version 6.7 (cf le lien) et 6.8 testé.
    pour la 6.10 le problème n'a plus besoin d'être contourné.

    Vous voulez coder une routine VUMAT pour définir un nouveau modèle de comportement de matériau. Comme vous voulez avoir un minimum de contrôle sur vos variables vous n'utilisez pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    include 'vaba_param.inc'
    comme suggéré par la documentation d'Abaqus car ce fichier implicite tous les types de vos variables. Vous utilisez votre sous-routine sans problème pour lancer des calculs en simple précision mais lorsque vous voulez passer en double Abaqus vous sort un message d'erreur et refuse d'effectuer le calcul. Le problème vient du fait que le "packager.exe" travaille en simple précision. Afin de contourner ce problème il nous faut créer deux librairies partagées, une pour la simple précision et une pour la double.

    - 1 Localisation du fichier de configuration "abaqus_v6.env"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        locate abaqus_v6.env
    - 2 Modification temporaire du fichier. Repérer la ligne définissant la commande "link_sl" et y préfixer la commande ' "echo " + '(il y a un espace après le echo) ce qui donne par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       link_sl = ( "echo " + fortCmd +"lerestedescommandes" )
    - 3 Récupération du code permettant de générer votre librairie. Dans le dossier de votre VUMAT tapez en ligne de commande :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        abaqus make library=votre_vumat.f
    et copier la commande résultante. Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    gfortran -gcc-version=330 -fPIC -shared -Wl,-u,vcosimulation_ -Wl,-u,vcosimulation0_ -Wl,-u,vdisp_ -Wl,-u,vdload_ -Wl,-u,vfabric_ -Wl,-u,vfric_ -Wl,-u,vuamp_ -Wl,-u,vuanisohyper_inv_ -Wl,-u,vuanisohyper_strain_ -Wl,-u,vuel_ -Wl,-u,vufield_ -Wl,-u,vuhard_ -Wl,-u,vuinter_ -Wl,-u,vumat_ -Wl,-u,vusdfld_ -Wl,-u,vutrs_ -Wl,-soname,libexplicitU.so -o libexplicitU.so votre_vumat.o /usr/local/share/AbaqusBins/6.8-3/exec/lbr/explicitU_static.a -L /usr/local/share/AbaqusBins/6.8-3/exec/lbr -L /usr/local/share/AbaqusBins/6.8-3/External /usr/local/share/AbaqusBins/6.8-3/exec/lbr/libexplicitB.so /usr/local/share/AbaqusBins/6.8-3/exec/lbr/libABQUTI_CoreUtils.so /usr/local/share/AbaqusBins/6.8-3/exec/lbr/libABQUTI_UtiLicensing.so -Wl,-Bdynamic -i-dynamic -lifport -lifcoremt
    - 4 Compiler votre fichier vumat par exemple 2 fois, une pour la simple précision et une pour la double précision

    - 5 Utiliser la commande récupérée pour créer les deux librairies nécessaires. On adaptera évidemment "votre_vumat.o", ainsi que "libexplicitU.so" qui devient libexplicitU-D.so pour la double précision.
    Il semble qu'il est également possible d'adapter
    explicitU_static.a
    et
    libexplicitB.so
    en explicitU-D_static.a et libexplicitB-D.so.


    - 6 Préciser à Abaqus le dossier contenant ces librairies. Dans le fichier "abaqus_v6.env" rajouter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    usub_lib_dir="/chemin/absolu/d/acces/aux/librairies"
    et enlever le '"echo" + ' du step 2.

    - 7 Laisser vide le champ "user subroutine file" de l'onglet "General" du menu "Edit" du "job manager"

    - 8 Choisir la précision du calcul et le lancer… enfin


    J'espère que ceci servira à quelqu'un.
    Libérez vos documents http://fr.libreoffice.org/ et vos doigts en tapant en BÉPO http://bepo.fr/wiki/Accueil:, rangez les cartes perforées dans une armoire et GOTO work

  3. #3
    Membre régulier Avatar de rogue-spectre
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 104
    Points : 122
    Points
    122
    Par défaut
    Une petite précision à rajouter,
    Pour ceux qui ne disposerent pas des droits nécessaires pour modifier le fichier maître abaqus_v6.env… il est possible d'en faire une copie dans le répertoire de travail dans lequel vous lancez votre abaqus en console, et puis même pour ceux qui ont les droit, ça évite de taper son mot de passe…

    Prochain post je mettrai le petit script qui automatise la compilation des librairies…
    Libérez vos documents http://fr.libreoffice.org/ et vos doigts en tapant en BÉPO http://bepo.fr/wiki/Accueil:, rangez les cartes perforées dans une armoire et GOTO work

  4. #4
    Membre régulier Avatar de rogue-spectre
    Homme Profil pro
    Inscrit en
    Juillet 2011
    Messages
    104
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2011
    Messages : 104
    Points : 122
    Points
    122
    Par défaut
    Voici donc mon petit script, à adapter bien évidemment à vos besoins.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    #!/bin/bash
    #
    # This script aims to generate the two shared libraries :
    #   libexplicitU.so libexplicitU-D.so
    #
    #  It is assumed that the the tree directory is like that :
    #  build and lib will automaticaly be created.
    #
    #  Working_directory
    #   |
    #   |- make_libs.sh
    #   |- SRC
    #   |   |-VUMAT-model-f77.f90
    #   |   |-…and other files
    #   |   |_
    #   |
    #   |-build
    #   |   |-thats where the compilation is done
    #   |   |_
    #   |
    #   |-lib
    #   |   |-libexplicitU.so
    #   |   |-libexplicitU-D.so
    #   |   |_
    #   |_
    #
    #
    # which must be provided to Abaqus in order to run 
    # computation with double precision
    
    #========================================================================
    # command allowing to generate the final libraries
    # Arguments
    #    1 name of the object file input : for instance : MyVumat.o 
    #    2 [optional] blank or "-D" in order to set the proper precision
    #
    # This function is to be adapted according to the compilation 
    # command used by abaqus
    #
    compile_libexplicitU ()
    {
    	Voutobj=$1
    	ABQsuf=$2
    	ABQDIRVER="/PATH_DINSTALL/abaqus610/abaqus/6.10-1/"
    
    gfortran -O3 -gcc-version=330 -fPIC -shared -Wl,-u,vcosimulation_ -Wl,-u,vcosimulation0_ -Wl,-u,vdisp_ -Wl,-u,vdload_ -Wl,-u,vfabric_ -Wl,-u,vfric_ -Wl,-u,vfric_coef_ -Wl,-u,vfriction_ -Wl,-u,vuamp_ -Wl,-u,vuanisohyper_inv_ -Wl,-u,vuanisohyper_strain_ -Wl,-u,vuel_ -Wl,-u,vufield_ -Wl,-u,vufluidexch_ -Wl,-u,vufluidexcheffarea_ -Wl,-u,vuhard_ -Wl,-u,vuinter_ -Wl,-u,vuinteraction_ -Wl,-u,vumat_ -Wl,-u,vusdfld_ -Wl,-u,vutrs_ -Wl,-u,vuviscosity_ -Wl,-soname,libexplicitU${ABQsuf}.so -o libexplicitU${ABQsuf}.so  ${Voutobj}  ${ABQDIRVER}exec/lbr/explicitU${ABQsuf}_static.a -L ${ABQDIRVER}exec/lbr -L ${ABQDIRVER}External ${ABQDIRVER}exec/lbr/libexplicitB${ABQsuf}.so ${ABQDIRVER}exec/lbr/libABQSMABasCoreUtils.so ${ABQDIRVER}exec/lbr/libABQSMAAbuLicense.so -Wl,-Bdynamic -i-dynamic -lifport -lifcoremt
    
    #gfortran -O3 $DEBUG_FLAGS_GFORTRAN -gcc-version=330 -fPIC -shared -Wl,-u,vcosimulation_ -Wl,-u,vcosimulation0_ -Wl,-u,vdisp_ -Wl,-u,vdload_ -Wl,-u,vfabric_ -Wl,-u,vfric_ -Wl,-u,vuamp_ -Wl,-u,vuanisohyper_inv_ -Wl,-u,vuanisohyper_strain_ -Wl,-u,vuel_ -Wl,-u,vufield_ -Wl,-u,vuhard_ -Wl,-u,vuinter_ -Wl,-u,vumat_ -Wl,-u,vusdfld_ -Wl,-u,vutrs_ -Wl,-soname,libexplicitU${ABQsuf}.so -o libexplicitU${ABQsuf}.so ${Voutobj} /usr/local/share/AbaqusBins/6.8-3/exec/lbr/explicitU${ABQsuf}_static.a -L /usr/local/share/AbaqusBins/6.8-3/exec/lbr -L /usr/local/share/AbaqusBins/6.8-3/External /usr/local/share/AbaqusBins/6.8-3/exec/lbr/libexplicitB${ABQsuf}.so /usr/local/share/AbaqusBins/6.8-3/exec/lbr/libABQUTI_CoreUtils.so /usr/local/share/AbaqusBins/6.8-3/exec/lbr/libABQUTI_UtiLicensing.so -Wl,-Bdynamic -i-dynamic -lifport -lifcoremt
    }
    
    
    #========================================================================
    # preprocess of source file 
    # and compile vumat.f90 into vumat.o
    compile_vumat_obj ()
    {
    # get parameter 
    	if [ $1 = "double" ] 
    	then
            Dprec="-D_DOUBLE_"
        else		
    		Dprec=""		
    	fi
    
    # preprocess file
    # preprocess may be done with cpp of "ifort -fpp" 
    # but "gfortran -cpp" doen't handle concatenation
    # within macros
    	Vout=VUMAT_model-f90_${Dprec}
    	Voutsrc=${Vout}.f90
    	Voutobj=${Vout}.o
    	gfortran -cpp -E -D_DEBUG_ -D_ABQ_  $Dprec VUMAT-model-f90.f90 > $Voutsrc
    
    # compile obj file
    
    gfortran -fPIC $DEBUG_FLAGS_GFORTRAN -O3 -c $Voutsrc
    #ifort -g -fpe0 -O3 -c $Voutsrc
    }
    
    
    
    #
    # create three
    #
    if  !(test -d build) 
    then
    	mkdir build
    fi
    rm build/*
    
    if  !(test -d lib) 
    then
    	mkdir lib
    fi
    rm -r lib/*
    
    cp SRC/*.f90 build
    cd build
    
    #
    # compile libraries
    #
    DEBUG_FLAGS_GFORTRAN=""
    echo $#, 1
    if (( $# > 0 ));then 
    	
    	if [ $1=="debug" ]
    	then
    		DEBUG_FLAGS_GFORTRAN="-g -fbounds-check -fbacktrace -ffpe-trap=zero,invalid,overflow,underflow,denormal"
    		echo " [ DEBUG ]"
    		echo " Pour debugguer la VUMAT vous pouvez utiliser le debugger gdb"
    		echo "   - Lancez gdb dans un terminal"
    		echo "   - Lancez le calcul"
    		echo "   - reperez le PID du explicit.exe ou explicit_dp.exe en lancant par exemple :"
    		echo "       ps -A | grep explicit"
    		echo "   - Dans gdb lancez :"
    		echo "       attach PID_du_calcul"
    		echo ""
    		echo " Si le programme plante avant d'avoir pu utiliser gdb ajouter un sleep(duree)"
    		echo " dans la VUMAT"
    
    	fi
    fi
    if [ -z "$DEBUG_FLAGS_GFORTRAN" ] 
    then
    	echo " [ RELEASE ]"
    fi
    
    
    echo "- Generation des librairies "
    
    echo "   libexplicitU.so "
    compile_vumat_obj single 
    compile_libexplicitU $Voutobj
    
    echo "   libexplicitU-D .so "
    compile_vumat_obj double 
    compile_libexplicitU $Voutobj -D
    
    mv *.so ../lib/
    
    echo ""
    echo "- Les librairies générées doivent être disponible dans les sous-répertoires"
    echo "    lib/"
    echo ""
    echo " ! Pensez à indiquer à Abaqus l'emplacement des librairies souhaitées "
    echo " en rajoutant la ligne au fichier de configuration : abaqus_v6.env: "
    echo ""
    echo 'usub_lib_dir="/chemin/absolu/d/acces/aux/librairies"'
    echo ""
    
    exit 0
    …prochaine étape utiliser des modules et se débarrasser le plus possible du préprocess. Pour le moment je fais un peu de cuisine pour voir ce qu'Abaqus veux bien manger… des modules oui mais pas pour la routine principale en tout cas Grrr.

    Bon code à tous
    Libérez vos documents http://fr.libreoffice.org/ et vos doigts en tapant en BÉPO http://bepo.fr/wiki/Accueil:, rangez les cartes perforées dans une armoire et GOTO work

  5. #5
    Candidat au Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Mars 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2012
    Messages : 2
    Points : 3
    Points
    3
    Par défaut VUMAT Abaqus
    Bonjour,
    Merci pour ces infos.
    Est ce que cette démarche fonctionne si l'on réalise ses calculs sur un cluster ?
    Pouvez vous expliquer la démarche pour utiliser votre script ?où doit t-on le mettre ?
    Pourquoi il est écrit mon_umat.o alors que le format du fichier que j'utilise pour mes calculs est *.f ?

    Merci
    BM

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 10
    Dernier message: 13/10/2008, 11h20
  2. Programme avec double précision
    Par feynman dans le forum Fortran
    Réponses: 17
    Dernier message: 22/02/2008, 14h06
  3. [Forth] Entrée double précision ?
    Par chemugle dans le forum Autres langages
    Réponses: 1
    Dernier message: 09/01/2007, 00h12
  4. Simple et double Précision en C
    Par r-o-m-z dans le forum C
    Réponses: 4
    Dernier message: 22/10/2006, 13h16
  5. Réponses: 3
    Dernier message: 12/11/2005, 07h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo