#!/bin/bash # $Id: makelmdz_fcm 5089 2024-07-20 15:25:07Z abarral $ # 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 -eu function init_vars() { ######################################################################## # options par defaut pour la commande make ######################################################################## dim="96x72x19" physique=lmd filtre=filtrez grille=reg couple=false veget=false inlandsis=false rad="oldrad" dust=false strataer=false chimie=false parallel=none paramem="mem" compil_mod=prod io=ioipsl cosp=false cosp2=false cospv2=false job=1 full='' libphy=false isotopes=false isoverif=false diagiso=false isotrac=false force_compile=false cplocninca=false arch_defined="FALSE" arch_path="arch" arch_default_path="arch" LMDGCM=$(/bin/pwd) LIBOGCM=$LMDGCM/libo LIBFGCM=$LMDGCM/libf DYN_COMMON_PATH=$LIBFGCM/dyn3d_common # path for optional packages, but default set to ".void_dir" FILTRE_PATH=$LMDGCM/.void_dir DYN_PHYS_PATH=$LMDGCM/.void_dir DYN_PHYS_SUB_PATH=$LMDGCM/.void_dir PHY_COMMON_PATH=$LMDGCM/.void_dir RAD_PATH=$LMDGCM/.void_dir INLANDSIS_PATH=$LMDGCM/.void_dir DUST_PATH=$LMDGCM/.void_dir STRATAER_PATH=$LMDGCM/.void_dir COSP_PATH=$LMDGCM/.void_dir fcm_path=$LMDGCM/tools/fcm/bin ######################################################################## # Quelques initialisations de variables du shell. ######################################################################## CPP_KEY="IN_LMDZ" INCLUDE="" LIB="" COMPIL_FFLAGS="%PROD_FFLAGS" PARA_FFLAGS="" PARA_LD="" EXT_SRC="" } function read_cmdline_options() { ######################################################################## # lecture des options de mymake ######################################################################## while (($# > 0)) do case $1 in "-h") cat < 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}_${rad} if [[ "$parallel" != "none" ]] then SUFF_NAME=${SUFF_NAME}_para DYN=dyn${dimc}d${paramem} if [[ "$paramem" == "mem" ]] then SUFF_NAME=${SUFF_NAME}_${paramem} else echo "The version of the dynamics in dyn3dpar is no longer updated." echo "You should use option \"-mem\"." exit 1 fi else SUFF_NAME=${SUFF_NAME}_seq if (( $dimension == 1 )) then # dynamics-related routines in"dyn1d" subdirectory of phy${physique} DYN=phy${physique}/dyn1d else DYN=dyn${dimc}d fi fi if [[ $veget != "false" ]] then SUFF_NAME=${SUFF_NAME}_orch fi if [[ $dust == "true" ]] then SUFF_NAME=${SUFF_NAME}_spla fi if [[ $couple != "false" ]] then SUFF_NAME=${SUFF_NAME}_couple fi if [[ $chimie == "INCA" ]] then SUFF_NAME=${SUFF_NAME}_inca fi if [[ "$isotopes" == "true" ]] then SUFF_NAME=${SUFF_NAME}_iso fi if [[ "$isoverif" == "true" ]] then SUFF_NAME=${SUFF_NAME}_isoverif fi if [[ "$isotrac" == "true" ]] then SUFF_NAME=${SUFF_NAME}_isotrac fi if [[ "$diagiso" == "true" ]] then SUFF_NAME=${SUFF_NAME}_diagiso fi if [[ $libphy == "true" ]] then # special case where we compile only the physics DYN=$LMDGCM/.void_dir DYN_COMMON_PATH=$LMDGCM/.void_dir FILTRE_PATH=$LMDGCM/.void_dir DYN_PHYS_PATH=$LMDGCM/.void_dir DYN_PHYS_SUB_PATH=$LMDGCM/.void_dir #and there is no main program to generate code="" SUFF_NAME="" else SUFF_NAME=${SUFF_NAME}.e 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 "%DYN_COMMON $DYN_COMMON_PATH" >> $config_fcm echo "%PHY_COMMON $PHY_COMMON_PATH" >> $config_fcm echo "%FILTRE $FILTRE_PATH" >> $config_fcm echo "%PHYS phy${physique}" >> $config_fcm echo "%DYN_PHYS $DYN_PHYS_PATH" >> $config_fcm echo "%DYN_PHYS_SUB $DYN_PHYS_SUB_PATH" >> $config_fcm echo "%RAD $RAD_PATH" >> $config_fcm echo "%DUST $DUST_PATH" >> $config_fcm echo "%STRATAER $STRATAER_PATH" >> $config_fcm echo "%INLANDSIS $INLANDSIS_PATH" >> $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 if [[ "$rad" == "ecrad" ]] then \cp bld.cfg.ecrad bld.cfg else \cp bld.cfg.rrtm bld.cfg fi 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 set +e rm -f $LIBOGCM/${arch}${SUFF_NAME}/.config/fcm.bld.lock ./build_gcm ${fcm_path} -j $job $full build_status=$? rm -rf tmp_src rm -rf config ln -s $LIBOGCM/${arch}${SUFF_NAME}/.config config ln -s $LIBOGCM/${arch}${SUFF_NAME}/.config/ppsrc tmp_src if [[ -r $LIBFGCM/grid/dimensions.h ]] then # Cleanup: remove dimension.h file \rm -f $LIBFGCM/grid/dimensions.h fi # build netcdf95 library necessary for the makelmdz script if [[ $build_status = 0 ]] then if [[ ! -d tools/netcdf95/include ]] then mkdir tools/netcdf95/include tools/netcdf95/lib cp config/inc/netcdf95.mod config/inc/nf95_*mod tools/netcdf95/include cp config/obj/netcdf95.o config/obj/nf95_*o config/obj/check_start_count_m.o tools/netcdf95/lib cd tools/netcdf95/lib; ar rv libnetcdf95.a *.o; ranlib libnetcdf95.a cd - fi fi exit $build_status