#!/bin/bash # $Id: makelmdz_fcm 1327 2010-03-16 10:23:17Z aclsce $ # This is a script in Bash. # FH : on ne crée plus le fichier arch.mk qui est supposé exister par # FH : ailleurs. # FH : ulterieurement, ce fichier sera pré-existant pour une série # FH : de configurations en versions optimisées et debug qui seront # FH : liés (ln -s) avec arch.mk en fonction de l'architecture. # FH : Pour le moment, cette version est en test et on peut créer les # FH : arch.mk en lançant une première fois makegcm. # ##set -x ######################################################################## # options par defaut pour la commande make ######################################################################## dim="96x72x19" physique=lmd filtre=filtrez grille=reg couple=false veget=false chimie=false parallel=none compil_mod=prod io=ioipsl LIBPREFIX="" fcm_path=none cosp=false LMDGCM=`/bin/pwd` LIBOGCM=$LMDGCM/libo LIBFGCM=$LMDGCM/libf COSP_PATH=$LMDGCM/.void_dir ######################################################################## # Quelques initialisations de variables du shell. ######################################################################## CPP_KEY="" INCLUDE="" LIB="" adjnt="" COMPIL_FFLAGS="%PROD_FFLAGS" PARA_FFLAGS="" PARA_LD="" EXT_SRC="" ######################################################################## # lecture des options de mymake ######################################################################## while (($# > 0)) do case $1 in "-h") cat < .void_file rm -rf .void_dir mkdir .void_dir rm -f arch.path ln -s arch/arch-${arch}.path ./arch.path source arch.path ######################################################################## # Definition des clefs CPP, des chemins des includes et modules # et des libraries ######################################################################## if [[ "$compil_mod" == "prod" ]] then COMPIL_FFLAGS="%PROD_FFLAGS" elif [[ "$compil_mod" == "dev" ]] then COMPIL_FFLAGS="%DEV_FFLAGS" elif [[ "$compil_mod" == "debug" ]] then COMPIL_FFLAGS="%DEBUG_FFLAGS" fi if [[ "$physique" != "nophys" ]] then #Default planet type is Earth CPP_KEY="$CPP_KEY CPP_EARTH" fi if [[ "$chimie" == "INCA" ]] then CPP_KEY="$CPP_KEY INCA" INCLUDE="$INCLUDE -I${INCA_INCDIR}" LIB="$LIB -L${INCA_LIBDIR} -lchimie" fi if [[ "$couple" != "false" ]] then CPP_KEY="$CPP_KEY CPP_COUPLE" INCLUDE="$INCLUDE -I${OASIS_INCDIR}" LIB="$LIB -L${OASIS_LIBDIR} -lpsmile.${couple} -lmpp_io" fi if [[ "$parallel" == "mpi" ]] then CPP_KEY="$CPP_KEY CPP_PARA CPP_MPI" PARA_FFLAGS="%MPI_FFLAGS" PARA_LD="%MPI_LD" elif [[ "$parallel" == "omp" ]] then CPP_KEY="$CPP_KEY CPP_PARA CPP_OMP" PARA_FFLAGS="%OMP_FFLAGS" PARA_LD="%OMP_LD" elif [[ "$parallel" == "mpi_omp" ]] then CPP_KEY="$CPP_KEY CPP_PARA CPP_MPI CPP_OMP" PARA_FFLAGS="%MPI_FFLAGS %OMP_FFLAGS" PARA_LD="%MPI_LD %OMP_LD" fi if [[ ( "$parallel" == "omp" || "$parallel" == "mpi_omp" ) \ && "$compil_mod" == "debug" ]] then echo "Usually, parallelization with OpenMP requires some optimization." echo "We suggest switching to \"-dev\"." fi if [[ "$veget" == "true" ]] then CPP_KEY="$CPP_KEY CPP_VEGET" INCLUDE="${INCLUDE} -I${ORCH_INCDIR}" LIB="${LIB} -L${ORCH_LIBDIR} -l${LIBPREFIX}sechiba -l${LIBPREFIX}parameters -l${LIBPREFIX}stomate -l${LIBPREFIX}parallel -l${LIBPREFIX}orglob" fi if [[ $io == ioipsl ]] then CPP_KEY="$CPP_KEY CPP_IOIPSL" INCLUDE="$INCLUDE -I${IOIPSL_INCDIR}" LIB="$LIB -L${IOIPSL_LIBDIR} -l${LIBPREFIX}ioipsl" fi if [[ "$cosp" == "true" ]] then CPP_KEY="$CPP_KEY CPP_COSP" COSP_PATH="$LIBFGCM/cosp" # LIB="${LIB} -l${LIBPREFIX}cosp" fi INCLUDE="$INCLUDE -I${NETCDF_INCDIR}" LIB="$LIB -L${NETCDF_LIBDIR} -lnetcdf" ######################################################################## # calcul du nombre de dimensions ######################################################################## dim_full=$dim dim=`echo $dim | sed -e 's/[^0-9]/ /g'` set $dim dimc=$# echo calcul de la dimension echo dim $dim echo dimc $dimc ######################################################################## # Gestion des dimensions du modele. # on cree ou remplace le fichier des dimensions ######################################################################## cd $LIBFGCM/grid/dimension ./makdim $dim cat $LIBFGCM/grid/dimensions.h cd $LMDGCM ######################################################################## # Differentes dynamiques (3d, 2d, 1d) ######################################################################## dimension=`echo $dim | wc -w` echo dimension $dimension if (( $dimension == 3 )) then cd $LIBFGCM/grid \rm fxyprim.h cp -p fxy_${grille}.h fxyprim.h else echo "Probleme dans les dimensions de la dynamique !!" echo "Non reactive pour l'instant !!!" fi ###################################################################### # Traitement special pour le nouveau rayonnement de Laurent Li. # ---> YM desactive pour le traitemement en parallele ###################################################################### #if [[ -f $libf/phy$physique/raddim.h ]] #then # if [[ -f $libf/phy$physique/raddim.$dimh.h ]] #then # \rm -f $libf/phy$physique/raddim.h # cp -p $libf/phy$physique/raddim.$dimh.h $libf/phy$physique/raddim.h # echo $libf/phy$physique/raddim.$dimh.h # cat $libf/phy$physique/raddim.h # else # echo On peut diminuer la taille de l executable en creant # echo le fichier $libf/phy$physique/raddim.$dimh.h # \cp -p $libf/phy$physique/raddim.defaut.h $libf/phy$physique/raddim.h # fi #fi ###################################################################### # Gestion du filtre qui n'existe qu'en 3d. ###################################################################### if (( `expr $dimc \> 2` == 1 )) then filtre="FILTRE=$filtre" else filtre="FILTRE= L_FILTRE= " fi echo MACRO FILTRE $filtre echo $dimc ###################################################################### # Creation du suffixe de la configuration ###################################################################### SUFF_NAME=_${dim_full} SUFF_NAME=${SUFF_NAME}_phy${physique} if [[ "$parallel" != "none" ]] then SUFF_NAME=${SUFF_NAME}_para DYN=dyn${dimc}dpar else SUFF_NAME=${SUFF_NAME}_seq DYN=dyn${dimc}d fi if [[ $veget == "true" ]] then SUFF_NAME=${SUFF_NAME}_orch fi if [[ $couple != "false" ]] then SUFF_NAME=${SUFF_NAME}_couple fi if [[ $chimie == "INCA" ]] then SUFF_NAME=${SUFF_NAME}_inca fi cd $LMDGCM config_fcm="config.fcm" rm -f $config_fcm touch $config_fcm rm -f bin/${code}${SUFF_NAME}.e rm -f arch.fcm rm -f arch.opt echo "%ARCH $arch" >> $config_fcm echo "%INCDIR $INCLUDE" >> $config_fcm echo "%LIB $LIB" >> $config_fcm echo "%ROOT_PATH $PWD" >> $config_fcm echo "%LIBF $LIBFGCM" >> $config_fcm echo "%LIBO $LIBOGCM" >> $config_fcm echo "%DYN $DYN" >> $config_fcm echo "%PHYS phy${physique}" >> $config_fcm echo "%COSP $COSP_PATH" >> $config_fcm echo "%CPP_KEY $CPP_KEY" >> $config_fcm echo "%EXEC $code" >> $config_fcm echo "%SUFF_NAME $SUFF_NAME" >> $config_fcm echo "%COMPIL_FFLAGS $COMPIL_FFLAGS" >> $config_fcm echo "%PARA_FFLAGS $PARA_FFLAGS" >> $config_fcm echo "%PARA_LD $PARA_LD" >> $config_fcm echo "%EXT_SRC $EXT_SRC" >> $config_fcm ln -s arch/arch-${arch}.fcm arch.fcm if test -f arch/arch-${arch}.opt && [ $compil_mod = "prod" ] then ln -s arch/arch-${arch}.opt arch.opt else ln -s .void_file arch.opt fi rm -f $LIBOGCM/${arch}${SUFF_NAME}/.config/fcm.bld.lock ./build_gcm rm -rf tmp_src rm -rf config ln -s $LIBOGCM/${arch}${SUFF_NAME}/.config config ln -s $LIBOGCM/${arch}${SUFF_NAME}/.config/tmp tmp_src