Ignore:
Timestamp:
May 25, 2012, 11:11:42 AM (13 years ago)
Author:
emillour
Message:

Generic GCM:

  • Significant update on how the number of scatterers is managed: Instead of having to manualy change 'nearkind' in radinc_h.F90, the number of scatterers must now be set when compiling, using makegcm "makegcm -s 1" for one scatterer or "makegcm -s 2" for two (e.g. dust and water ice), default behaviour (ie not specifying -s #) is -s 1 Modified phystd/radinc_h.F90 , added directory phystd/scatterers with script make_scatterers , and adapted makegcm* scripts.

EM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.GENERIC/makegcm_g95

    r646 r671  
    66########################################################################
    77set dim="64x48x32"
    8 set physique=mars
     8set physique=std
    99set phys="PHYS=$physique"
    10 set include='-I$(LIBF)/grid -I$(LIBF)/bibio -I. -I$(LIBF)/aeronomars'
     10set include='-I$(LIBF)/grid -I$(LIBF)/bibio -I.'
    1111set ntrac = 1
    1212set filtre=filtrez
    1313set grille=reg
    1414set dyntype="dyn"
     15set bands="32x36"
     16set scatterers="1"
    1517########################################################################
    1618# path a changer contenant les sources et les objets du modele
     
    2527setenv LIBOGCM $LMDGCM/libo
    2628# NetCDF
    27 # 64 bit machines
    28 #  setenv NCDFLIB /donnees/emlmd/netcdf64_g95/netcdf-3.6.1/lib
    29 #  setenv NCDFINC /donnees/emlmd/netcdf64_g95/netcdf-3.6.1/include
     29# 64 bit machines what is below is OK on LMD machines
     30  setenv NCDFLIB /donnees/emlmd/netcdf64-4.0.1_g95/lib
     31  setenv NCDFINC /donnees/emlmd/netcdf64-4.0.1_g95/include
    3032#else
    3133#  setenv NCDFLIB /distrib/local/netcdf/g95_32bits/lib
     
    180182else if $LINUX then
    181183# Ehouarn 'g95' compiler
    182    set optim90=" -O2 -fstatic -fzero -Wall "
    183    set optimtru90=" -O2 -fstatic -fzero -Wall "
     184   set optim90="-O3 -fstatic -funroll-loops "
     185   set optimtru90="-O3 -fstatic -funroll-loops "
    184186#   set opt_link=" -Mfree -L/usr/local/pgi/linux86/lib -lpgf90 -lpgftnrtl -lpghpf -lpghpf2 -L$NCDFLIB -lnetcdf -Wl,-Bstatic "
    185187# Ehouarn: there is no /usr/local/pgi/linux86/lib, but it doesn't matter
     
    241243
    242244
    243 
    244 
    245 Par default, la commande makegcm:
    246 ---------------------------------
    247 
    248 1. compile une serie de sous programmes se trouvant dans des sous-repertoires
    249 de $LMDGCM/libf.
    250 Les sous programmes sont ensuite stokes sur dans des librairies FORTRAN
    251 sur $LIBOGCM.
    252 
    253 2. Ensuite, makegcm compile le programme prog.f se trouvant par default sur
    254 $LMDGCM/libf/dyn3d et effectue le lien avec l ensemble des librairies.
    255 
    256 La variable '$LMDGCM' doit etre initialisee dans votre .cshrc ou en dur
    257 dans la comande makegcm.
    258 
    259 La commande makegcm est faite pour permettre de gerer en parallele des
    260 versions differentes du modele, compilees avec des options de compilation
    261 et des dimensions differentes sans avoir a chaque fois a recompiler tout
    262 le modele.
    263 
    264 Les librairies FORTRAN sont stoquees sur le directory $LIBOGCM.
     245The makegcm script:
     246-------------------
     247
     2481. compiles a series of subroutines located in the $LMDGCM/libf
     249 sub-directories.
     250 The objects are then stored in the libraries in $LIBOGCM.
     251
     2522. then, makegcm compiles program prog.f located by default in
     253$LMDGCM/libf/dyn3d and makes the link with the libraries.
     254
     255Environment Variables '$LMDGCM' and '$LIBOGCM'
     256 must be set as environment variables or directly
     257 in the makegcm file.
     258
     259The makegcm command is used to control the different versions of the model
     260 in parallel, compiled using the compilation options
     261 and the various dimensions, without having to recompile the whole model.
     262
     263The FORTRAN libraries are stored in directory $LIBOGCM.
    265264
    266265
     
    268267--------
    269268
    270 Les options suivantes peuvent etre definies soit par defaut en editant le
    271 "script" makegcm, soit en interactif:
    272 
    273 -d imxjmxlm  ou im, jm, et lm sont resp. le nombre de longitudes, latitudes
    274              et couches verticales.
    275 
    276 -t ntrac   selectionne le nombre de traceur advectes par la dynamique.
    277            Dans les versions courantes du modele terrestre on a par exemple
    278            ntrac=2 pour l'eau vapeur et liquide
    279 
    280              L'effet des options -d et -t est d'ecraser le fichier
     269The following options can either be defined by default by editing the
     270makegcm "script", or in interactive mode:
     271
     272-d imxjmxlm  where im, jm, and lm are the number of longitudes,
     273             latitudes and vertical layers respectively.
     274
     275-t ntrac   Selects the number of tracers present in the model
     276
     277             Options -d and -t overwrite file
    281278             $LMDGCM/libf/grid/dimensions.h
    282              qui contient sous forme de 4 PARAMETER FORTRAN les 3 dimensions
    283              de la grille horizontale im, jm, lm plus le nombre de traceurs
    284              advectes passivement par la dynamique ntrac, par un nouveu fichier
     279             which contains the 3 dimensions of the
     280             horizontal grid
     281             im, jm, lm plus the number of tracers passively advected
     282             by the dynamics ntrac,
     283             in 4 PARAMETER FORTRAN format
     284             with a new file:
    285285             $LMDGCM/libf/grid/dimension/dimensions.im.jm.lm.tntrac
    286              Si ce fichier n'existe pas encore, il est cree par le script
     286             If the file does not exist already
     287             it is created by the script
    287288             $LMDGCM/libf/grid/dimension/makdim
    288289
    289 -p PHYS    pour selectionner le jeu de parametrisations physiques avec
    290            lequel on veut compiler le modele.
    291            Le modele sera alors compile en prenant les sources des
    292            parametrisations physiques dans le repertoire:
     290-s nscat   Number of radiatively active scatterers
     291
     292-p PHYS    Selects the set of physical parameterizations
     293           you want to compile the model with.
     294           The model is then compiled using the physical
     295           parameterization sources in directory:
    293296            $LMDGCM/libf/phyPHYS
    294297
    295 -g grille  selectionne le type de grille qu'on veut utiliser.
    296            L'effet de cette option est d'ecraser le fichier
     298-g grille  Selects the grid type.
     299           This option overwrites file
    297300           $LMDGCM/libf/grid/fxyprim.h
    298            avec le fichier
     301           with file
    299302           $LMDGCM/libf/grid/fxy_grille.h
    300            grille peut prendre les valeurs:
    301            1. reg pour la grille reguliere
    302            2. sin pour avoir des points equidistants en sinus de la latitude
    303            3. new pour pouvoir zoomer sur une partie du globe
    304 
    305 -O "optimisation fortran" ou les optimisations fortran sont les options de la
    306             commande f77
     303           the grid can take the following values:
     304           1. reg - the regular grid
     305           2. sin - to obtain equidistant points in terms of sin(latitude)
     306           3. new - to zoom into a part of the globe
     307
     308-O "compilation options" set of fortran compilation options to use
    307309
    308310-include path
    309            Dans le cas ou on a dans des sous programmes des fichiers
    310            #include (cpp) qui se trouve sur des repertoires non references
    311            par defaut
    312 
    313 -adjnt     Pour compiler la l'adjoint du code dynamique
     311           Used if the subroutines contain #include files (ccp) that
     312           are located in directories that are not referenced by default.
     313
     314-adjnt     Compiles the adjoint model to the dynamical code.
    314315
    315316-olddyn    To compile GCM with "old dynamics"
    316317
    317 -filtre  filtre
    318            Pour choisir le filtre en longitude dans les regions polaires.
    319            "filtre" correspond au nom d'un repertoire se trouvant sur
    320            $LMDGCM/libf. Le filtre standard du modele est "filtrez" qui peut
    321            etre utilise aussi bien pour une grille reguliere que pour une
    322            grille zoomee en longitude.
     318-filtre  filter
     319           To select the longitudinal filter in the polar regions.
     320           "filter" corresponds to the name of a directory located in
     321           $LMDGCM/libf. The standard filter for the model is "filtrez"
     322           which can be used for a regular grid and for a
     323           grid with longitudinal zoom.
    323324
    324325-link "-Ldir1 -lfile1 -Ldir2 -lfile2 ..."
    325           Pour rajouter un lien avec les librairies FORTRAN
    326           libfile1.a, libfile2.a ... se trouvant respectivement sur les
    327           repertoires dir1, dir2 ...
    328           Si dirn est un repertoire dont le chemin est automatique (comme
    329           par exemple /usr/lib ...) il n'est pas besoin de specifier -Ldirn.
    330 
    331 Auteur: Frederic Hourdin  (hourdin@lmd.jussieu.fr)
     326           Adds a link to FORTRAN libraries
     327           libfile1.a, libfile2.a ...
     328           located in directories dir1, dir2 ...respectively
     329           If dirn is a directory with an automatic path
     330           (/usr/lib ... for example)
     331           there is no need to specify  -Ldirn.
     332
    332333eod
    333334exit
     
    346347        set physique="$2" ; set phys="PHYS=$physique" ; shift ; shift ; goto top
    347348
     349     case -s
     350        set scatterers="$2" ; shift ; goto top
     351
    348352     case -g
    349353        set grille="$2" ; shift ; shift ; goto top
    350354
     355    case -b
     356        set bands=$2 ; shift ; shift ; goto top
     357           
    351358     case -t
    352359        set ntrac=$2 ; shift ; shift ; goto top
     
    377384           set optim90="$optim90"" -G1 "
    378385        else if $LINUX then
    379            set optim90="-g -Mbounds "
     386           ## for g95
     387           set optim="-g -Wall -ftrace=full -fbounds-check"
     388           set optim90="-g -Wall -ftrace=full -fbounds-check"
     389           set optimtru90="-g -Wall -ftrace=full -fbounds-check"
    380390        else
    381391           echo "pas d option debug predefinie pour cette machine"
     
    397407if ( "$physique" == 'nophys' ) then
    398408   set phys="L_PHY= LIBPHY="
    399 endif
    400 
    401 ########################################################################
    402 # choix du nombre de traceur par defaut si il n'a pas ete choisi,
    403 # suivant la physique
    404 ########################################################################
    405 
    406 if ( $ntrac == 0  ) then
    407     if ( "$physique" == 'nophys' ) then
    408         set ntrac=1
    409     else if ( "$physique" == 'lmd' ) then
    410         set ntrac=2
    411     else if ( "$physique" == 'lmd_test_li' ) then
    412         set ntrac=2
    413     else if ( "$physique" == 'ec' ) then
    414         set ntrac=1
    415     else
    416         set ntrac = 1
    417     endif
    418409endif
    419410
     
    439430
    440431# dimension
    441 
    442432echo "dimension avant sed $dim"
    443433if ( $IBM ) then
     
    448438   set dim_=`echo $dim | sed -e 's/[^0-9]/_/g'`
    449439else
    450 #   set dim=`echo $dim | sed -n -e 's/[^0-9]/ /gp'`
    451 #   set dim_=`echo $dim | sed -n -e 's/[^0-9]/_/gp'`
    452440     set dim=`echo $dim | sed -e 's/[^0-9]/ /g'`
    453441     set dim_=`echo $dim | sed -e 's/[^0-9]/_/g'`
    454442endif
    455443
     444# bands
     445echo "bands avant sed $bands"
     446if ( $IBM ) then
     447   set bands=`echo $bands | sed -en 's/[^0-9]/ /g'`
     448   set bands_=`echo $bands | sed -en 's/[^0-9]/_/g'`
     449else if ( $SUN || $XNEC ) then
     450   set bands=`echo $bands | sed -e 's/[^0-9]/ /g'`
     451   set bands_=`echo $bands | sed -e 's/[^0-9]/_/g'`
     452else
     453     set bands=`echo $bands | sed -e 's/[^0-9]/ /g'`
     454     set bands_=`echo $bands | sed -e 's/[^0-9]/_/g'`
     455endif
     456
     457
    456458# build final name of libraries directory:
    457459if ( "$dyntype" == "olddyn" ) then
    458   set nomlib=${nomlib}_${dim_}_t${ntrac}_${grille}_olddyn
    459 else
    460   set nomlib=${nomlib}_${dim_}_t${ntrac}_${grille}
    461 endif
     460  set nomlib=${nomlib}_${dim_}_t${ntrac}_s${scatterers}_${grille}_olddyn
     461else
     462  set nomlib=${nomlib}_${dim_}_t${ntrac}_s${scatterers}_${grille}
     463endif
     464
     465# Append number of bands to nomlib (new for universal model)
     466set nomlib=${nomlib}_${bands_}
    462467
    463468# Append 'physique' type, if it is not mars, to nomlib
     
    504509cd $libf/grid
    505510if ( -f dimensions.h ) then
    506   echo "ATTENTION: vous etes sans doute en train de compiler le modele par ailleurs"
    507   echo "Attendez que la premiere compilation soit terminee pour relancer la suivante."
    508   echo "Si vous etes sur que vous ne compilez pas le modele par ailleurs,"
    509   echo "vous pouvez continuer en repondant oui."
    510   echo "Voulez-vous vraiment continuer?"
    511   if ( $< == "oui" ) then
    512     #remove old dimensions.h file
    513     \rm $libf/grid/dimensions.h
     511  echo "WARNING: you are already compiling the model somewhere else"
     512  echo "Wait until the first compilation is finished before starting."
     513  echo "If you are sure that you are not compiling elsewhere, you can"
     514  echo "type [yes] to continue."
     515  echo "Do you want to continue?"
     516  if ( $< == "yes" ) then
     517    #remove old dimensions.h , bands.h and scatterers.h files
     518    \rm -f $libf/grid/dimensions.h
     519    \rm -f $libf/grid/bands.h
     520    \rm -f $libf/phy${physique}/scatterers.h
    514521  else
    515522    exit
     
    522529# echo contents of dimensions.h to standard output
    523530cat $libf/grid/dimensions.h
     531
     532# Build the appropriate 'bands.h' file
     533makbands $bands
     534# echo contents of bands.h to standard output
     535cat $libf/grid/bands.h
     536
     537# Build the appropriate 'scatterers.h' file
     538cd $libf/phy$physique/scatterers
     539./make_scatterers $scatterers
     540# echo contents of scatterers.h to standard output
     541cat $libf/phy$physique/scatterers.h
    524542
    525543cd $LMDGCM
     
    549567  \rm fxyprim.h
    550568  cp -p fxy_${grille}.h fxyprim.h
    551 endif
    552 
    553 ######################################################################
    554 #   Traitement special pour le nouveau rayonnement de Laurent Li.
    555 ######################################################################
    556 
    557 if ( -f $libf/phy$physique/raddim.h ) then
    558   if ( -f $libf/phy$physique/raddim.$dimh.h ) then
    559     \rm $libf/phy$physique/raddim.h
    560     cp -p $libf/phy$physique/raddim.$dimh.h $libf/phy$physique/raddim.h
    561     echo $libf/phy$physique/raddim.$dimh.h
    562     cat $libf/phy$physique/raddim.$dimh.h
    563     cat $libf/phy$physique/raddim.h
    564   else
    565     echo On peut diminuer la taille de l executable en creant
    566     echo le fichier $libf/phy$physique/raddim.$dimh.h
    567     \cp -p $libf/phy$physique/raddim.defaut.h $libf/phy$physique/raddim.h
    568   endif
    569569endif
    570570
     
    680680endif
    681681
    682 
    683 
    684 #
    685 # les deux test suivants sont "temporaires" pour pallier des "faiblesses" du
    686 # compilateur fortran Sun: f90: SC4.0 11 Sep 1995 FORTRAN 90 1.1
    687 #
    688 #if ($code == 'create_limit' && $SUN) then
    689 #   set link=f77
    690 #   set opt_link="-L$NCDFLIB -lnetcdf"
    691 #endif
    692 
    693 #if ($code == 'create_etat0' && $SUN) then
    694 #   if ( ! -f $libo/libdyn3d.a ) then
    695 #     echo "Priere de compiler gcm en premier pour des raisons d'optimisation"
    696 #     \rm $libf/grid/dimensions.h
    697 #     exit
    698 #   endif
    699 #   set optim90=" -dalign -fixed "
    700 #   set opt_link="-L$IOIPSLDIR -lioipsl  -L$NCDFLIB -lnetcdf"
    701 #   set link="$f90 $optim90"
    702 #   touch $LMDGCM/libf/dyn3d/startvar.F
    703 #   touch $LMDGCM/libf/dyn3d/etat0_netcdf.F
    704 #endif
    705 
    706 #
    707 # Encore un test temporaire: probleme de compilation sur VPP
    708 # l'optimisation de startvar se passe mal
    709 #
    710 if ($code == 'create_etat0' && $VPP) then
    711    if ( ! -f $libo/libdyn3d.a ) then
    712      echo "Priere de compiler gcm en premier pour des raisons d'optimisation"
    713      \rm $libf/grid/dimensions.h                                             
    714      exit                       
    715    endif
    716    set optim90="$optim90"" -X9 -w"
    717    set opt_link="-L$NCDFLIB -lnetcdf"
    718    touch $LMDGCM/libf/dyn3d/startvar.F
    719    touch $LMDGCM/libf/dyn3d/etat0_netcdf.F
    720 endif
    721 
    722682#
    723683# etat0_netcdf a besoin d'info de la physique
     
    815775PROG=$code
    816776
    817 \rm $libf/grid/dimensions.h
     777\rm -f $libf/grid/dimensions.h
     778\rm -f $libf/grid/bands.h
     779\rm -f $libf/phy$physique/scatterers.h
Note: See TracChangeset for help on using the changeset viewer.