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 |
Partager