Changeset 1403 for trunk/LMDZ.GENERIC


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

Location:
trunk/LMDZ.GENERIC
Files:
32 added
11 edited
29 moved

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.GENERIC/README

    r1384 r1403  
    10541054== 04/03/2015 == EM
    10551055- Some code cleanup: turning comcstfi.h into module comcstfi_mod
     1056
     1057== 31/03/2015 == EM
     1058- Reorganizing the physics/dynamics interface, for better compatibility
     1059  between models and with the parallel LMDZ.COMMON dyn core. Main structural
     1060  changes are:
     1061* misc: (replaces what was the "bibio" directory)
     1062- Should only contain extremely generic (and non physics or
     1063  dynamics-specific) routines
     1064* dynlonlat_phylonlat: (new interface directory)
     1065- This directory contains routines relevent to physics/dynamics grid
     1066  interactions, e.g. routines gr_dyn_fi or gr_fi_dyn and calfis
     1067- Moreover the dynlonlat_phylonlat contains directory "phystd".
     1068  This subdirectories should only contain specific interfaces (e.g.
     1069  iniphysiq) or main programs (e.g. newstart).
     1070* phystd/dyn1d: this subdirectory contains the 1D models.
  • trunk/LMDZ.GENERIC/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'
    54 ##echo 'AERONOMARS    = $(LIBF)/aeronomars'
     59echo 'MISC    = $(LIBF)/misc'
     60#echo 'AERONOMARS    = $(LIBF)/aeronomars'
    5561echo "FILTRE   = filtre"
    5662echo "PHYS  = "
    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'
     78#echo 'L_AERONOMARS    = -laeronomars'
     79echo 'L_ADJNT    ='
    8780echo
    8881echo "#%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"
     
    10598echo
    10699echo "PROG = code"
    107 echo
    108 ##echo 'main : $(DYN) bibio phys aeronomars $(OPTION_DEP) '
    109 echo 'main : $(DYN) bibio phys $(OPTION_DEP) '
     100echo 'DYN  = dyn$(DIM)d'
     101echo
     102echo 'main : $(DYN) misc phys dyn_phy $(OPTION_DEP) '
    110103echo '  cd $(LIBO) ; $(RANLIB) lib*.a ; cd $(GCM) ;\'
    111104echo '  cd $(LOCAL_DIR); \'
    112105echo '  $(COMPILE90) $(LIBF)/$(DIRMAIN)/$(SOURCE) -o $(PROG).o ; \'
    113106if [ "$CRAY" = '0' ] ; then
    114 ##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 '
    115 echo '  $(LINK) $(PROG).o -L$(LIBO) $(L_DYN) $(L_ADJNT) $(L_FILTRE) $(L_PHY) $(L_BIBIO) $(L_DYN) $(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_PHY) $(L_DYN_PHY) $(L_MISC) $(L_DYN) $(L_PHY) $(OPLINK) $(OPTION_LINK) -o $(LOCAL_DIR)/$(PROG).e ; $(RM) $(PROG).o '
    116108else
    117 ##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 '
    118 echo '  $(LINK) $(PROG).o -L$(LIBO) $(L_DYN) $(L_ADJNT) $(L_FILTRE) $(L_PHY) $(L_BIBIO) $(L_DYN) $(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_PHY) $(L_DYN_PHY) $(L_MISC) $(L_DYN) $(L_PHY) $(OPLINK) $(OPTION_LINK) -o $(LOCAL_DIR)/$(PROG).e ; $(RM) $(PROG).o '
    119110fi
    120111echo
     
    125116echo 'phys : $(LIBPHY)'
    126117echo
    127 echo 'bibio : $(LIBO)/libbibio.a'
    128 echo
    129 ##echo 'aeronomars : $(LIBO)/libaeronomars.a'
    130 ##echo
     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'
     125echo
     126#echo 'aeronomars : $(LIBO)/libaeronomars.a'
     127#echo
    131128echo 'adjnt : $(LIBO)/libadjnt.a'
    132129echo
     
    143140echo
    144141cd $libf >/dev/null 2>&1
    145 for diri in ` ls `
    146 do
     142
     143for diri in $src_dirs ; do
     144
    147145   if [ -d $diri ] ; then
    148    if [ "`ls $diri/*.F`" != "" ] || [ "`ls $diri/*.F90`" != "" ]  ; then
    149       cd $diri >/dev/null 2>&1
     146   if [ "`ls $diri/*.F`" != "" ] || [ "`ls $diri/*.[fF]90`" != "" ]  ; then
     147#      cd $diri >/dev/null 2>&1
    150148      echo
    151149      listlib=""
    152       for i in `ls *.F`
    153       do
    154          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
    155152         # Check if file is a routine or main program
    156153         # i.e: look for the "program" keword preceeded by leading spaces
    157          test=` (  head $i | grep -i '^ *program' ) `
    158          if [ "$test" = "" ] ; then
    159             # if it is not a main program, add it to the list
    160             listlib=$listlib" "$fili
    161          fi
    162       done
    163       for i in `ls *.F90`
    164       do
    165          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
    166159         # Check if file is a routine or main program
    167160         # i.e. look for "program" keyword (with possibly some leading spaces)
    168          test=` (  head $i | grep -i '^ \{0,\}program' ) `
    169          if [ "$test" = "" ] ; then
    170             # if it is not a main program, add it to the list
    171             listlib=$listlib" "$fili
    172          fi
    173       done
    174 #
    175       echo
    176       echo
    177       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 "#=================================================================="
    178171      echo "# Contenu de la bibliotheque correspondant au Directory "$diri
    179       echo "#======================================================================="
    180       echo
    181       for fili in $listlib
    182       do
    183          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)"
    184177         echo
    185178      done
    186       echo '.PRECIOUS   : $(LIBO)/lib'$diri'.a'
    187       echo
    188       echo
    189       echo "# Compilation des membres de la bibliotheque lib"$diri".a"
    190       echo
    191       for fili in $listlib
    192       do
    193          if [ -f $fili.F90 ] ; then
    194            trufile=$fili.F90
    195          else
    196            trufile=$fili.F
    197          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`
    198186         F90=0 ; egrep -i '^ *use ' $trufile > /dev/null 2>&1 && F90=1
    199187                 egrep -i '^ *module ' $trufile > /dev/null 2>&1 && F90=1
    200188                 egrep -i '#include*.inc ' $trufile > /dev/null 2>&1 && F90=1
    201          str1='$(LIBO)/lib'$diri'.a('$fili'.o) : $(LIBF)/'$diri/$trufile
    202          [ "$fili" = "chem.subs" ] && str1=$str1' $(LIBF)/'$diri/chem.mods.F
    203          for stri in ` ( sed -n "/\#include/s/\#include//p" $trufile | sed 's/\"//g' ; egrep -i '^ *use ' $trufile | sed -e 's/,/ /' | awk ' { print $2 } ' ) `
    204          do
    205             stri=`echo $stri | tr [A-Z] [a-z]`
    206             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
    207236               echo $str1 \\
    208                str1='$(LIBF)/'$diri'/'$stri
    209             else
    210                if [ -f $stri.F ] || [ -f $stri.F90 ] ; then
    211                   echo $str1 \\
    212                   str1='$(LIBO)/lib'$diri'.a('$stri'.o)'
    213                else
    214 #                  for dirinc in dyn3d grid bibio aeronomars phymars
    215                   for dirinc in $*
    216                   do
    217                      if [ -f ../$dirinc/$stri ] ; then
    218                         echo $str1 \\
    219                         str1='$(LIBF)/'`cd .. ; ls */$stri | head -1`
    220                      fi
    221                      if [ -f ../$dirinc/$stri.F90 ] ; then
    222                         echo $str1 \\
    223                         str1='$(LIBO)/lib'$dirinc'.a('$stri'.o)'
    224                      fi
    225                   done
    226                fi
     237               str1=$str2
    227238            fi
    228          done
     239         done # Fin de la boucle sur les dependances et ecriture de la derniere
    229240         echo $str1
    230          # Compile in LOCAL_DIR directory, and before compiling,
    231          # remove the object from the library
    232          echo ' cd $(LOCAL_DIR); \'
    233          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 ; \'
    234245         if [ "$F90" -eq '0' ] ; then
    235         ## Fixed Form Fortran 77
    236            echo '       $(COMPILE) $(LIBF)/'$diri'/'$trufile' ; \'
     246        ## Fixed Form Fortran 77
     247           echo '       $(COMPILE) $(LIBF)/'$trufile' ; \'
    237248         else
    238249         ## Fortran 90
    239            if [ -f $fili.F90 ] ; then
    240            ## Free Form Fortran 90
    241               echo '    $(COMPTRU90) $(LIBF)/'$diri'/'$trufile' ; \'
     250           if [ `echo $trufile | cut -d. -f2` = F90 ] ; then
     251              ## Free Form
     252              echo '    $(COMPTRU90) $(LIBF)/'$trufile' ; \'
    242253           else
    243            ## Fixed Form Fortran 90
    244               echo '    $(COMPILE90) $(LIBF)/'$diri'/'$trufile' ; \'
     254              echo '    $(COMPILE90) $(LIBF)/'$trufile' ; \'
    245255           fi
    246            ## If a module, handle created module descriptor file
    247            MODU=0; egrep -i '^ *module ' $trufile> /dev/null 2>&1 && MODU=1
    248             if [ "$MODU" -eq '1' -a "$CRAY" != '1' ] ; then
    249               if [ "$os" = 'UNIX_System_V' ] ; then
    250                 echo '  cp $(MOD_LOC_DIR)/*.$(MOD_SUFFIX) $(LIBO)/ ; \'
    251               else
    252                 echo '  mv $(MOD_LOC_DIR)/'$fili'.$(MOD_SUFFIX) $(LIBO)/'$fili'.$(MOD_SUFFIX) ; \'
    253 #                echo ' if [ "$(MOD_LOC_DIR)" ne "$(LIBO)" ] ; then mv $(MOD_LOC_DIR)/'*'.$(MOD_SUFFIX) $(LIBO) ; fi ; \'
    254               fi
    255             fi
    256256         fi
    257          if ( [ "$XNEC" -eq '1' ] || [ "$X6NEC" = '1' ] || [ "$X8BRODIE" = '1' ] ) ; then
    258            echo '       sxar r $(LIBO)/libsx'$diri'.a '$fili'.o ; \'
    259          fi
    260257         # Put generated object in library
    261          echo ' $(AR) r $(LIBO)/lib'$diri'.a '$fili'.o ; $(RM) '$fili'.o ; \'
    262          echo ' cd $(GCM)'
     258         echo ' $(AR) r $(LIBO)/lib'$topdiri'.a '$fili'.o ; $(RM) '$fili'.o ; \'
    263259         echo
    264260      done
  • trunk/LMDZ.GENERIC/libf/dyn3d/gcm.F

    r1395 r1403  
    66     &                       iconser, ecritphy, idissip
    77!      use comgeomphy, only: initcomgeomphy
     8      use filtreg_mod, only: inifilr
    89      IMPLICIT NONE
    910
     
    106107
    107108      EXTERNAL caldyn, traceur
    108       EXTERNAL dissip,geopot,iniconst,inifilr
     109      EXTERNAL dissip,geopot,iniconst
    109110      EXTERNAL integrd,SCOPY
    110111      EXTERNAL inigeom
  • trunk/LMDZ.GENERIC/libf/dyn3d/logic.h

    r1216 r1403  
    1 c-----------------------------------------------------------------------
    2 c INCLUDE 'logic.h'
     1!-----------------------------------------------------------------------
     2! INCLUDE 'logic.h'
    33
    4       COMMON/logic/ purmats,physic,forward,leapf,apphys,grireg,
    5      *  statcl,conser,apdiss,apdelq,saison,ecripar,fxyhypb,ysinus,
     4      COMMON/logic/ purmats,physic,forward,leapf,apphys,grireg,         &
     5     &  statcl,conser,apdiss,apdelq,saison,ecripar,fxyhypb,ysinus,      &
    66     &  hybrid,autozlevs
    77
    8       LOGICAL purmats,physic,forward,leapf,apphys,grireg,statcl,conser,
    9      * apdiss,apdelq,saison,ecripar,fxyhypb,ysinus,hybrid,autozlevs
     8      LOGICAL purmats,physic,forward,leapf,apphys,grireg,statcl,conser, &
     9     & apdiss,apdelq,saison,ecripar,fxyhypb,ysinus,hybrid,autozlevs
    1010
    11 c-----------------------------------------------------------------------
     11!-----------------------------------------------------------------------
  • trunk/LMDZ.GENERIC/libf/dyn3d/serre.h

    r135 r1403  
    1 c..include serre.h
    2 c
    3        REAL clon,clat,transx,transy,alphax,alphay,pxo,pyo,
    4      ,  grossismx, grossismy, dzoomx, dzoomy,taux,tauy
    5        COMMON/serre/clon,clat,transx,transy,alphax,alphay,pxo,pyo ,
    6      ,  grossismx, grossismy, dzoomx, dzoomy,taux,tauy
     1!..include serre.h
     2!
     3       REAL clon,clat,transx,transy,alphax,alphay,pxo,pyo,              &
     4     &  grossismx, grossismy, dzoomx, dzoomy,taux,tauy
     5       COMMON/serre/clon,clat,transx,transy,alphax,alphay,pxo,pyo ,     &
     6     &  grossismx, grossismy, dzoomx, dzoomy,taux,tauy
  • trunk/LMDZ.GENERIC/libf/dynlonlat_phylonlat/phystd/datareadnc.F

    r1401 r1403  
    188188c    initialisation
    189189c-----------------------------------------------------------------------
    190       call initial0(iimp1*jjp1,pfield)
    191       call initial0(imd*jmdp1,zdata)
    192       call initial0(imdp1*jmdp1,zdataS)
     190      pfield(1:iimp1*jjp1)=0
     191      zdata(1:imd*jmdp1)=0
     192      zdataS(1:iimp1*jjp1)=0
    193193
    194194c-----------------------------------------------------------------------
     
    208208      if (k.eq.4) then
    209209
    210           call multscal(imd*jmdp1,zdata,1000.,zdata)
    211           call multscal(imd,longitude,pi/180.,longitude)
    212           call multscal(jmdp1,latitude,pi/180.,latitude)
     210          zdata(:)=1000.*zdata(:)
     211          longitude(:)=(pi/180.)*longitude(:)
     212          latitude(:)=(pi/180.)*latitude(:)
    213213
    214214          call grid_noro1(360, 180, longitude, latitude, zdata,
     
    261261      elseif (k.eq.3) then                ! relief
    262262        if (relief.eq.'pla') then
    263               call initial0(iimp1*jjp1,phisinit)
     263             phisinit(1:iimp1*jjp1)=0
    264264        else
    265              do i=1,iimp1*jjp1
    266                   phisinit(i) = pfield(i)
    267               enddo
     265             phisinit(1:iimp1*jjp1)=pfield(1:iimp1*jjp1)
    268266        endif
    269267      endif
     
    275273c-----------------------------------------------------------------------
    276274
    277       DO i=1,iimp1*jjp1
    278             phisinit(i)=1000.*phisinit(i)
    279       ENDDO
     275      phisinit(1:iimp1*jjp1)=1000.*phisinit(1:iimp1*jjp1)
    280276      !CALL dump2d(iimp1,jjp1,phisinit,'Altitude en m')
    281       CALL multscal(iimp1*jjp1,phisinit,g,phisinit)
     277      phisinit(:)=g*phisinit(:)
    282278
    283279c-----------------------------------------------------------------------
  • trunk/LMDZ.GENERIC/libf/dynlonlat_phylonlat/phystd/newstart.F

    r1401 r1403  
    3030      use comgeomphy, only: initcomgeomphy
    3131      use slab_ice_h, only:noceanmx
     32      use filtreg_mod, only: inifilr
    3233      implicit none
    3334
  • trunk/LMDZ.GENERIC/libf/dynlonlat_phylonlat/phystd/start2archive.F

    r1401 r1403  
    2929      USE planete_mod, only: year_day
    3030      USE callkeys_mod, ONLY: ok_slab_ocean
    31 
     31      use filtreg_mod, only: inifilr
    3232      implicit none
    3333
  • trunk/LMDZ.GENERIC/libf/filtrez/coefils.h

    r135 r1403  
    1       COMMON/coefils/jfiltnu,jfiltsu,jfiltnv,jfiltsv,sddu(iim),sddv(iim)
    2      * ,unsddu(iim),unsddv(iim),coefilu(iim,jjm),coefilv(iim,jjm),
    3      * modfrstu(jjm),modfrstv(jjm),eignfnu(iim,iim),eignfnv(iim,iim)
    4      * ,coefilu2(iim,jjm),coefilv2(iim,jjm)
    5 c
     1      COMMON/coefils/jfiltnu,jfiltsu,jfiltnv,jfiltsv,sddu(iim),sddv(iim)&
     2     & ,unsddu(iim),unsddv(iim),coefilu(iim,jjm),coefilv(iim,jjm),      &
     3     & modfrstu(jjm),modfrstv(jjm),eignfnu(iim,iim),eignfnv(iim,iim)    &
     4     & ,coefilu2(iim,jjm),coefilv2(iim,jjm)
     5!c
    66      INTEGER jfiltnu,jfiltsu,jfiltnv,jfiltsv,modfrstu,modfrstv
    77      REAL    sddu,sddv,unsddu,unsddv,coefilu,coefilv,eignfnu,eignfnv
  • trunk/LMDZ.GENERIC/libf/filtrez/filtreg_mod.F90

    r1401 r1403  
     1MODULE filtreg_mod
     2
     3CONTAINS
     4
    15      SUBROUTINE inifilr
    2 c
    3 c    ... H. Upadhyaya, O.Sharma   ...
    4 c
     6!
     7!    ... H. Upadhyaya, O.Sharma   ...
     8!
    59      IMPLICIT NONE
    6 c
    7 c     version 3 .....
    8 
    9 c     Correction  le 28/10/97    P. Le Van .
    10 c  -------------------------------------------------------------------
     10!
     11!     version 3 .....
     12
     13!     Correction  le 28/10/97    P. Le Van .
     14!  -------------------------------------------------------------------
    1115#include "dimensions.h"
    1216#include "paramet.h"
    1317#include "parafilt.h"
    14 c  -------------------------------------------------------------------
     18!  -------------------------------------------------------------------
    1519#include "comgeom.h"
    1620#include "coefils.h"
     
    2024      REAL  dlonu(iim),dlatu(jjm)
    2125      REAL  rlamda( iim ),  eignvl( iim )
    22 c
     26!
    2327
    2428      REAL    lamdamax,pi,cof
     
    2630      REAL dymin,dxmin,colat0
    2731      REAL eignft(iim,iim), coff
    28       REAL matriceun,matriceus,matricevn,matricevs,matrinvn,matrinvs
    29       COMMON/matrfil/matriceun(iim,iim,nfilun),matriceus(iim,iim,nfilus)
    30      ,             , matricevn(iim,iim,nfilvn),matricevs(iim,iim,nfilvs)
    31      ,             ,  matrinvn(iim,iim,nfilun),matrinvs (iim,iim,nfilus)
     32      REAL matriceun,matriceus,matricevn,matricevs,matrinvn,matrinvs 
     33      COMMON/matrfil/matriceun(iim,iim,nfilun),matriceus(iim,iim,nfilus) &
     34                   , matricevn(iim,iim,nfilvn),matricevs(iim,iim,nfilvs) &
     35                   ,  matrinvn(iim,iim,nfilun),matrinvs (iim,iim,nfilus)
    3236#ifdef CRAY
    3337      INTEGER   ISMIN
     
    3741#endif
    3842      EXTERNAL  inifgn
    39 c
    40 c ------------------------------------------------------------
    41 c   This routine computes the eigenfunctions of the laplacien
    42 c   on the stretched grid, and the filtering coefficients
    43 c     
    44 c  We designate:
    45 c   eignfn   eigenfunctions of the discrete laplacien
    46 c   eigenvl  eigenvalues
    47 c   jfiltn   indexof the last scalar line filtered in NH
    48 c   jfilts   index of the first line filtered in SH
    49 c   modfrst  index of the mode from where modes are filtered
    50 c   modemax  maximum number of modes ( im )
    51 c   coefil   filtering coefficients ( lamda_max*cos(rlat)/lamda )
    52 c   sdd      SQRT( dx )
    53 c     
    54 c     the modes are filtered from modfrst to modemax
    55 c     
    56 c-----------------------------------------------------------
    57 c
     43!
     44! ------------------------------------------------------------
     45!   This routine computes the eigenfunctions of the laplacien
     46!   on the stretched grid, and the filtering coefficients
     47!     
     48!  We designate:
     49!   eignfn   eigenfunctions of the discrete laplacien
     50!   eigenvl  eigenvalues
     51!   jfiltn   indexof the last scalar line filtered in NH
     52!   jfilts   index of the first line filtered in SH
     53!   modfrst  index of the mode from where modes are filtered
     54!   modemax  maximum number of modes ( im )
     55!   coefil   filtering coefficients ( lamda_max*cos(rlat)/lamda )
     56!   sdd      SQRT( dx )
     57!     
     58!     the modes are filtered from modfrst to modemax
     59     
     60!-----------------------------------------------------------
     61!
    5862
    5963       pi       = 2. * ASIN( 1. )
     
    6266        dlonu(i) = xprimu( i )
    6367       ENDDO
    64 c
     68!
    6569       CALL inifgn(eignvl)
    66 c
     70!
    6771        print *,' EIGNVL '
    6872        PRINT 250,eignvl
    6973250     FORMAT( 1x,5e13.6)
    70 c
    71 c compute eigenvalues and eigenfunctions
    72 c
    73 c
    74 c.................................................................
    75 c
    76 c  compute the filtering coefficients for scalar lines and
    77 c  meridional wind v-lines
    78 c
    79 c  we filter all those latitude lines where coefil < 1
    80 c  NO FILTERING AT POLES
    81 c
    82 c  colat0 is to be used  when alpha (stretching coefficient)
    83 c  is set equal to zero for the regular grid case
    84 c
    85 c    .......   Calcul  de  colat0   .........
    86 c     .....  colat0 = minimum de ( 0.5, min dy/ min dx )   ...
    87 c
    88 c
     74!
     75! compute eigenvalues and eigenfunctions
     76!
     77!
     78!.................................................................
     79!
     80!  compute the filtering coefficients for scalar lines and
     81!  meridional wind v-lines
     82!
     83!  we filter all those latitude lines where coefil < 1
     84!  NO FILTERING AT POLES
     85!
     86!  colat0 is to be used  when alpha (stretching coefficient)
     87!  is set equal to zero for the regular grid case
     88!
     89!    .......   Calcul  de  colat0   .........
     90!     .....  colat0 = minimum de ( 0.5, min dy/ min dx )   ...
     91!
     92!
    8993      DO 45 j = 1,jjm
    9094         dlatu( j ) = rlatu( j ) - rlatu( j+1 )
    9195 45   CONTINUE
    92 c
     96!
    9397#ifdef CRAY
    9498      iymin   = ISMIN( jjm, dlatu, 1 )
     
    106110       ENDDO
    107111#endif
    108 c
    109 c
     112!
     113!
    110114      colat0  =  MIN( 0.5, dymin/dxmin )
    111 c
     115!
    112116      IF( .NOT.fxyhypb.AND.ysinus )  THEN
    113117           colat0 = 0.6
    114 c         ...... a revoir  pour  ysinus !   .......
     118!         ...... a revoir  pour  ysinus !   .......
    115119           alphax = 0.
    116120      ENDIF
    117 c
     121!
    118122      PRINT 50, colat0,alphax
    119123  50  FORMAT(/15x,' Inifilr colat0 alphax ',2e16.7)
    120 c
     124!
    121125      IF(alphax.EQ.1. )  THEN
    122126        PRINT *,' Inifilr  alphax doit etre  <  a 1.  Corriger '
    123127         STOP
    124128      ENDIF
    125 c
     129!
    126130      lamdamax = iim / ( pi * colat0 * ( 1. - alphax ) )
    127131
    128 cc                        ... Correction  le 28/10/97  ( P.Le Van ) ..
    129 c
     132!c                        ... Correction  le 28/10/97  ( P.Le Van ) ..
     133!
    130134      DO 71 i = 2,iim
    131135       rlamda( i ) = lamdamax/ SQRT( ABS( eignvl(i) ) )
    132136 71   CONTINUE
    133 c
     137!
    134138
    135139      DO 72 j = 1,jjm
     
    142146 72   CONTINUE
    143147
    144 c
    145 c    ... Determination de jfiltnu,jfiltnv,jfiltsu,jfiltsv ....
    146 c    .........................................................
    147 c
     148!
     149!    ... Determination de jfiltnu,jfiltnv,jfiltsu,jfiltsv ....
     150!    .........................................................
     151!
    148152       modemax = iim
    149153
    150 cccc    imx = modemax - 4 * (modemax/iim)
     154!ccc    imx = modemax - 4 * (modemax/iim)
    151155
    152156       imx  = iim
    153 c
     157!
    154158       PRINT *,' TRUNCATION AT ',imx
    155 c
     159!
    156160      DO 75 j = 2, jjm/2+1
    157161       cof = COS( rlatu(j) )/ colat0
     
    162166       cof = COS( rlatu(jjp1-j+1) )/ colat0
    163167            IF ( cof .LT. 1. ) THEN
    164           IF( rlamda(imx) * COS(rlatu(jjp1-j+1) ).LT.1. )
    165      $      jfiltsu= jjp1-j+1
     168          IF( rlamda(imx) * COS(rlatu(jjp1-j+1) ).LT.1. ) &
     169            jfiltsu= jjp1-j+1
    166170        ENDIF
    167171 75   CONTINUE
    168 c
     172!
    169173      DO 76 j = 1, jjm/2
    170174       cof = COS( rlatv(j) )/ colat0
     
    175179       cof = COS( rlatv(jjm-j+1) )/ colat0
    176180            IF ( cof .LT. 1. ) THEN
    177           IF( rlamda(imx) * COS(rlatv(jjm-j+1) ).LT.1. )
    178      $       jfiltsv= jjm-j+1
     181          IF( rlamda(imx) * COS(rlatv(jjm-j+1) ).LT.1. ) &
     182             jfiltsv= jjm-j+1
    179183        ENDIF
    180184 76   CONTINUE
    181 c                                 
     185!                                 
    182186
    183187      IF( jfiltnu.LE.0 .OR. jfiltnu.GT. jjm/2 +1 )  THEN
     
    201205      ENDIF
    202206
    203        PRINT *,' jfiltnv jfiltsv jfiltnu jfiltsu ' ,
    204      *           jfiltnv,jfiltsv,jfiltnu,jfiltsu
    205 
    206 c                                 
    207 c   ... Determination de coefilu,coefilv,n=modfrstu,modfrstv ....
    208 c................................................................
    209 c
    210 c
     207       PRINT *,' jfiltnv jfiltsv jfiltnu jfiltsu ' , &
     208                 jfiltnv,jfiltsv,jfiltnu,jfiltsu
     209
     210!                                 
     211!   ... Determination de coefilu,coefilv,n=modfrstu,modfrstv ....
     212!................................................................
     213!
     214!
    211215      DO 77 j = 1,jjm
    212216          modfrstu( j ) = iim
    213217          modfrstv( j ) = iim
    214218 77   CONTINUE
    215 c
     219!
    216220      DO 84 j = 2,jfiltnu
    217221       DO 81 k = 2,modemax
     
    221225      GOTO 84
    222226 82   modfrstu( j ) = k
    223 c
     227!
    224228          kf = modfrstu( j )
    225229           DO 83 k = kf , modemax
     
    229233 83    CONTINUE
    230234 84   CONTINUE
    231 c                                 
    232 c
     235!                                 
     236!
    233237      DO 89 j = 1,jfiltnv
    234 c
     238!
    235239       DO 86 k = 2,modemax
    236240            cof = rlamda(k) * COS( rlatv(j) )
     
    239243      GOTO 89
    240244 87   modfrstv( j ) = k
    241 c
     245!
    242246           kf = modfrstv( j )
    243247           DO 88 k = kf , modemax
     
    246250            coefilv2(k,j) = cof*cof - 1.
    247251 88    CONTINUE
    248 c
     252!
    249253 89    CONTINUE
    250 c
     254!
    251255      DO 94 j = jfiltsu,jjm
    252256       DO 91 k = 2,modemax
     
    256260      GOTO 94
    257261 92   modfrstu( j ) = k
    258 c
     262!
    259263        kf = modfrstu( j )
    260264         DO 93 k = kf , modemax
     
    264268 93      CONTINUE
    265269 94    CONTINUE
    266 c                                 
     270!                                 
    267271      DO 99 j = jfiltsv,jjm
    268272       DO 96 k = 2,modemax
     
    272276      GOTO 99
    273277 97   modfrstv( j ) = k
    274 c
     278!
    275279       kf = modfrstv( j )
    276280           DO 98 k = kf , modemax
     
    280284 98    CONTINUE
    281285 99   CONTINUE
    282 c
     286!
    283287
    284288       IF(jfiltnv.GE.jjm/2 .OR. jfiltnu.GE.jjm/2)THEN
     
    287291         IF(jfiltnu.EQ.jfiltsu)jfiltsu=1+jfiltnu
    288292
    289           PRINT *,'jfiltnv jfiltsv jfiltnu jfiltsu' ,
    290      *        jfiltnv,jfiltsv,jfiltnu,jfiltsu
     293          PRINT *,'jfiltnv jfiltsv jfiltnu jfiltsu' , &
     294              jfiltnv,jfiltsv,jfiltnu,jfiltsu
    291295       ENDIF
    292296
     
    298302     
    299303      IF( nfilun.LT. jfiltnu )  THEN
    300        PRINT *,' le parametre nfilun utilise pour la matrice ',
    301      *   ' matriceun  est trop petit ! '
     304       PRINT *,' le parametre nfilun utilise pour la matrice ', &
     305         ' matriceun  est trop petit ! '
    302306       PRINT *,'Le changer dans parafilt.h et le mettre a  ',jfiltnu
    303         PRINT *,' Pour information, nfilun,nfilus,nfilvn,nfilvs '
    304      * ,'doivent etre egaux successivement a  ',jfiltnu,jjm-jfiltsu+1
    305      *  ,jfiltnv,jjm-jfiltsv+1
     307        PRINT *,' Pour information, nfilun,nfilus,nfilvn,nfilvs ' &
     308       ,'doivent etre egaux successivement a  ',jfiltnu,jjm-jfiltsu+1 &
     309        ,jfiltnv,jjm-jfiltsv+1
    306310               STOP
    307311      ENDIF
    308312      IF( nfilun.GT. jfiltnu+ 2 )  THEN
    309            PRINT *,' le parametre nfilun utilise pour la matrice ',
    310      *' matriceun est trop grand ! Gachis de memoire ! '
     313           PRINT *,' le parametre nfilun utilise pour la matrice ', &
     314      ' matriceun est trop grand ! Gachis de memoire ! '
    311315       PRINT *,'Le changer dans parafilt.h et le mettre a  ',jfiltnu
    312         PRINT *,' Pour information, nfilun,nfilus,nfilvn,nfilvs '
    313      * ,'doivent etre egaux successivement a  ',jfiltnu,jjm-jfiltsu+1
    314      *  ,jfiltnv,jjm-jfiltsv+1
    315 c              STOP
     316        PRINT *,' Pour information, nfilun,nfilus,nfilvn,nfilvs ' &
     317       ,'doivent etre egaux successivement a  ',jfiltnu,jjm-jfiltsu+1 &
     318        ,jfiltnv,jjm-jfiltsv+1
     319!              STOP
    316320      ENDIF
    317321      IF( nfilus.LT. jjm - jfiltsu +1 )  THEN
    318             PRINT *,' le parametre nfilus utilise pour la matrice ',
    319      *   ' matriceus  est trop petit !  '
    320        PRINT *,' Le changer dans parafilt.h et le mettre a  ',
    321      * jjm - jfiltsu + 1
    322         PRINT *,' Pour information , nfilun,nfilus,nfilvn,nfilvs '
    323      * ,'doivent etre egaux successivement a  ',jfiltnu,jjm-jfiltsu+1
    324      *  ,jfiltnv,jjm-jfiltsv+1
     322            PRINT *,' le parametre nfilus utilise pour la matrice ', &
     323         ' matriceus  est trop petit !  '
     324       PRINT *,' Le changer dans parafilt.h et le mettre a  ', &
     325       jjm - jfiltsu + 1
     326        PRINT *,' Pour information , nfilun,nfilus,nfilvn,nfilvs ' &
     327       ,'doivent etre egaux successivement a  ',jfiltnu,jjm-jfiltsu+1 &
     328        ,jfiltnv,jjm-jfiltsv+1
    325329               STOP
    326330      ENDIF
    327331      IF( nfilus.GT. jjm - jfiltsu + 3 )  THEN
    328            PRINT *,' le parametre nfilus utilise pour la matrice ',
    329      * ' matriceus  est trop grand ! '
    330        PRINT *,' Le changer dans parafilt.h et le mettre a  ' ,
    331      * jjm - jfiltsu + 1
    332         PRINT *,' Pour information , nfilun,nfilus,nfilvn,nfilvs '
    333      * ,'doivent etre egaux successivement a  ',jfiltnu,jjm-jfiltsu+1
    334      *  ,jfiltnv,jjm-jfiltsv+1
    335 c              STOP
     332           PRINT *,' le parametre nfilus utilise pour la matrice ', &
     333       ' matriceus  est trop grand ! '
     334       PRINT *,' Le changer dans parafilt.h et le mettre a  ' , &
     335       jjm - jfiltsu + 1
     336        PRINT *,' Pour information , nfilun,nfilus,nfilvn,nfilvs ' &
     337       ,'doivent etre egaux successivement a  ',jfiltnu,jjm-jfiltsu+1 &
     338        ,jfiltnv,jjm-jfiltsv+1
     339!              STOP
    336340      ENDIF
    337341      IF( nfilvn.LT. jfiltnv )  THEN
    338             PRINT *,' le parametre nfilvn utilise pour la matrice ',
    339      *   ' matricevn  est trop petit ! ' 
     342            PRINT *,' le parametre nfilvn utilise pour la matrice ', &
     343         ' matricevn  est trop petit ! ' 
    340344       PRINT *,'Le changer dans parafilt.h et le mettre a  ',jfiltnv
    341         PRINT *,' Pour information , nfilun,nfilus,nfilvn,nfilvs '
    342      * ,'doivent etre egaux successivement a  ',jfiltnu,jjm-jfiltsu+1
    343      *  ,jfiltnv,jjm-jfiltsv+1
     345        PRINT *,' Pour information , nfilun,nfilus,nfilvn,nfilvs ' &
     346       ,'doivent etre egaux successivement a  ',jfiltnu,jjm-jfiltsu+1 &
     347        ,jfiltnv,jjm-jfiltsv+1
    344348               STOP
    345349      ENDIF
    346350      IF( nfilvn.GT. jfiltnv+ 2 )  THEN
    347            PRINT *,' le parametre nfilvn utilise pour la matrice ',
    348      *' matricevn est trop grand !  Gachis de memoire ! '
     351           PRINT *,' le parametre nfilvn utilise pour la matrice ', &
     352      ' matricevn est trop grand !  Gachis de memoire ! '
    349353       PRINT *,'Le changer dans parafilt.h et le mettre a  ',jfiltnv
    350         PRINT *,' Pour information , nfilun,nfilus,nfilvn,nfilvs '
    351      * ,'doivent etre egaux successivement a  ',jfiltnu,jjm-jfiltsu+1
    352      *  ,jfiltnv,jjm-jfiltsv+1
    353 c              STOP
     354        PRINT *,' Pour information , nfilun,nfilus,nfilvn,nfilvs ' &
     355       ,'doivent etre egaux successivement a  ',jfiltnu,jjm-jfiltsu+1 &
     356        ,jfiltnv,jjm-jfiltsv+1
     357!              STOP
    354358      ENDIF
    355359      IF( nfilvs.LT. jjm - jfiltsv +1 )  THEN
    356             PRINT *,' le parametre nfilvs utilise pour la matrice ',
    357      *   ' matricevs  est trop petit !  Le changer dans parafilt.h '
    358        PRINT *,' Le changer dans parafilt.h et le mettre a  '
    359      * , jjm - jfiltsv + 1
    360         PRINT *,' Pour information , nfilun,nfilus,nfilvn,nfilvs '
    361      * ,'doivent etre egaux successivement a  ',jfiltnu,jjm-jfiltsu+1
    362      *  ,jfiltnv,jjm-jfiltsv+1
     360            PRINT *,' le parametre nfilvs utilise pour la matrice ', &
     361         ' matricevs  est trop petit !  Le changer dans parafilt.h '
     362       PRINT *,' Le changer dans parafilt.h et le mettre a  ' &
     363       , jjm - jfiltsv + 1
     364        PRINT *,' Pour information , nfilun,nfilus,nfilvn,nfilvs ' &
     365       ,'doivent etre egaux successivement a  ',jfiltnu,jjm-jfiltsu+1 &
     366        ,jfiltnv,jjm-jfiltsv+1
    363367               STOP
    364368      ENDIF
    365369      IF( nfilvs.GT. jjm - jfiltsv + 3 )  THEN
    366            PRINT *,' le parametre nfilvs utilise pour la matrice ',
    367      * ' matricevs  est trop grand ! Gachis de memoire ! '
    368        PRINT *,' Le changer dans parafilt.h et le mettre a  '
    369      *   ,  jjm - jfiltsv + 1
    370         PRINT *,' Pour information , nfilun,nfilus,nfilvn,nfilvs '
    371      * ,'doivent etre egaux successivement a  ',jfiltnu,jjm-jfiltsu+1
    372      *  ,jfiltnv,jjm-jfiltsv+1
    373 c              STOP
    374       ENDIF
    375 
    376 c 
    377 c   ...................................................................
    378 c
    379 c   ... Calcul de la matrice filtre 'matriceu'  pour les champs situes
    380 c                       sur la grille scalaire                 ........
    381 c   ...................................................................
    382 c
     370           PRINT *,' le parametre nfilvs utilise pour la matrice ', &
     371       ' matricevs  est trop grand ! Gachis de memoire ! '
     372       PRINT *,' Le changer dans parafilt.h et le mettre a  ' &
     373         ,  jjm - jfiltsv + 1
     374        PRINT *,' Pour information , nfilun,nfilus,nfilvn,nfilvs ' &
     375       ,'doivent etre egaux successivement a  ',jfiltnu,jjm-jfiltsu+1 &
     376        ,jfiltnv,jjm-jfiltsv+1
     377!              STOP
     378      ENDIF
     379
     380! 
     381!   ...................................................................
     382!
     383!   ... Calcul de la matrice filtre 'matriceu'  pour les champs situes
     384!                       sur la grille scalaire                 ........
     385!   ...................................................................
     386!
    383387        DO j = 2, jfiltnu
    384388
     
    394398#else
    395399#ifdef BLAS
    396          CALL SGEMM ('N', 'N', iim, iim, iim, 1.0,
    397      $   eignfnv, iim, eignft, iim, 0.0, matriceun(1,1,j), iim)
     400         CALL SGEMM ('N', 'N', iim, iim, iim, 1.0, &
     401         eignfnv, iim, eignft, iim, 0.0, matriceun(1,1,j), iim)
    398402#else
    399403         DO k = 1, iim
     
    401405            matriceun(i,k,j) = 0.0
    402406            DO ii = 1, iim
    403                matriceun(i,k,j) = matriceun(i,k,j)
    404      .                          + eignfnv(i,ii)*eignft(ii,k)
     407               matriceun(i,k,j) = matriceun(i,k,j) &
     408                                + eignfnv(i,ii)*eignft(ii,k)
    405409            ENDDO
    406410         ENDDO
     
    424428#else
    425429#ifdef BLAS
    426       CALL SGEMM ('N', 'N', iim, iim, iim, 1.0,
    427      $           eignfnv, iim, eignft, iim, 0.0,
    428      $           matriceus(1,1,j-jfiltsu+1), iim)
     430      CALL SGEMM ('N', 'N', iim, iim, iim, 1.0, &
     431                 eignfnv, iim, eignft, iim, 0.0, &
     432                 matriceus(1,1,j-jfiltsu+1), iim)
    429433#else
    430434         DO k = 1, iim
     
    432436            matriceus(i,k,j-jfiltsu+1) = 0.0
    433437            DO ii = 1, iim
    434                matriceus(i,k,j-jfiltsu+1) = matriceus(i,k,j-jfiltsu+1)
    435      .                                    + eignfnv(i,ii)*eignft(ii,k)
     438               matriceus(i,k,j-jfiltsu+1) = matriceus(i,k,j-jfiltsu+1) &
     439                                          + eignfnv(i,ii)*eignft(ii,k)
    436440            ENDDO
    437441         ENDDO
     
    442446        ENDDO
    443447
    444 c   ...................................................................
    445 c
    446 c   ... Calcul de la matrice filtre 'matricev'  pour les champs situes
    447 c                       sur la grille   de V ou de Z           ........
    448 c   ...................................................................
    449 c
     448!   ...................................................................
     449!
     450!   ... Calcul de la matrice filtre 'matricev'  pour les champs situes
     451!                       sur la grille   de V ou de Z           ........
     452!   ...................................................................
     453!
    450454        DO j = 1, jfiltnv
    451455
     
    461465#else
    462466#ifdef BLAS
    463       CALL SGEMM ('N', 'N', iim, iim, iim, 1.0,
    464      $     eignfnu, iim, eignft, iim, 0.0, matricevn(1,1,j), iim)
     467      CALL SGEMM ('N', 'N', iim, iim, iim, 1.0, &
     468           eignfnu, iim, eignft, iim, 0.0, matricevn(1,1,j), iim)
    465469#else
    466470         DO k = 1, iim
     
    468472            matricevn(i,k,j) = 0.0
    469473            DO ii = 1, iim
    470                matricevn(i,k,j) = matricevn(i,k,j)
    471      .                          + eignfnu(i,ii)*eignft(ii,k)
     474               matricevn(i,k,j) = matricevn(i,k,j) &
     475                                + eignfnu(i,ii)*eignft(ii,k)
    472476            ENDDO
    473477         ENDDO
     
    491495#else
    492496#ifdef BLAS
    493       CALL SGEMM ('N', 'N', iim, iim, iim, 1.0,
    494      $           eignfnu, iim, eignft, iim, 0.0,
    495      $           matricevs(1,1,j-jfiltsv+1), iim)
     497      CALL SGEMM ('N', 'N', iim, iim, iim, 1.0, &
     498                 eignfnu, iim, eignft, iim, 0.0, &
     499                 matricevs(1,1,j-jfiltsv+1), iim)
    496500#else
    497501         DO k = 1, iim
     
    499503            matricevs(i,k,j-jfiltsv+1) = 0.0
    500504            DO ii = 1, iim
    501                matricevs(i,k,j-jfiltsv+1) = matricevs(i,k,j-jfiltsv+1)
    502      .                          + eignfnu(i,ii)*eignft(ii,k)
     505               matricevs(i,k,j-jfiltsv+1) = matricevs(i,k,j-jfiltsv+1) &
     506                                + eignfnu(i,ii)*eignft(ii,k)
    503507            ENDDO
    504508         ENDDO
     
    509513        ENDDO
    510514
    511 c   ...................................................................
    512 c
    513 c   ... Calcul de la matrice filtre 'matrinv'  pour les champs situes
    514 c              sur la grille scalaire , pour le filtre inverse ........
    515 c   ...................................................................
    516 c
     515!   ...................................................................
     516!
     517!   ... Calcul de la matrice filtre 'matrinv'  pour les champs situes
     518!              sur la grille scalaire , pour le filtre inverse ........
     519!   ...................................................................
     520!
    517521        DO j = 2, jfiltnu
    518522
     
    528532#else
    529533#ifdef BLAS
    530       CALL SGEMM ('N', 'N', iim, iim, iim, 1.0,
    531      $     eignfnv, iim, eignft, iim, 0.0, matrinvn(1,1,j), iim)
     534      CALL SGEMM ('N', 'N', iim, iim, iim, 1.0, &
     535           eignfnv, iim, eignft, iim, 0.0, matrinvn(1,1,j), iim)
    532536#else
    533537         DO k = 1, iim
     
    535539            matrinvn(i,k,j) = 0.0
    536540            DO ii = 1, iim
    537                matrinvn(i,k,j) = matrinvn(i,k,j)
    538      .                          + eignfnv(i,ii)*eignft(ii,k)
     541               matrinvn(i,k,j) = matrinvn(i,k,j) &
     542                                + eignfnv(i,ii)*eignft(ii,k)
    539543            ENDDO
    540544         ENDDO
     
    558562#else
    559563#ifdef BLAS
    560       CALL SGEMM ('N', 'N', iim, iim, iim, 1.0,
    561      $ eignfnv, iim, eignft, iim, 0.0, matrinvs(1,1,j-jfiltsu+1), iim)
     564      CALL SGEMM ('N', 'N', iim, iim, iim, 1.0, &
     565       eignfnv, iim, eignft, iim, 0.0, matrinvs(1,1,j-jfiltsu+1), iim)
    562566#else
    563567         DO k = 1, iim
     
    565569            matrinvs(i,k,j-jfiltsu+1) = 0.0
    566570            DO ii = 1, iim
    567                matrinvs(i,k,j-jfiltsu+1) = matrinvs(i,k,j-jfiltsu+1)
    568      .                          + eignfnv(i,ii)*eignft(ii,k)
     571               matrinvs(i,k,j-jfiltsu+1) = matrinvs(i,k,j-jfiltsu+1) &
     572                                + eignfnv(i,ii)*eignft(ii,k)
    569573            ENDDO
    570574         ENDDO
     
    575579        ENDDO
    576580
    577 c   ...................................................................
    578 
    579 c
     581!   ...................................................................
     582
     583!
    580584334    FORMAT(1x,24i3)
    581585755    FORMAT(1x,6f10.3,i3)
    582586
    583587       RETURN
    584        END
     588       END SUBROUTINE inifilr
     589
     590END MODULE  filtreg_mod
  • trunk/LMDZ.GENERIC/libf/filtrez/parafilt.h

    r253 r1403  
    11        INTEGER nfilun, nfilus, nfilvn, nfilvs
    2 c
    3 c 48 32 19 non-zoom:
    4 c       PARAMETER (nfilun=30,nfilus=30,nfilvn=30,nfilvs=30)
    5 c        PARAMETER (nfilun=6, nfilus=5, nfilvn=5, nfilvs=5)
    6 c         PARAMETER (nfilun=15, nfilus=8, nfilvn=14, nfilvs=8)
    7 c        PARAMETER (nfilun=24, nfilus=23, nfilvn=24, nfilvs=24)
    8 cmaf -debug  PARAMETER (nfilun=2, nfilus=1, nfilvn=2, nfilvs=2)
    9 c
    10 c
    11 c 96 49 11 non-zoom:
    12 ccc      PARAMETER (nfilun=9, nfilus=8, nfilvn=8, nfilvs=8)
    13 c
    14 c
    15 c 144 73 11 non-zoom:
    16 ccc      PARAMETER (nfilun=13, nfilus=12, nfilvn=12, nfilvs=12)
    17 c
    18 c 192 143 19 non-zoom:
    19 c             PARAMETER (nfilun=13, nfilus=12, nfilvn=13, nfilvs=13)
    20 c      PARAMETER (nfilun=15, nfilus=14, nfilvn=14, nfilvs=14) !!NO fxyhyper
    21 c      PARAMETER (nfilun=18, nfilus=17, nfilvn=17, nfilvs=17) !!NO fxyhyper
     2!
     3! 48 32 19 non-zoom:
     4!       PARAMETER (nfilun=30,nfilus=30,nfilvn=30,nfilvs=30)
     5!        PARAMETER (nfilun=6, nfilus=5, nfilvn=5, nfilvs=5)
     6!         PARAMETER (nfilun=15, nfilus=8, nfilvn=14, nfilvs=8)
     7!        PARAMETER (nfilun=24, nfilus=23, nfilvn=24, nfilvs=24)
     8!maf -debug  PARAMETER (nfilun=2, nfilus=1, nfilvn=2, nfilvs=2)
     9!
     10!
     11! 96 49 11 non-zoom:
     12!cc      PARAMETER (nfilun=9, nfilus=8, nfilvn=8, nfilvs=8)
     13!
     14!
     15! 144 73 11 non-zoom:
     16!cc      PARAMETER (nfilun=13, nfilus=12, nfilvn=12, nfilvs=12)
     17!
     18! 192 143 19 non-zoom:
     19!             PARAMETER (nfilun=13, nfilus=12, nfilvn=13, nfilvs=13)
     20!      PARAMETER (nfilun=15, nfilus=14, nfilvn=14, nfilvs=14) !!NO fxyhyper
     21!      PARAMETER (nfilun=18, nfilus=17, nfilvn=17, nfilvs=17) !!NO fxyhyper
    2222!!        PARAMETER (nfilun=9,nfilus=8,nfilvn=8,nfilvs=8)
    23 !        PARAMETER (nfilun=9,nfilus=9,nfilvn=9,nfilvs=9)
     23        PARAMETER (nfilun=9,nfilus=9,nfilvn=9,nfilvs=9)
     24! 96 72 19 non-zoom:
     25!cc      PARAMETER (nfilun=12, nfilus=11, nfilvn=12, nfilvs=12)
     26!
     27!        PARAMETER ( nfilun=20, nfilus=20, nfilvn=20, nfilvs=20 )
     28!       PARAMETER ( nfilun=8, nfilus=7, nfilvn=7, nfilvs=7 )
     29!
     30!
     31!      Ici , on a exagere  les nombres de lignes de latitudes a filtrer .
     32!
     33!      La premiere fois que  le Gcm  rentrera  dans le Filtre ,
     34!
     35!      il indiquera  les bonnes valeurs  de  nfilun , nflius, nfilvn  et
     36!
     37!      nfilvs  a  mettre .  Il suffira alors de changer ces valeurs dans
     38!
     39!      Parameter  ci-dessus  et de relancer  le  run . 
    2440
    25         PARAMETER (nfilun=11,nfilus=11,nfilvn=11,nfilvs=11)
    26 !        PARAMETER (nfilun=12,nfilus=12,nfilvn=12,nfilvs=12)
    27 
    28 
    29 c 96 72 19 non-zoom:
    30 ccc      PARAMETER (nfilun=12, nfilus=11, nfilvn=12, nfilvs=12)
    31 c
    32 c        PARAMETER ( nfilun=20, nfilus=20, nfilvn=20, nfilvs=20 )
    33 c        PARAMETER ( nfilun=8, nfilus=7, nfilvn=7, nfilvs=7 )
    34 c
    35 c
    36 c      Ici , on a exagere  les nombres de lignes de latitudes a filtrer .
    37 c
    38 c      La premiere fois que  le Gcm  rentrera  dans le Filtre ,
    39 c
    40 c      il indiquera  les bonnes valeurs  de  nfilun , nflius, nfilvn  et
    41 c
    42 c      nfilvs  a  mettre .  Il suffira alors de changer ces valeurs dans
    43 c
    44 c      Parameter  ci-dessus  et de relancer  le  run . 
    45 
  • trunk/LMDZ.GENERIC/libf/phystd/dyn1d/kcm1d.F90

    r1401 r1403  
    88  use comsaison_h, only: mu0, fract, dist_star
    99  use planete_mod
     10  use callkeys_mod, only: check_cpp_match, pceil, tstrat, tracer
    1011!  use control_mod
    1112  use comcstfi_mod
  • trunk/LMDZ.GENERIC/libf/phystd/dyn1d/rcm1d.F

    r1401 r1403  
    911911c     necessaire a la compilation de rcm1d en 1D
    912912
    913       subroutine gr_fi_dyn
    914       RETURN
    915       END
     913!      subroutine gr_fi_dyn
     914!      RETURN
     915!      END
    916916 
    917917c***********************************************************************
    918918c***********************************************************************
    919919
    920 #include "../dyn3d/disvert.F"
    921 #include "../dyn3d/abort_gcm.F"
    922 #include "../dyn3d/diverg.F"
    923 #include "../dyn3d/grad.F"
    924 #include "../dyn3d/gr_u_scal.F"
    925 #include "../dyn3d/gr_v_scal.F"
    926 #include "../dyn3d/gr_dyn_fi.F"
    927 
     920!#include "../dyn3d/disvert.F"
     921!#include "../dyn3d/abort_gcm.F"
     922!#include "../dyn3d/diverg.F"
     923!#include "../dyn3d/grad.F"
     924!#include "../dyn3d/gr_u_scal.F"
     925!#include "../dyn3d/gr_v_scal.F"
     926!#include "../dyn3d/gr_dyn_fi.F"
     927
  • trunk/LMDZ.GENERIC/makegcm_g95

    r1216 r1403  
    88set physique=std
    99set phys="PHYS=$physique"
    10 set include='-I$(LIBF)/grid -I$(LIBF)/bibio -I.'
     10set include='-I$(LIBF)/grid -I$(LIBF)/misc -I. -I$(LIBF)/dynlonlat_phylonlat'
    1111set ntrac = 1
    1212set filtre=filtrez
     
    1616set scatterers="1"
    1717set full=""
     18#src_dirs: directories containing source files
     19set src_dirs="grid misc"
     20
    1821########################################################################
    1922# path a changer contenant les sources et les objets du modele
     
    2528set scriptdir=`dirname $0`
    2629setenv LMDGCM `readlink -f $scriptdir`
    27 #setenv LMDGCM /u/emlmd/LMDZ.MARS
     30#setenv LMDGCM "/san/home/rdword/gcm/LMDZ.GENERIC"
    2831setenv LIBOGCM $LMDGCM/libo
    29 # NetCDF
    30 # 64 bit machines what is below is OK on LMD machines
    31   setenv NCDFLIB /donnees/emlmd/netcdf64-4.0.1_g95/lib
    32   setenv NCDFINC /donnees/emlmd/netcdf64-4.0.1_g95/include
    33 #else
    34 #  setenv NCDFLIB /distrib/local/netcdf/g95_32bits/lib
    35 #  setenv NCDFINC /distrib/local/netcdf/g95_32bits/include
    36 #endif
    37 ####
     32# NetCDF, on LMD computers:
     33setenv NCDFLIB /donnees/emlmd/netcdf64-4.0.1_g95/lib
     34setenv NCDFINC /donnees/emlmd/netcdf64-4.0.1_g95/include
     35#####
     36
     37
     38
    3839
    3940setenv localdir "`pwd`"
     
    120121   set machine=XNEC
    121122   set XNEC=1
     123else if ( `uname` == CYGWIN_NT-6.1-WOW64) then
     124   set machine=LINUX
     125   set LINUX=1
    122126else
    123127   echo Vous travaillez sur une machine non prevue par le reglement
     
    209213     set mod_loc_dir="./"
    210214   else
    211 ####     set opt_link=" -C hopt -float0 -ew -P static -L$IOIPSLDIR -lsxioipsl -L /u/rech/psl/rpsl003/IOIPSL -lnetcdf_i8r8_v -I$NCDFINC -L/SX/usr/local/lib -lnetcdf_i8r8"
    212215     set opt_link=" -C hopt -float0 -ew -P static -I$NCDFINC -L/SX/usr/local/lib -lnetcdf_i8r8"
    213216     set mod_loc_dir="."
     
    326329########################################################################
    327330
    328     case -d:
     331    case -d
    329332        set dim=$2 ; shift ; shift ; goto top
    330333                       
    331334    case -O:
    332         set optim90="$2" ; shift ; shift ; goto top
     335        set optim90="$2" ; set optim="$2" ; set optimtru90="$2" ; shift ; shift ; goto top
    333336
    334337     case -p
     
    391394endif
    392395
     396
    393397echo "apres les opts dim $dim"
    394398
     
    398402if ( "$physique" == 'nophys' ) then
    399403   set phys="L_PHY= LIBPHY="
    400 endif
    401 
     404else
     405   set src_dirs="$src_dirs phy$physique"
     406   set include="$include "' -I$(LIBF)/phy'"$physique"
     407endif
     408set libdyn_phy=""
     409set LIBDYN_PHYS=""
    402410########################################################################
    403411#subtilites sur le nom de la librairie
    404412########################################################################
     413
    405414
    406415\rm tmp ; touch tmp
     
    476485  set include="$include "'-I$(LIBF)/dyn2d '
    477486  set dimh=$dim
    478 else
     487endif
     488if ( "$dimc" == "3" ) then
    479489  if ( "$dyntype" == "olddyn" ) then
    480490    set include="$include "'-I$(LIBF)/olddyn3d '
     491    set src_dirs="$src_dirs olddyn3d dynlonlat_phylonlat dynlonlat_phylonlat/phy$physique"
    481492  else
    482493    set include="$include "'-I$(LIBF)/dyn3d '
     494    set src_dirs="$src_dirs dyn3d dynlonlat_phylonlat dynlonlat_phylonlat/phy$physique"
    483495  endif
     496  set libdyn_phy="-ldynlonlat_phylonlat"
     497  set LIBDYN_PHYS='$(LIBO)/libdynlonlat_phylonlat.a'
    484498  set dimh=`echo $dim | awk ' { print $1 "." $2 } '`
    485499endif
     
    554568## NB: we still need to have L_DYN=libdyn3d to reach routines and module
    555569## objects which are located in dyn3d
    556   set dyn="L_DYN=-ldyn3d DYN= L_FILTRE= DIRMAIN=phy$physique "
     570  set dyntype=""
     571  set filtre="L_DYN= DYN= FILTRE= L_FILTRE= "
     572  set dyn="L_DYN= DYN= L_FILTRE= "
     573  set dirmain="phy$physique/dyn1d"
     574  set src_dirs="$src_dirs phy$physique/dyn1d "
     575  set include="$include "' -I$(LIBF)/phy'"$physique"'/dyn1d'
    557576endif
    558577endif
     
    576595if ( `expr $dimc \> 2` == 1 ) then
    577596   set filtre="FILTRE=$filtre"
     597   if ( "$dyntype" == "olddyn" ) then
     598     set src_dirs="$src_dirs oldfiltrez"
     599   else
     600     set src_dirs="$src_dirs filtrez"
     601   endif
    578602else
    579    set filtre="FILTRE= L_FILTRE= "
     603   set filtre="FILTRE= L_FILTRE= L_DYN= "
    580604endif
    581605echo "MACRO FILTRE $filtre"
     
    618642        \cp tmp77 liste_des_sources_f77
    619643        \cp tmp90 liste_des_sources_f90
    620         echo "On recree le makefile"
    621         if ("$dyntype" == "olddyn") then
    622           ./create_make_gcm olddyn3d grid bibio aeronomars phy$physique >! tmp
    623         else
    624           ./create_make_gcm dyn3d grid bibio aeronomars phy$physique >! tmp
    625         endif
     644        echo "Remaking the makefile!"
     645        echo "src_dirs: $src_dirs"
     646        create_make_gcm $src_dirs >! tmp
    626647        \mv tmp makefile
    627         echo "Nouveau makefile cree."
     648        echo "New makefile created."
    628649endif
    629650
     
    631652#  Execution de la comande make
    632653########################################################################
     654
    633655
    634656echo PHYSIQUE $phys
     
    649671   set f90=f90
    650672else if $LINUX then
    651 #   set f77=pgf90
    652 #   set f90=pgf90
    653673   set f77=g95
    654674   set f90=g95
     
    727747set source_code=${code}.F
    728748# handle cases when the main program is in the physics directory
    729 if (-f $LMDGCM/libf/phy${physique}/${code}.F) then
    730   set dyn="$dyn DIRMAIN=phy$physique "
    731 endif
    732 if (-f $LMDGCM/libf/phy${physique}/${code}.F90) then
     749set dirmain=dyn${dimc}d
     750if ( -f $LMDGCM/libf/dyn3d/${code}.F90 ) then
    733751  set source_code=${code}.F90
    734   set dyn="$dyn DIRMAIN=phy$physique "
     752endif
     753if ( -f $LMDGCM/libf/phy${physique}/dyn1d/${code}.F ) then
     754  set dirmain=phy${physique}/dyn1d
     755  set source_code=${code}.F
     756endif
     757if ( -f $LMDGCM/libf/phy${physique}/dyn1d/${code}.F90 ) then
     758  set dirmain=phy${physique}/dyn1d
     759  set source_code=${code}.F90
     760endif
     761if ( -f $LMDGCM/libf/dynlonlat_phylonlat/phy${physique}/${code}.F ) then
     762  set dirmain=dynlonlat_phylonlat/phy${physique}
     763  set source_code=${code}.F
     764endif
     765if ( -f $LMDGCM/libf/dynlonlat_phylonlat/phy${physique}/${code}.F90 ) then
     766  set dirmain=dynlonlat_phylonlat/phy${physique}
     767  set source_code=${code}.F90
    735768endif
    736769
    737770echo $make -f $LMDGCM/makefile \
    738771OPTION_DEP="$opt_dep" OPTION_LINK="$opt_link" \
     772OPTIM="$optim" \
    739773OPTIM90="$optim90" \
    740774OPTIMTRU90="$optimtru90" \
     
    742776$filtre \
    743777LIBO=$libo \
    744 $dyn \
    745778$phys \
     779LIBDYN_PHYS=${LIBDYN_PHYS} \
    746780DIM=$dimc \
    747781DYNTYPE="$dyntype" \
     782L_DYN_PHY="$libdyn_phy" \
    748783L_ADJNT="$adjnt" \
    749784LOCAL_DIR="$localdir"  \
     
    756791MOD_SUFFIX=$mod_suffix \
    757792AR=$ar \
     793DIRMAIN=$dirmain \
    758794SOURCE=$source_code \
    759795PROG=$code
     
    762798$make -f $LMDGCM/makefile \
    763799OPTION_DEP="$opt_dep" OPTION_LINK="$opt_link" \
     800OPTIM="$optim" \
    764801OPTIM90="$optim90" \
    765802OPTIMTRU90="$optimtru90" \
     
    767804$filtre \
    768805LIBO=$libo \
    769 $dyn \
    770806$phys \
     807LIBDYN_PHYS=${LIBDYN_PHYS} \
    771808DIM=$dimc \
    772809DYNTYPE="$dyntype" \
     810L_DYN_PHY="$libdyn_phy" \
    773811L_ADJNT="$adjnt" \
    774812LOCAL_DIR="$localdir"  \
     
    781819MOD_SUFFIX=$mod_suffix \
    782820AR=$ar \
     821DIRMAIN=$dirmain \
    783822SOURCE=$source_code \
    784823PROG=$code
     
    786825\rm -f $libf/grid/dimensions.h
    787826\rm -f $libf/grid/bands.h
    788 \rm -f $libf/phy${physique}/bands.h
     827\rm -f $libf/phy$physique/bands.h
    789828\rm -f $libf/phy$physique/scatterers.h
  • trunk/LMDZ.GENERIC/makegcm_gfortran

    r1255 r1403  
    88set physique=std
    99set phys="PHYS=$physique"
    10 set include='-I$(LIBF)/grid -I$(LIBF)/bibio -I.'
     10set include='-I$(LIBF)/grid -I$(LIBF)/misc -I. -I$(LIBF)/dynlonlat_phylonlat'
    1111set ntrac = 1
    1212set filtre=filtrez
     
    1616set scatterers="1"
    1717set full=""
     18#src_dirs: directories containing source files
     19set src_dirs="grid misc"
     20
    1821########################################################################
    1922# path a changer contenant les sources et les objets du modele
     
    405408if ( "$physique" == 'nophys' ) then
    406409   set phys="L_PHY= LIBPHY="
    407 endif
    408 
     410else
     411   set src_dirs="$src_dirs phy$physique"
     412   set include="$include "' -I$(LIBF)/phy'"$physique"
     413endif
     414set libdyn_phy=""
     415set LIBDYN_PHYS=""
    409416########################################################################
    410417#subtilites sur le nom de la librairie
     
    484491  set include="$include "'-I$(LIBF)/dyn2d '
    485492  set dimh=$dim
    486 else
     493endif
     494if ( "$dimc" == "3" ) then
    487495  if ( "$dyntype" == "olddyn" ) then
    488496    set include="$include "'-I$(LIBF)/olddyn3d '
     497    set src_dirs="$src_dirs olddyn3d dynlonlat_phylonlat dynlonlat_phylonlat/phy$physique"
    489498  else
    490499    set include="$include "'-I$(LIBF)/dyn3d '
     500    set src_dirs="$src_dirs dyn3d dynlonlat_phylonlat dynlonlat_phylonlat/phy$physique"
    491501  endif
     502  set libdyn_phy="-ldynlonlat_phylonlat"
     503  set LIBDYN_PHYS='$(LIBO)/libdynlonlat_phylonlat.a'
    492504  set dimh=`echo $dim | awk ' { print $1 "." $2 } '`
    493505endif
     
    562574## NB: we still need to have L_DYN=libdyn3d to reach routines and module
    563575## objects which are located in dyn3d
    564   set dyn="L_DYN=-ldyn3d DYN= L_FILTRE= DIRMAIN=phy$physique "
     576  set dyntype=""
     577  set filtre="L_DYN= DYN= FILTRE= L_FILTRE= "
     578  set dyn="L_DYN= DYN= L_FILTRE= "
     579  set dirmain="phy$physique/dyn1d"
     580  set src_dirs="$src_dirs phy$physique/dyn1d "
     581  set include="$include "' -I$(LIBF)/phy'"$physique"'/dyn1d'
    565582endif
    566583endif
     
    584601if ( `expr $dimc \> 2` == 1 ) then
    585602   set filtre="FILTRE=$filtre"
     603   if ( "$dyntype" == "olddyn" ) then
     604     set src_dirs="$src_dirs oldfiltrez"
     605   else
     606     set src_dirs="$src_dirs filtrez"
     607   endif
    586608else
    587    set filtre="FILTRE= L_FILTRE= "
     609   set filtre="FILTRE= L_FILTRE= L_DYN= "
    588610endif
    589611echo "MACRO FILTRE $filtre"
     
    627649        \cp tmp90 liste_des_sources_f90
    628650        echo "Remaking the makefile!"
    629         if ("$dyntype" == "olddyn") then
    630           ./create_make_gcm olddyn3d grid bibio phy$physique >! tmp
    631         else
    632           ./create_make_gcm dyn3d grid bibio phy$physique >! tmp
    633         endif
     651        echo "src_dirs: $src_dirs"
     652        create_make_gcm $src_dirs >! tmp
    634653        \mv tmp makefile
    635654        echo "New makefile created."
     
    744763set source_code=${code}.F
    745764# handle cases when the main program is in the physics directory
    746 if (-f $LMDGCM/libf/phy${physique}/${code}.F) then
    747   set dyn="$dyn DIRMAIN=phy$physique "
    748 endif
    749 if (-f $LMDGCM/libf/phy${physique}/${code}.F90) then
     765set dirmain=dyn${dimc}d
     766if ( -f $LMDGCM/libf/dyn3d/${code}.F90 ) then
    750767  set source_code=${code}.F90
    751   set dyn="$dyn DIRMAIN=phy$physique "
     768endif
     769if ( -f $LMDGCM/libf/phy${physique}/dyn1d/${code}.F ) then
     770  set dirmain=phy${physique}/dyn1d
     771  set source_code=${code}.F
     772endif
     773if ( -f $LMDGCM/libf/phy${physique}/dyn1d/${code}.F90 ) then
     774  set dirmain=phy${physique}/dyn1d
     775  set source_code=${code}.F90
     776endif
     777if ( -f $LMDGCM/libf/dynlonlat_phylonlat/phy${physique}/${code}.F ) then
     778  set dirmain=dynlonlat_phylonlat/phy${physique}
     779  set source_code=${code}.F
     780endif
     781if ( -f $LMDGCM/libf/dynlonlat_phylonlat/phy${physique}/${code}.F90 ) then
     782  set dirmain=dynlonlat_phylonlat/phy${physique}
     783  set source_code=${code}.F90
    752784endif
    753785
     
    760792$filtre \
    761793LIBO=$libo \
    762 $dyn \
    763794$phys \
     795LIBDYN_PHYS=${LIBDYN_PHYS} \
    764796DIM=$dimc \
    765797DYNTYPE="$dyntype" \
     798L_DYN_PHY="$libdyn_phy" \
    766799L_ADJNT="$adjnt" \
    767800LOCAL_DIR="$localdir"  \
     
    774807MOD_SUFFIX=$mod_suffix \
    775808AR=$ar \
     809DIRMAIN=$dirmain \
    776810SOURCE=$source_code \
    777811PROG=$code
     
    786820$filtre \
    787821LIBO=$libo \
    788 $dyn \
    789822$phys \
     823LIBDYN_PHYS=${LIBDYN_PHYS} \
    790824DIM=$dimc \
    791825DYNTYPE="$dyntype" \
     826L_DYN_PHY="$libdyn_phy" \
    792827L_ADJNT="$adjnt" \
    793828LOCAL_DIR="$localdir"  \
     
    800835MOD_SUFFIX=$mod_suffix \
    801836AR=$ar \
     837DIRMAIN=$dirmain \
    802838SOURCE=$source_code \
    803839PROG=$code
  • trunk/LMDZ.GENERIC/makegcm_ifort

    r1216 r1403  
    88set physique=std
    99set phys="PHYS=$physique"
    10 set include='-I$(LIBF)/grid -I$(LIBF)/bibio -I.'
     10set include='-I$(LIBF)/grid -I$(LIBF)/misc -I. -I$(LIBF)/dynlonlat_phylonlat'
    1111set ntrac = 1
    1212set filtre=filtrez
     
    1616set scatterers="1"
    1717set full=""
     18#src_dirs: directories containing source files
     19set src_dirs="grid misc"
     20
    1821########################################################################
    1922# path a changer contenant les sources et les objets du modele
     
    126129   set machine=XNEC
    127130   set XNEC=1
     131else if ( `uname` == CYGWIN_NT-6.1-WOW64) then
     132   set machine=LINUX
     133   set LINUX=1
    128134else
    129135   echo Vous travaillez sur une machine non prevue par le reglement
     
    216222     set mod_loc_dir="./"
    217223   else
    218 ####     set opt_link=" -C hopt -float0 -ew -P static -L$IOIPSLDIR -lsxioipsl -L /u/rech/psl/rpsl003/IOIPSL -lnetcdf_i8r8_v -I$NCDFINC -L/SX/usr/local/lib -lnetcdf_i8r8"
    219224     set opt_link=" -C hopt -float0 -ew -P static -I$NCDFINC -L/SX/usr/local/lib -lnetcdf_i8r8"
    220225     set mod_loc_dir="."
     
    224229endif
    225230
    226 set nomlib=$machine
     231set nomlib=${machine}
    227232
    228233# Impose distinct name for 64 bit Linux machines (to avoid mixing 32 and 64)
     
    404409if ( "$physique" == 'nophys' ) then
    405410   set phys="L_PHY= LIBPHY="
    406 endif
    407 
     411else
     412   set src_dirs="$src_dirs phy$physique"
     413   set include="$include "' -I$(LIBF)/phy'"$physique"
     414endif
     415set libdyn_phy=""
     416set LIBDYN_PHYS=""
    408417########################################################################
    409418#subtilites sur le nom de la librairie
     
    483492  set include="$include "'-I$(LIBF)/dyn2d '
    484493  set dimh=$dim
    485 else
     494endif
     495if ( "$dimc" == "3" ) then
    486496  if ( "$dyntype" == "olddyn" ) then
    487497    set include="$include "'-I$(LIBF)/olddyn3d '
     498    set src_dirs="$src_dirs olddyn3d dynlonlat_phylonlat dynlonlat_phylonlat/phy$physique"
    488499  else
    489500    set include="$include "'-I$(LIBF)/dyn3d '
     501    set src_dirs="$src_dirs dyn3d dynlonlat_phylonlat dynlonlat_phylonlat/phy$physique"
    490502  endif
     503  set libdyn_phy="-ldynlonlat_phylonlat"
     504  set LIBDYN_PHYS='$(LIBO)/libdynlonlat_phylonlat.a'
    491505  set dimh=`echo $dim | awk ' { print $1 "." $2 } '`
    492506endif
     
    561575## NB: we still need to have L_DYN=libdyn3d to reach routines and module
    562576## objects which are located in dyn3d
    563   set dyn="L_DYN=-ldyn3d DYN= L_FILTRE= DIRMAIN=phy$physique "
     577  set dyntype=""
     578  set filtre="L_DYN= DYN= FILTRE= L_FILTRE= "
     579  set dyn="L_DYN= DYN= L_FILTRE= "
     580  set dirmain="phy$physique/dyn1d"
     581  set src_dirs="$src_dirs phy$physique/dyn1d "
     582  set include="$include "' -I$(LIBF)/phy'"$physique"'/dyn1d'
    564583endif
    565584endif
     
    583602if ( `expr $dimc \> 2` == 1 ) then
    584603   set filtre="FILTRE=$filtre"
    585 else
    586    set filtre="FILTRE= L_FILTRE= "
     604   if ( "$dyntype" == "olddyn" ) then
     605     set src_dirs="$src_dirs oldfiltrez"
     606   else
     607     set src_dirs="$src_dirs filtrez"
     608   endif
     609else
     610   set filtre="FILTRE= L_FILTRE= L_DYN= "
    587611endif
    588612echo "MACRO FILTRE $filtre"
     
    626650        \cp tmp90 liste_des_sources_f90
    627651        echo "Remaking the makefile!"
    628         if ("$dyntype" == "olddyn") then
    629           ./create_make_gcm olddyn3d grid bibio phy$physique >! tmp
    630         else
    631           ./create_make_gcm dyn3d grid bibio phy$physique >! tmp
    632         endif
     652        echo "src_dirs: $src_dirs"
     653        create_make_gcm $src_dirs >! tmp
    633654        \mv tmp makefile
    634655        echo "New makefile created."
     
    663684#   set f90="ifort -real-size 64 -DNC_DOUBLE"
    664685   set opt_link=" -L$LIBOGCM -L$NCDFLIB -lnetcdf "
    665 #   set f77=pgf90
    666 #   set f90=pgf90
    667686else if $SUN then
    668687   set f77=f90
     
    739758set source_code=${code}.F
    740759# handle cases when the main program is in the physics directory
    741 if (-f $LMDGCM/libf/phy${physique}/${code}.F) then
    742   set dyn="$dyn DIRMAIN=phy$physique "
    743 endif
    744 if (-f $LMDGCM/libf/phy${physique}/${code}.F90) then
     760set dirmain=dyn${dimc}d
     761if ( -f $LMDGCM/libf/dyn3d/${code}.F90 ) then
    745762  set source_code=${code}.F90
    746   set dyn="$dyn DIRMAIN=phy$physique "
     763endif
     764if ( -f $LMDGCM/libf/phy${physique}/dyn1d/${code}.F ) then
     765  set dirmain=phy${physique}/dyn1d
     766  set source_code=${code}.F
     767endif
     768if ( -f $LMDGCM/libf/phy${physique}/dyn1d/${code}.F90 ) then
     769  set dirmain=phy${physique}/dyn1d
     770  set source_code=${code}.F90
     771endif
     772if ( -f $LMDGCM/libf/dynlonlat_phylonlat/phy${physique}/${code}.F ) then
     773  set dirmain=dynlonlat_phylonlat/phy${physique}
     774  set source_code=${code}.F
     775endif
     776if ( -f $LMDGCM/libf/dynlonlat_phylonlat/phy${physique}/${code}.F90 ) then
     777  set dirmain=dynlonlat_phylonlat/phy${physique}
     778  set source_code=${code}.F90
    747779endif
    748780
     
    755787$filtre \
    756788LIBO=$libo \
    757 $dyn \
    758789$phys \
     790LIBDYN_PHYS=${LIBDYN_PHYS} \
    759791DIM=$dimc \
    760792DYNTYPE="$dyntype" \
     793L_DYN_PHY="$libdyn_phy" \
    761794L_ADJNT="$adjnt" \
    762795LOCAL_DIR="$localdir"  \
     
    769802MOD_SUFFIX=$mod_suffix \
    770803AR=$ar \
     804DIRMAIN=$dirmain \
    771805SOURCE=$source_code \
    772806PROG=$code
     807
    773808
    774809$make -f $LMDGCM/makefile \
     
    780815$filtre \
    781816LIBO=$libo \
    782 $dyn \
    783817$phys \
     818LIBDYN_PHYS=${LIBDYN_PHYS} \
    784819DIM=$dimc \
    785820DYNTYPE="$dyntype" \
     821L_DYN_PHY="$libdyn_phy" \
    786822L_ADJNT="$adjnt" \
    787823LOCAL_DIR="$localdir"  \
     
    794830MOD_SUFFIX=$mod_suffix \
    795831AR=$ar \
     832DIRMAIN=$dirmain \
    796833SOURCE=$source_code \
    797834PROG=$code
     
    799836\rm -f $libf/grid/dimensions.h
    800837\rm -f $libf/grid/bands.h
    801 \rm -f $libf/phy${physique}/bands.h
     838\rm -f $libf/phy$physique/bands.h
    802839\rm -f $libf/phy$physique/scatterers.h
  • trunk/LMDZ.GENERIC/makegcm_pgf90

    r1216 r1403  
    88set physique=std
    99set phys="PHYS=$physique"
    10 set include='-I$(LIBF)/grid -I$(LIBF)/bibio -I.'
     10set include='-I$(LIBF)/grid -I$(LIBF)/misc -I. -I$(LIBF)/dynlonlat_phylonlat'
    1111set ntrac = 1
    1212set filtre=filtrez
     
    1616set scatterers="1"
    1717set full=""
     18#src_dirs: directories containing source files
     19set src_dirs="grid misc"
     20
    1821########################################################################
    1922# path a changer contenant les sources et les objets du modele
     
    2730#setenv LMDGCM "/san/home/rdword/gcm/LMDZ.GENERIC"
    2831setenv LIBOGCM $LMDGCM/libo
    29 # NetCDF, on LMD 64 bit machines
     32# NetCDF, on LMD computers:
    3033setenv NCDFLIB /donnees/emlmd/netcdf64-4.0.1_pgi/lib
    3134setenv NCDFINC /donnees/emlmd/netcdf64-4.0.1_pgi/include
     
    115118   set machine=XNEC
    116119   set XNEC=1
     120else if ( `uname` == CYGWIN_NT-6.1-WOW64) then
     121   set machine=LINUX
     122   set LINUX=1
    117123else
    118124   echo Vous travaillez sur une machine non prevue par le reglement
     
    208214     set mod_loc_dir="./"
    209215   else
    210 ####     set opt_link=" -C hopt -float0 -ew -P static -L$IOIPSLDIR -lsxioipsl -L /u/rech/psl/rpsl003/IOIPSL -lnetcdf_i8r8_v -I$NCDFINC -L/SX/usr/local/lib -lnetcdf_i8r8"
    211216     set opt_link=" -C hopt -float0 -ew -P static -I$NCDFINC -L/SX/usr/local/lib -lnetcdf_i8r8"
    212217     set mod_loc_dir="."
     
    216221endif
    217222
    218 set nomlib=$machine
     223set nomlib=${machine}
    219224
    220225# Impose distinct name for 64 bit Linux machines (to avoid mixing 32 and 64)
     
    399404if ( "$physique" == 'nophys' ) then
    400405   set phys="L_PHY= LIBPHY="
    401 endif
    402 
     406else
     407   set src_dirs="$src_dirs phy$physique"
     408   set include="$include "' -I$(LIBF)/phy'"$physique"
     409endif
     410set libdyn_phy=""
     411set LIBDYN_PHYS=""
    403412########################################################################
    404413#subtilites sur le nom de la librairie
     
    478487  set include="$include "'-I$(LIBF)/dyn2d '
    479488  set dimh=$dim
    480 else
     489endif
     490if ( "$dimc" == "3" ) then
    481491  if ( "$dyntype" == "olddyn" ) then
    482492    set include="$include "'-I$(LIBF)/olddyn3d '
     493    set src_dirs="$src_dirs olddyn3d dynlonlat_phylonlat dynlonlat_phylonlat/phy$physique"
    483494  else
    484495    set include="$include "'-I$(LIBF)/dyn3d '
     496    set src_dirs="$src_dirs dyn3d dynlonlat_phylonlat dynlonlat_phylonlat/phy$physique"
    485497  endif
     498  set libdyn_phy="-ldynlonlat_phylonlat"
     499  set LIBDYN_PHYS='$(LIBO)/libdynlonlat_phylonlat.a'
    486500  set dimh=`echo $dim | awk ' { print $1 "." $2 } '`
    487501endif
     
    556570## NB: we still need to have L_DYN=libdyn3d to reach routines and module
    557571## objects which are located in dyn3d
    558   set dyn="L_DYN=-ldyn3d DYN= L_FILTRE= DIRMAIN=phy$physique "
     572  set dyntype=""
     573  set filtre="L_DYN= DYN= FILTRE= L_FILTRE= "
     574  set dyn="L_DYN= DYN= L_FILTRE= "
     575  set dirmain="phy$physique/dyn1d"
     576  set src_dirs="$src_dirs phy$physique/dyn1d "
     577  set include="$include "' -I$(LIBF)/phy'"$physique"'/dyn1d'
    559578endif
    560579endif
     
    578597if ( `expr $dimc \> 2` == 1 ) then
    579598   set filtre="FILTRE=$filtre"
     599   if ( "$dyntype" == "olddyn" ) then
     600     set src_dirs="$src_dirs oldfiltrez"
     601   else
     602     set src_dirs="$src_dirs filtrez"
     603   endif
    580604else
    581    set filtre="FILTRE= L_FILTRE= "
     605   set filtre="FILTRE= L_FILTRE= L_DYN= "
    582606endif
    583607echo "MACRO FILTRE $filtre"
     
    621645        \cp tmp90 liste_des_sources_f90
    622646        echo "Remaking the makefile!"
    623         if ("$dyntype" == "olddyn") then
    624           ./create_make_gcm olddyn3d grid bibio phy$physique >! tmp
    625         else
    626           ./create_make_gcm dyn3d grid bibio phy$physique >! tmp
    627         endif
     647        echo "src_dirs: $src_dirs"
     648        create_make_gcm $src_dirs >! tmp
    628649        \mv tmp makefile
    629650        echo "New makefile created."
     
    730751endif
    731752
    732 
    733753cd $localdir
    734754
    735755set source_code=${code}.F
    736756# handle cases when the main program is in the physics directory
    737 if (-f $LMDGCM/libf/phy${physique}/${code}.F) then
    738   set dyn="$dyn DIRMAIN=phy$physique "
    739 endif
    740 if (-f $LMDGCM/libf/phy${physique}/${code}.F90) then
     757set dirmain=dyn${dimc}d
     758if ( -f $LMDGCM/libf/dyn3d/${code}.F90 ) then
    741759  set source_code=${code}.F90
    742   set dyn="$dyn DIRMAIN=phy$physique "
     760endif
     761if ( -f $LMDGCM/libf/phy${physique}/dyn1d/${code}.F ) then
     762  set dirmain=phy${physique}/dyn1d
     763  set source_code=${code}.F
     764endif
     765if ( -f $LMDGCM/libf/phy${physique}/dyn1d/${code}.F90 ) then
     766  set dirmain=phy${physique}/dyn1d
     767  set source_code=${code}.F90
     768endif
     769if ( -f $LMDGCM/libf/dynlonlat_phylonlat/phy${physique}/${code}.F ) then
     770  set dirmain=dynlonlat_phylonlat/phy${physique}
     771  set source_code=${code}.F
     772endif
     773if ( -f $LMDGCM/libf/dynlonlat_phylonlat/phy${physique}/${code}.F90 ) then
     774  set dirmain=dynlonlat_phylonlat/phy${physique}
     775  set source_code=${code}.F90
    743776endif
    744777
     
    751784$filtre \
    752785LIBO=$libo \
    753 $dyn \
    754786$phys \
     787LIBDYN_PHYS=${LIBDYN_PHYS} \
    755788DIM=$dimc \
    756789DYNTYPE="$dyntype" \
     790L_DYN_PHY="$libdyn_phy" \
    757791L_ADJNT="$adjnt" \
    758792LOCAL_DIR="$localdir"  \
     
    765799MOD_SUFFIX=$mod_suffix \
    766800AR=$ar \
     801DIRMAIN=$dirmain \
    767802SOURCE=$source_code \
    768803PROG=$code
     
    777812$filtre \
    778813LIBO=$libo \
    779 $dyn \
    780814$phys \
     815LIBDYN_PHYS=${LIBDYN_PHYS} \
    781816DIM=$dimc \
    782817DYNTYPE="$dyntype" \
     818L_DYN_PHY="$libdyn_phy" \
    783819L_ADJNT="$adjnt" \
    784820LOCAL_DIR="$localdir"  \
     
    791827MOD_SUFFIX=$mod_suffix \
    792828AR=$ar \
     829DIRMAIN=$dirmain \
    793830SOURCE=$source_code \
    794831PROG=$code
Note: See TracChangeset for help on using the changeset viewer.