#!/bin/csh # # $Header$ # #set verbose echo ######################################################################## # path a changer contenant les sources et les objets du modele ######################################################################## ###### VERSION LMDZ.4 set LMDGCM=$WORKDIR/LMDZ4_V3_LAURENT set NCDFLIB=/usr/local/SX6/soft/netcdf/lib set NCDFINC=/usr/local/SX6/soft/netcdf/include set IOIPSLDIR=$WORKDIR/IOIPSL_MPP/src set ORCH_LIBDIR=$WORKDIR/LSCE/ORCHIDEE_PARA/libbis #1set IOIPSLDIR=$SCRATCHDIR/MODIPSL_NEW/modipsl/lib setenv localdir "`pwd`" if ( ! $?LMDGCM ) then echo You must initialize the variable LMDGCM in your environnement echo for instance: "setenv LMDGCM /usr/myself/supergcm" in .cshrc exit endif if ( ! $?LIBOGCM ) then set LIBOGCM=$LMDGCM/libo endif if ( ! $?IOIPSLDIR ) then echo You must initialize the variable IOIPSLDIR in your environnement echo for instance: "setenv IOIPSLDIR /usr/myself/ioipsl" in .cshrc exit endif if ( ! $?NCDFLIB ) then echo You must initialize the variable NCDFLIB in your environnement echo for instance: "setenv NCDFLIB /usr/myself/netcdf" in .cshrc exit endif if ( ! $?NCDFINC ) then echo You must initialize the variable NCDFINC in your environnement echo for instance: "setenv NCDFINC /usr/myself/netcdf" in .cshrc exit endif endif set model=$LMDGCM set libf=$model/libf set libo=$LIBOGCM if ( ! -d $libo ) then mkdir $libo endif ######################################################################## # Quelques initialisations de variables du shell. ######################################################################## set dyn= set opt_link="" set adjnt="" set opt_dep="" set optim="" set optimbis="" set optim90="" set oplink="" ######################################################################## # options du compilateur ######################################################################## set machine=SX6 set f77=sxf90.new set f90=sxf90.new set optim90='-C vsafe -gv -P stack -Wf,-pvctl res=whole,-A dbl4,-init stack=nan,-init heap=nan,-ptr byte -EP -ts ${GCM}/tmp_src -R5 -float0 -size_t64 -dw -Wf,"-pvctl loopcnt=999999 fullmsg noassume" -I/SX/usr/include' set optimtru90="$optim90" set optim="$optim90" set cppflags='-DNC_DOUBLE -DBLAS -DSGEMV=DGEMV -DSGEMM=DGEMM' set opt_link='-float0 -size_t64 -Wf,-A dbl4 -lblas' set mod_suffix="mod" set mod_loc_dir="./" set make="sxmake -i RANLIB=ls" set link="$f90 -Wl,-hlib_cyclic" set ar=sxar set optim90="$optim90 -f3" ######################################################################## # options par defaut pour la commande make ######################################################################## set dim="96x72x19" set physique=lmd set phys="PHYS=$physique" set include='-I$(LIBF)/filtrez -I$(LIBF)/grid -I$(LIBF)/bibio -I. ' set ntrac = 4 set filtre=filtrez set grille=reg set couple=false set veget=false set psmile=false set io=ioipsl set inca=false set vampir=false set parallel=false if ($parallel == true) then set cppflags = " $cppflags -DCPP_PARA" set include="$include"' -I$(LIBF)/dyn3d_par' else set include="$include"' -I$(LIBF)/dyn3d' endif if ($inca == true) then set cppflags="$cppflags -DINCA -DINCA_CH4" set opt_link="$opt_link -linca" endif if ($couple == true) then set opt_link="$opt_link -L/scratchdir/p86yann/MODIPSL_NEW/modipsl/prism/SX/lib -lpsmile.MPI2 -lmpp_io" set cppflags="$cppflags -DCPP_COUPLE -DCPP_PSMILE -I/scratchdir/p86yann/MODIPSL_NEW/modipsl/prism/SX/build/lib/psmile.MPI2" endif if ($veget == true) then set opt_link="$opt_link -L $ORCH_LIBDIR -lsxparameters -lsxsechiba -lsxstomate -lsxparallel" set cppflags="$cppflags -DCPP_VEGET" set include="$include"" -I$ORCH_LIBDIR" endif if ($vampir == true) then set cppflags="$cppflags -vt -DUSE_VT" set opt_link="$opt_link -vt" else set cppflags="$cppflags -DNUSE_VT" set opt_link="$opt_link" endif set optim90=" $optim90 -I$libo $cppflags" set optimtru90=" $optimtru90 -I$libo $cppflags" set optim=" $optim -I$libo $cppflags" set opt_link="$opt_link -L$IOIPSLDIR -lsxioipsl -L$NCDFLIB -lnetcdf" ######################################################################## # Les differentes platformes reconnues ######################################################################## set X6NEC=1 ######################################################################## # lecture des options de mymake ######################################################################## top: if ($#argv > 0) then switch ($1:q) case -h: ######################################################################## # Manuel en ligne ######################################################################## more <> tmp end set suf= foreach i ( `sort tmp | uniq ` ) set suf=$suf$i end set dim=`echo $dim | sed -n -e 's/[^0-9]/ /gp'` set dim_=`echo $dim | sed -n -e 's/[^0-9]/_/gp'` set nomlib=`echo ${machine}_${dim_}_t${ntrac}` echo calcul de la dimension set dimc=`echo $dim | wc -w` if ( "$dimc" == "2" ) then set include="$include "'-I$(LIBF)/dyn2d ' set dimh=$dim else set include="$include " set dimh=`echo $dim | awk ' { print $1 "." $2 } '` endif echo $dimc ######################################################################## # path pour les #include ######################################################################## set include="$include -I$NCDFINC -I$IOIPSLDIR" echo $include ######################################################################## # Gestion des dimensions du modele. # on cree ou remplace le fichier des dimensions/nombre de traceur ######################################################################## cd $libf/grid if ( -f dimensions.h ) then echo 'ATTENTION: vous etes sans doute en train de compiler le modele par ailleurs' echo "Attendez que la premiere compilation soit terminee pour relancer la suivante." echo "Si vous etes sur que vous ne compilez pas le modele par ailleurs," echo vous pouvez continuer en repondant oui. echo "Voulez-vous vraiment continuer?" if ( $< == "oui" ) then \rm -f $libf/grid/dimensions.h else exit endif endif cd dimension makdim $ntrac $dim cat $libf/grid/dimensions.h cd $LMDGCM set libo=$libo/$nomlib if ( ! -d $libo ) then mkdir $libo cd $model endif ######################################################################## # Differentes dynamiques (3d, 2d, 1d) ######################################################################## set dimension=`echo $dim | wc -w` echo dimension $dimension if ( $dimension == 1 ) then echo pas de dynamique set dyn="L_DYN= DYN= L_FILTRE= DIRMAIN=phy$physique " endif endif cd $model if ( $dimension == 3 ) then cd libf/grid \rm fxyprim.h cp -p fxy_${grille}.h fxyprim.h endif ###################################################################### # Traitement special pour le nouveau rayonnement de Laurent Li. ###################################################################### 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.$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 endif endif ###################################################################### # Gestion du filtre qui n'existe qu'en 3d. ###################################################################### if ( `expr $dimc \> 2` == 1 ) then set filtre="FILTRE=$filtre" else set filtre="FILTRE= L_FILTRE= " endif echo MACRO FILTRE $filtre echo $dimc ######################################################################## # utilisation des vraies routines de couplage si on est en couple ######################################################################## if ( $couple == 'true' ) then pwd # if ( `diff $libf/phy$physique/oasis.F $libf/phy$physique/oasis.true | wc -w` ) then # \cp $libf/phy$physique/oasis.F $libf/phy$physique/oasis.dummy # \cp $libf/phy$physique/oasis.true $libf/phy$physique/oasis.F # endif if ( -f $libf/phy$physique/oasis.F ) then rm -f $libf/phy$physique/oasis.F endif \cp $libf/phy$physique/oasis.psmile $libf/phy$physique/oasis.F90 else if ( `diff $libf/phy$physique/oasis.F $libf/phy$physique/oasis.dummy | wc -w` ) then \cp $libf/phy$physique/oasis.F $libf/phy$physique/oasis.true \cp $libf/phy$physique/oasis.dummy $libf/phy$physique/oasis.F endif rm -f $libf/phy$physique/oasis.F90 endif ######################################################################## # Avant de lancer le make, on recree le makefile si necessaire ######################################################################## # c'est a dire dans 3 cas: # 1. si la liste des fichiers .F et .h a ete modifiee depuis la # derniere creation du makefile # 2. si le fichier contenant cette liste "liste_des_sources" # n'existe pas. # 3. Si le makefile n'existe pas. ######################################################################## cd $model find libf -name '*.[Fh]' -print >! tmp77 find libf -name '*.[Fh]' -exec egrep -i " *use *ioipsl" {} \; -print >! tmp90 find libf -name '*.[Fh]90' -print >> tmp90 if ( `diff tmp77 liste_des_sources_f77 | wc -w` \ || `diff tmp90 liste_des_sources_f90 | wc -w` \ || ! -f makefile \ || ! -f liste_des_sources_f90 \ || ! -f liste_des_sources_f77 ) then echo les fichiers suivants ont ete crees ou detruits echo ou les fichiers suivants sont passes ou ne sont plus en Fortran 90 diff liste_des_sources_f77 tmp77 diff liste_des_sources_f90 tmp90 \cp tmp77 liste_des_sources_f77 \cp tmp90 liste_des_sources_f90 echo On recree le makefile ./create_make_gcm >! tmp \mv tmp makefile echo Nouveau makefile cree. endif ######################################################################## # Execution de la comande make ######################################################################## echo PHYSIQUE $phys echo dynamique $dyn $dimension echo OPTIM="$optim" $filtre LIBO=$libo $dyn PHYS=$phys DIM=$dimc PROG=$code echo PATH pour les fichiers INCLUDE $include echo OPLINK="$oplink" set include="$include"' -I$(LIBF)/phy'"$physique" set include="$include"' -I$(LIBO)' ################################################################# # Execution de la comande make... ENFIN! ################################################################# cd $localdir echo $make -f $LMDGCM/makefile \ OPTION_DEP="$opt_dep" OPTION_LINK="$opt_link" \ OPTIM90="$optim90" \ OPTIMTRU90="$optimtru90" \ OPTIM="$optim$optimbis" \ INCLUDE="$include" \ $filtre \ LIBO=$libo \ $dyn \ $phys \ DIM=$dimc \ FLAG_PARA="$FLAG_PARA"\ L_ADJNT="$adjnt" \ LOCAL_DIR="$localdir" \ F77="$f77" \ F90="$f90" \ OPLINK="$oplink" \ LINK="$link" \ GCM="$LMDGCM" \ MOD_LOC_DIR=$mod_loc_dir \ MOD_SUFFIX=$mod_suffix \ AR=$ar \ PROG=$code $make -f $LMDGCM/makefile \ OPTION_DEP="$opt_dep" OPTION_LINK="$opt_link" \ OPTIM90="$optim90" \ OPTIMTRU90="$optimtru90" \ OPTIM="$optim$optimbis" \ INCLUDE="$include" \ $filtre \ LIBO=$libo \ $dyn \ $phys \ DIM=$dimc \ FLAG_PARA="$FLAG_PARA"\ L_ADJNT="$adjnt" \ LOCAL_DIR="$localdir" \ F77="$f77" \ F90="$f90" \ OPLINK="$oplink" \ LINK="$link" \ GCM="$LMDGCM" \ MOD_LOC_DIR=$mod_loc_dir \ MOD_SUFFIX=$mod_suffix \ AR=$ar \ PROG=$code \rm -f $libf/grid/dimensions.h