Ignore:
Timestamp:
Mar 31, 2015, 3:49:07 PM (10 years ago)
Author:
emillour
Message:

All models: Reorganizing the physics/dynamics interface.

  • makelmdz and makelmdz_fcm scripts adapted to handle the new directory settings
  • misc: (replaces what was the "bibio" directory)
  • Should only contain extremely generic (and non physics or dynamics-specific) routines
  • Therefore moved initdynav.F90, initfluxsto.F, inithist.F, writedynav.F90, write_field.F90, writehist.F to "dyn3d_common"
  • dynlonlat_phylonlat: (new interface directory)
  • This directory contains routines relevent to physics/dynamics grid interactions, e.g. routines gr_dyn_fi or gr_fi_dyn and calfis
  • Moreover the dynlonlat_phylonlat contains directories "phy*" corresponding to each physics package "phy*" to be used. These subdirectories should only contain specific interfaces (e.g. iniphysiq) or main programs (e.g. newstart)
  • phy*/dyn1d: this subdirectory contains the 1D model using physics from phy*

EM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.MARS/create_make_gcm

    r634 r1403  
    1111#          ., dyn3d and grid
    1212#
     13
     14# arguments given to create_make_gcm are the directories to scan
     15src_dirs=$*
     16
    1317machine=`hostname`
    1418os=`uname`
    1519gcm=`pwd`
     20logfile=$gcm/create_make_gcm.log
     21rm -f $logfile ; touch -f $logfile
    1622libf=$gcm/libf
    1723libo=$gcm/libo
     
    5157#echo $localdir
    5258echo "LOCAL_DIR=`echo $localdir`"
    53 echo 'BIBIO    = $(LIBF)/bibio'
     59echo 'MISC    = $(LIBF)/misc'
    5460echo 'AERONOMARS    = $(LIBF)/aeronomars'
    5561echo "FILTRE   = filtre"
     
    5763echo 'DYN  = $(DYNTYPE)'
    5864echo 'LIBPHY = $(LIBO)/libphy$(PHYS).a'
     65echo 'LIBDYN_PHY = $(LIBO)/libdynlmdz_phy$(PHYS).a'
    5966echo 'DIRMAIN= $(DYN)$(DIM)d'
    6067echo 'RM=rm'
     
    6471echo '# Les differentes librairies pour l"edition des liens:'
    6572echo
    66 if [ "$XNEC" = '1' ] ; then
    67   echo 'dyn3d      = $(LIBO)/libsxdyn3d.a $(LIBO)/libsx$(FILTRE).a'
    68   echo 'dyn2d      = $(LIBO)/libsxdyn2d.a'
    69   echo 'dyn1d      = $(LIBO)/libsxdyn1d.a'
    70   echo 'L_DYN      = -lsxdyn$(DIM)d'
    71   echo 'L_FILTRE   = -lsx$(FILTRE)'
    72   echo 'L_PHY = -lsxphy$(PHYS) '
    73   echo 'L_BIBIO    = -lsxbibio'
    74   echo 'L_AERONOMARS    = -lsxaeronomars'
    75   echo 'L_ADJNT    ='
    76 else
    77   echo 'dyn3d      = $(LIBO)/libdyn3d.a $(LIBO)/lib$(FILTRE).a'
    78   echo 'dyn2d      = $(LIBO)/libdyn2d.a'
    79   echo 'dyn1d      = $(LIBO)/libdyn1d.a'
    80   echo 'L_DYN      = -l$(DYN)$(DIM)d'
    81   echo 'L_FILTRE   = -l$(FILTRE)'
    82   echo 'L_PHY = -lphy$(PHYS) '
    83   echo 'L_BIBIO    = -lbibio'
    84   echo 'L_AERONOMARS    = -laeronomars'
    85   echo 'L_ADJNT    ='
    86 fi
     73echo 'L_DYN      = -ldyn$(DIM)d'
     74echo 'L_FILTRE   = -l$(FILTRE)'
     75echo 'L_DYN_PHY = -ldynlmdz_phy$(PHYS) '
     76echo 'L_PHY = -lphy$(PHYS) '
     77echo 'L_MISC    = -lmisc'
     78echo 'L_AERONOMARS    = -laeronomars'
     79echo 'L_ADJNT    ='
    8780echo
    8881echo "#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"
     
    10598echo
    10699echo "PROG = code"
    107 echo
    108 echo 'main : $(DYN) bibio phys aeronomars $(OPTION_DEP) '
     100echo 'DYN  = dyn$(DIM)d'
     101echo
     102echo 'main : $(DYN) misc phys dyn_phy aeronomars $(OPTION_DEP) '
    109103echo '  cd $(LIBO) ; $(RANLIB) lib*.a ; cd $(GCM) ;\'
    110104echo '  cd $(LOCAL_DIR); \'
    111105echo '  $(COMPILE90) $(LIBF)/$(DIRMAIN)/$(SOURCE) -o $(PROG).o ; \'
    112106if [ "$CRAY" = '0' ] ; then
    113 echo '  $(LINK) $(PROG).o -L$(LIBO) $(L_DYN) $(L_ADJNT) $(L_FILTRE) $(L_AERONOMARS) $(L_PHY) $(L_BIBIO) $(L_DYN) $(L_AERONOMARS) $(OPLINK) $(OPTION_LINK) -o $(LOCAL_DIR)/$(PROG).e ; $(RM) $(PROG).o '
     107echo '  $(LINK) $(PROG).o -L$(LIBO) $(L_DYN) $(L_DYN_PHY) $(L_ADJNT) $(L_FILTRE) $(L_AERONOMARS) $(L_PHY) $(L_DYN_PHY) $(L_MISC) $(L_DYN) $(L_AERONOMARS) $(OPLINK) $(OPTION_LINK) -o $(LOCAL_DIR)/$(PROG).e ; $(RM) $(PROG).o '
    114108else
    115 echo '  $(LINK) $(PROG).o -L$(LIBO) $(L_DYN) $(L_ADJNT) $(L_FILTRE) $(L_AERONOMARS) $(L_PHY) $(L_BIBIO) $(L_DYN) $(L_AERONOMARS) $(OPLINK) $(OPTION_LINK) -o $(LOCAL_DIR)/$(PROG).e ; $(RM) $(PROG).o '
     109echo '  $(LINK) $(PROG).o -L$(LIBO) $(L_DYN) $(L_DYN_PHY) $(L_ADJNT) $(L_FILTRE) $(L_AERONOMARS) $(L_PHY) $(L_DYN_PHY) $(L_MISC) $(L_DYN) $(L_AERONOMARS) $(OPLINK) $(OPTION_LINK) -o $(LOCAL_DIR)/$(PROG).e ; $(RM) $(PROG).o '
    116110fi
    117111echo
     
    122116echo 'phys : $(LIBPHY)'
    123117echo
    124 echo 'bibio : $(LIBO)/libbibio.a'
     118echo 'dyn3d : $(LIBO)/libdyn3d.a $(LIBO)/lib$(FILTRE).a'
     119echo 'dyn2d : $(LIBO)/libdyn2d.a'
     120echo 'dyn1d : '
     121echo
     122echo 'dyn_phy: $(LIBDYN_PHYS)'
     123echo
     124echo 'misc : $(LIBO)/libmisc.a'
    125125echo
    126126echo 'aeronomars : $(LIBO)/libaeronomars.a'
     
    140140echo
    141141cd $libf >/dev/null 2>&1
    142 for diri in ` ls `
    143 do
     142
     143for diri in $src_dirs ; do
     144
    144145   if [ -d $diri ] ; then
    145    if [ "`ls $diri/*.F`" != "" ] || [ "`ls $diri/*.F90`" != "" ]  ; then
    146       cd $diri >/dev/null 2>&1
     146   if [ "`ls $diri/*.F`" != "" ] || [ "`ls $diri/*.[fF]90`" != "" ]  ; then
     147#      cd $diri >/dev/null 2>&1
    147148      echo
    148149      listlib=""
    149       for i in `ls *.F`
    150       do
    151          fili=`basename $i .F`
     150# Liste des fichiers .F et .F90 n'etant pas des programmes principaux
     151      for fili in `ls $diri/*.[fF]` ; do
    152152         # Check if file is a routine or main program
    153153         # i.e: look for the "program" keword preceeded by leading spaces
    154          test=` (  head $i | grep -i '^ *program' ) `
    155          if [ "$test" = "" ] ; then
    156             # if it is not a main program, add it to the list
    157             listlib=$listlib" "$fili
    158          fi
    159       done
    160       for i in `ls *.F90`
    161       do
    162          fili=`basename $i .F90`
     154         test=` (  head $fili | grep -i '^ *program' ) `
     155         # if it is not a main program, add it to the list
     156         if [ "$test" = "" ] ; then listlib=$listlib" "$fili ; fi
     157      done
     158      for fili in `ls $diri/*.[fF]90` ; do
    163159         # Check if file is a routine or main program
    164160         # i.e. look for "program" keyword (with possibly some leading spaces)
    165          test=` (  head $i | grep -i '^ \{0,\}program' ) `
    166          if [ "$test" = "" ] ; then
    167             # if it is not a main program, add it to the list
    168             listlib=$listlib" "$fili
    169          fi
    170       done
    171 #
    172       echo
    173       echo
    174       echo "#======================================================================="
     161         test=` (  head $fili | grep -i '^ \{0,\}program' ) `
     162         # if it is not a main program, add it to the list
     163         if [ "$test" = "" ] ; then listlib=$listlib" "$fili ; fi
     164      done
     165      echo
     166      echo $listlib >> $logfile
     167      echo
     168      # topdiri contains main dir name (without trailing "/blabla" for subdirs)
     169      topdiri=${diri%/*}
     170      echo "#=================================================================="
    175171      echo "# Contenu de la bibliotheque correspondant au Directory "$diri
    176       echo "#======================================================================="
    177       echo
    178       for fili in $listlib
    179       do
    180          echo '$(LIBO)/lib'$diri".a : " '$(LIBO)/lib'$diri".a("$fili".o)"
     172      echo "#=================================================================="
     173      echo
     174      for trufile in $listlib ; do
     175         fili=`echo $trufile | awk -F/ ' { print $NF } ' | cut -d. -f1`
     176         echo '$(LIBO)/lib'$topdiri".a : " '$(LIBO)/lib'$topdiri".a("$fili".o)"
    181177         echo
    182178      done
    183       echo '.PRECIOUS   : $(LIBO)/lib'$diri'.a'
    184       echo
    185       echo
    186       echo "# Compilation des membres de la bibliotheque lib"$diri".a"
    187       echo
    188       for fili in $listlib
    189       do
    190          if [ -f $fili.F90 ] ; then
    191            trufile=$fili.F90
    192          else
    193            trufile=$fili.F
    194          fi
     179      echo '.PRECIOUS   : $(LIBO)/lib'$topdiri'.a'
     180      echo
     181      echo
     182      echo "# Compilation of elements in $diri of library lib"$topdiri".a"
     183      echo
     184      for trufile in $listlib ; do
     185         fili=`echo $trufile | awk -F/ ' { print $NF } ' | cut -d. -f1`
    195186         F90=0 ; egrep -i '^ *use ' $trufile > /dev/null 2>&1 && F90=1
    196187                 egrep -i '^ *module ' $trufile > /dev/null 2>&1 && F90=1
    197188                 egrep -i '#include*.inc ' $trufile > /dev/null 2>&1 && F90=1
    198          str1='$(LIBO)/lib'$diri'.a('$fili'.o) : $(LIBF)/'$diri/$trufile
    199          [ "$fili" = "chem.subs" ] && str1=$str1' $(LIBF)/'$diri/chem.mods.F
    200          for stri in ` ( sed -n "/\#include/s/\#include//p" $trufile | sed 's/\"//g' ; egrep -i '^ *use ' $trufile | sed -e 's/,/ /' | awk ' { print $2 } ' ) `
    201          do
    202             stri=`echo $stri | tr [A-Z] [a-z]`
    203             if [ -f $stri ] ; then
     189         str1='$(LIBO)/lib'$topdiri'.a('$fili'.o) : $(LIBF)/'$trufile
     190         [ "$fili" = "$diri/chem.subs" ] && str1=$str1' $(LIBF)/'$diri/chem.mods.F
     191
     192##########################################################################
     193# TRAITEMENT DES DEPENDANCES
     194# Differents cas de dependance correspondant a des include ou des
     195# use module.
     196# soit dans le repertoire local soit dans un autre.
     197# Pour dyn3d, il faudrait remplacer la chaine de caractere par $DYN
     198# ou quelque chose du genre.
     199##########################################################################
     200
     201         for stri in ` ( sed -e '/^[cC\!]/d' $trufile | sed -e "/\#include /s/\#include /XXnclude /" -e "/include /s/include /XXnclude /" -e "/INCLUDE /s/INCLUDE /XXnclude /" | sed -n "/XXnclude /s/XXnclude//p" | sed 's/\"//g' | sort | uniq ; sed -e '/^[cC\!]/d' $trufile | egrep -i '^ *use ' | sed -e 's/,/ /' | awk ' { print $2 } ' | sort | uniq ) ` ; do
     202            echo $trufile $fili $stri >> $logfile
     203            strj=`echo $stri | tr [A-Z] [a-z]`
     204            str2=""
     205            for dirinc in $src_dirs ; do
     206# Recherche dans l'ordre hierarchique inverse car seule la derniere
     207# ligne est conservee
     208#               if [ $dirinc = phydev ] ; then
     209#                   dirstr='$(PHYS)'
     210#                   libstr='phy$(PHYS)'
     211#               else
     212                   dirstr=$dirinc
     213                   libstr=$dirinc
     214#               fi
     215               echo dirinc $dirinc >> $logfile
     216               if [ -f $dirinc/$stri ] ; then
     217                  str2='$(LIBF)/'$dirstr/$stri
     218               elif [ -f $dirinc/$strj ] ; then
     219                  str2='$(LIBF)/'$dirstr/$stri
     220               elif [ -f $dirinc/$strj.[fF]90 ]  || [ -f $dirinc/$strj.[fF] ]  ; then
     221                  strlib=`echo $libstr | awk -F/ ' { print $1 } '`
     222                  str2='$(LIBO)/lib'$strlib'.a('$strj'.o)'
     223               elif [ -f $dirinc/$stri.[fF]90 ]  || [ -f $dirinc/$stri.[fF] ]  ; then
     224                  strlib=`echo $libstr | awk -F/ ' { print $1 } '`
     225                  str2='$(LIBO)/lib'$strlib'.a('$stri'.o)'
     226               fi
     227               echo stri $stri  >> $logfile
     228               echo str2 $str2  >> $logfile
     229            done
     230               echo dernier str2 $str2  >> $logfile
     231            if [ "$str2" = "" ] ; then
     232               echo Warn: Include $diri $trufile $fili $stri pas trouve >> $logfile
     233            elif [ "$str2" = "$str1" ] ; then
     234               echo Warn: Include $diri $trufile $fili $stri $str1 trouve 2x >> $logfile
     235            else
    204236               echo $str1 \\
    205                str1='$(LIBF)/'$diri'/'$stri
    206             else
    207                if [ -f $stri.F ] || [ -f $stri.F90 ] ; then
    208                   echo $str1 \\
    209                   str1='$(LIBO)/lib'$diri'.a('$stri'.o)'
    210                else
    211 #                  for dirinc in dyn3d grid bibio aeronomars phymars
    212                   for dirinc in $*
    213                   do
    214                      if [ -f ../$dirinc/$stri ] ; then
    215                         echo $str1 \\
    216                         str1='$(LIBF)/'`cd .. ; ls */$stri | head -1`
    217                      fi
    218                      if [ -f ../$dirinc/$stri.F90 ] ; then
    219                         echo $str1 \\
    220                         str1='$(LIBO)/lib'$dirinc'.a('$stri'.o)'
    221                      fi
    222                   done
    223                fi
     237               str1=$str2
    224238            fi
    225          done
     239         done # Fin de la boucle sur les dependances et ecriture de la derniere
    226240         echo $str1
    227          # Compile in LOCAL_DIR directory, and before compiling,
    228          # remove the object from the library
    229          echo ' cd $(LOCAL_DIR); \'
    230          echo ' $(AR) d $(LIBO)/lib'$diri'.a '$fili'.o ; \'
     241         # Compile in LIBO directory; and before compiling, remove
     242         # object from library
     243         echo ' cd $(LIBO); \'
     244         echo ' $(AR) d $(LIBO)/lib'$topdiri'.a '$fili'.o ; \'
    231245         if [ "$F90" -eq '0' ] ; then
    232246         ## Fixed Form Fortran 77
    233            echo '       $(COMPILE) $(LIBF)/'$diri'/'$trufile' ; \'
     247           echo '       $(COMPILE) $(LIBF)/'$trufile' ; \'
    234248         else
    235249         ## Fortran 90
    236            if [ -f $fili.F90 ] ; then
    237            ## Free Form Fortran 90
    238               echo '    $(COMPTRU90) $(LIBF)/'$diri'/'$trufile' ; \'
     250           if [ `echo $trufile | cut -d. -f2` = F90 ] ; then
     251              ## Free Form
     252              echo '    $(COMPTRU90) $(LIBF)/'$trufile' ; \'
    239253           else
    240            ## Fixed Form Fortran 90
    241               echo '    $(COMPILE90) $(LIBF)/'$diri'/'$trufile' ; \'
     254              echo '    $(COMPILE90) $(LIBF)/'$trufile' ; \'
    242255           fi
    243            ## If a module, handle created module descriptor file
    244            MODU=0; egrep -i '^ *module ' $trufile> /dev/null 2>&1 && MODU=1
    245             if [ "$MODU" -eq '1' -a "$CRAY" != '1' ] ; then
    246               if [ "$os" = 'UNIX_System_V' ] ; then
    247                 echo '  cp $(MOD_LOC_DIR)/*.$(MOD_SUFFIX) $(LIBO)/ ; \'
    248               else
    249                 echo '  mv $(MOD_LOC_DIR)/'$fili'.$(MOD_SUFFIX) $(LIBO)/'$fili'.$(MOD_SUFFIX) ; \'
    250 #                echo ' if [ "$(MOD_LOC_DIR)" ne "$(LIBO)" ] ; then mv $(MOD_LOC_DIR)/'*'.$(MOD_SUFFIX) $(LIBO) ; fi ; \'
    251               fi
    252             fi
    253256         fi
    254          if ( [ "$XNEC" -eq '1' ] || [ "$X6NEC" = '1' ] || [ "$X8BRODIE" = '1' ] ) ; then
    255            echo '       sxar r $(LIBO)/libsx'$diri'.a '$fili'.o ; \'
    256          fi
    257257         # Put generated object in library
    258          echo ' $(AR) r $(LIBO)/lib'$diri'.a '$fili'.o ; $(RM) '$fili'.o ; \'
    259          echo ' cd $(GCM)'
     258         echo ' $(AR) r $(LIBO)/lib'$topdiri'.a '$fili'.o ; $(RM) '$fili'.o ; \'
    260259         echo
    261260      done
Note: See TracChangeset for help on using the changeset viewer.