#!/bin/bash # $Id: makelmdz_fcm 5091 2024-07-20 21:17:09Z 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=$(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 < $config_fcm # ecrad conf if [[ $rad = "ecrad" ]]; then cp bld.cfg.ecrad bld.cfg else cp bld.cfg.rrtm bld.cfg fi # arch.fcm and arch.opt ln -s "arch/arch-$arch.fcm" arch.fcm if [[ -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 } function build_gcm() { 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 } init_vars read_cmdline_options "$@" init_arch cpp_keys_and_include_mod_path handle_dimension different_dynamics create_config_suffix create_fcm_conf build_gcm