Changeset 1403


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
Files:
116 added
13 deleted
32 edited
6 copied
88 moved

Legend:

Unmodified
Added
Removed
  • trunk/DOC/chantiers/commit_importants.log

    r1395 r1403  
    14961496**** commit_v1395 ****
    14971497**********************
    1498 Ehouarn: some cleanup and tydying on the dynamics/physics interface.
     1498Ehouarn: some cleanup and tidying on the dynamics/physics interface.
    14991499Essentially affects the "iniphysiq" routine in all physics packages.
     1500
     1501**********************
     1502**** commit_v1403 ****
     1503**********************
     1504Ehouarn: Reorganizing the physics/dynamics interface.
     1505
     1506* makelmdz and makelmdz_fcm scripts adapted to handle the new directory
     1507  settings
     1508
     1509* misc: (replaces what was the "bibio" directory)
     1510- Should only contain extremely generic (and non physics or
     1511  dynamics-specific) routines
     1512- Therefore moved initdynav.F90, initfluxsto.F, inithist.F, writedynav.F90,
     1513  write_field.F90, writehist.F to "dyn3d_common"
     1514
     1515* dynlonlat_phylonlat: (new interface directory)
     1516- This directory contains routines relevent to physics/dynamics grid
     1517  interactions, e.g. routines gr_dyn_fi or gr_fi_dyn and calfis
     1518- Moreover the dynlonlat_phylonlat contains directories "phy***" corresponding
     1519  to each physics package "phy***" to be used. These subdirectories should
     1520  only contain specific interfaces (e.g. iniphysiq) or main programs (e.g.
     1521  newstart)
     1522
     1523* phy***/dyn1d: this subdirectory contains the 1D model using physics
     1524  from phy***
  • trunk/LMDZ.COMMON/bld.cfg

    r1302 r1403  
    2626src::dyn     %SRC_PATH/%DYN
    2727src::phys    %SRC_PATH/%PHYS
     28src::dyn_phys %DYN_PHYS
     29src::dyn_phys_sub %DYN_PHYS_SUB
    2830src::sisvat  %SISVAT
    2931src::rrtm    %RRTM
    3032src::grid    %SRC_PATH/grid
    31 src::filtrez %SRC_PATH/filtrez
    32 src::bibio   %SRC_PATH/bibio
    33 src::dyn3d_common   %SRC_PATH/dyn3d_common
     33src::filtrez %FILTRE
     34src::bibio   %SRC_PATH/misc
     35src::dyn3d_common   %DYN_COMMON
    3436src::cosp    %COSP
    3537src::chem    %CHEM
  • trunk/LMDZ.COMMON/create_make_gcm

    r1391 r1403  
    55#set -xv
    66
     7# arguments given to create_make_gcm are the directories to scan
     8src_dirs=$*
    79
    810machine=`hostname`
     
    4850fi
    4951echo "LOCAL_DIR=`echo $localdir`"
    50 echo 'BIBIO    = $(LIBF)/bibio'
    51 echo 'DYN3D_COMMON   = $(LIBF)/dyn3d_common'
     52echo 'MISC    = $(LIBF)/misc'
     53#echo 'DYN3D_COMMON   = $(LIBF)/dyn3d_common'
    5254echo "FILTRE   = filtre"
    5355echo "PHYS  = "
    5456echo 'LIBPHY = $(LIBO)/libphy$(PHYS).a'
     57echo 'LIBDYN_PHY = $(LIBO)/libdynlmdz_phy$(PHYS).a'
    5558echo 'DIRMAIN=dyn$(DIM)d$(FLAG_PARA)'
    5659echo 'RM=rm'
     
    6164echo 'L_DYN      = -ldyn$(DIM)d$(FLAG_PARA) -ldyn3d_common'
    6265echo 'L_FILTRE   = -l$(FILTRE)'
     66echo 'L_DYN_PHY = -ldynlmdz_phy$(PHYS) '
    6367echo 'L_PHY = -lphy$(PHYS) '
    64 echo 'L_BIBIO    = -lbibio'
     68echo 'L_MISC    = -lmisc'
    6569echo 'L_ADJNT    ='
    6670echo 'L_COSP     = -lcosp'
     
    97101echo
    98102#echo 'main : chimie $(DYN) bibio phys $(OPTION_DEP) '
    99 echo 'main : $(DYN) bibio phys $(OPTION_DEP) '
     103echo 'main : $(DYN) misc phys dyn_phy $(OPTION_DEP) '
    100104echo '  cd $(LIBO) ; $(RANLIB) lib*.a ; cd $(GCM) ;\'
    101105echo '  cd $(LOCAL_DIR); \'
    102106echo '  $(COMPILE90) $(LIBF)/$(DIRMAIN)/$(SOURCE) -o $(PROG).o ; \'
    103 echo '  $(LINK) $(PROG).o -L$(LIBO) $(L_DYN) $(L_ADJNT) $(L_COSP) $(L_AERONOMARS) $(L_PHY) $(L_DYN) $(L_DYN3D_COMMON) $(L_BIBIO) $(L_DYN3D_COMMON) $(L_PHY) $(L_DYN) $(L_FILTRE) $(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_COSP) $(L_AERONOMARS) $(L_PHY) $(L_DYN) $(L_DYN3D_COMMON) $(L_MISC) $(L_DYN3D_COMMON) $(L_PHY) $(L_DYN_PHY) $(L_DYN) $(L_FILTRE) $(OPLINK) $(OPTION_LINK) -o $(LOCAL_DIR)/$(PROG).e ; $(RM) $(PROG).o '
    104108echo
    105109echo 'phys : $(LIBPHY)'
     
    108112echo 'dyn1d :'
    109113echo
     114echo 'dyn_phy: $(LIBDYN_PHYS)'
    110115echo
    111116#echo 'chimie : $(LIBO)/libchimie.a'
    112117echo
    113 echo 'bibio : $(LIBO)/libbibio.a'
     118echo 'misc : $(LIBO)/libmisc.a'
    114119echo
    115120echo 'adjnt : $(LIBO)/libadjnt.a'
     
    133138echo
    134139cd $libf >/dev/null 2>&1
    135 for diri in ` ls ` ; do
     140
     141for diri in $src_dirs ; do
    136142
    137143   if [ -d $diri ] ; then
    138    if [ "`ls $diri/*.F $diri/*/*.F`" != "" ] || [ "`ls $diri/*.[fF]90 $diri/*/*.[fF]90`" != "" ]  ; then
     144   if [ "`ls $diri/*.F`" != "" ] || [ "`ls $diri/*.[fF]90`" != "" ]  ; then
    139145#      cd $diri >/dev/null 2>&1
    140146      echo
    141147      listlib=""
    142148# Liste des fichiers .F et .F90 n'etant pas des programmes principaux
    143       for fili in `ls $diri/*.[fF] $diri/*/*.[fF]` ; do
     149      for fili in `ls $diri/*.[fF]` ; do
    144150         # Check if file is a routine or main program
    145151         # i.e: look for the "program" keword preceeded by leading spaces
     
    150156         fi
    151157      done
    152       for fili in `ls $diri/*.[fF]90 $diri/*/*.[fF]90` ; do
     158      for fili in `ls $diri/*.[fF]90` ; do
    153159         # Check if file is a routine or main program
    154160         # i.e. look for "program" keyword (with possibly some leading spaces)
     
    163169      echo $listlib >> $logfile
    164170      echo
     171      # topdiri contains main dir name (without trailing "/blabla" for subdirs)
     172      topdiri=${diri%/*}
    165173      echo "#======================================================================="
    166174      echo "# Contenu de la bibliotheque correspondant au Directory "$diri
     
    170178      do
    171179         fili=`echo $trufile | awk -F/ ' { print $NF } ' | cut -d. -f1`
    172          echo '$(LIBO)/lib'$diri".a : " '$(LIBO)/lib'$diri".a("$fili".o)"
     180         echo '$(LIBO)/lib'$topdiri".a : " '$(LIBO)/lib'$topdiri".a("$fili".o)"
    173181         echo
    174182      done
    175       echo '.PRECIOUS   : $(LIBO)/lib'$diri'.a'
    176       echo
    177       echo
    178       echo "# Compilation des membres de la bibliotheque lib"$diri".a"
     183      echo '.PRECIOUS   : $(LIBO)/lib'$topdiri'.a'
     184      echo
     185      echo
     186      echo "# Compilation of elements in $diri of library lib"$topdiri".a"
    179187      echo
    180188      for trufile in $listlib ; do
     
    183191                 egrep -i '^ *module ' $trufile > /dev/null 2>&1 && F90=1
    184192                 egrep -i '#include*.inc ' $trufile > /dev/null 2>&1 && F90=1
    185          str1='$(LIBO)/lib'$diri'.a('$fili'.o) : $(LIBF)/'$trufile
    186          [ "$fili" = "chem.subs" ] && str1=$str1' $(LIBF)/'$diri/chem.mods.F
     193         str1='$(LIBO)/lib'$topdiri'.a('$fili'.o) : $(LIBF)/'$trufile
     194         [ "$fili" = "$diri/chem.subs" ] && str1=$str1' $(LIBF)/'$diri/chem.mods.F
    187195
    188196##########################################################################
     
    199207            strj=`echo $stri | tr [A-Z] [a-z]`
    200208            str2=""
    201             for dirinc in filtrez bibio dyn3d_common grid dyn3d phy* $diri $diri/*/ ; do
     209            for dirinc in $src_dirs ; do
    202210# Recherche dans l'ordre hierarchique inverse car seule la derniere
    203211# ligne est conservee
    204                if [ $dirinc = phydev ] ; then
    205                    dirstr='$(PHYS)'
    206                    libstr='phy$(PHYS)'
    207                else
     212#               if [ $dirinc = phydev ] ; then
     213#                   dirstr='$(PHYS)'
     214#                   libstr='phy$(PHYS)'
     215#               else
    208216                   dirstr=$dirinc
    209217                   libstr=$dirinc
    210                fi
     218#               fi
    211219               echo dirinc $dirinc >> $logfile
    212220               if [ -f $dirinc/$stri ] ; then
     
    238246         # object from library
    239247         echo ' cd $(LIBO); \'
    240          echo ' $(AR) d $(LIBO)/lib'$diri'.a '$fili'.o ; \'
     248         echo ' $(AR) d $(LIBO)/lib'$topdiri'.a '$fili'.o ; \'
    241249         if [ "$F90" -eq '0' ] ; then
    242250         ## Fixed Form Fortran 77
     
    252260         fi
    253261         # Put generated object in library
    254          echo ' $(AR) r $(LIBO)/lib'$diri'.a '$fili'.o ; $(RM) '$fili'.o ; \'
     262         echo ' $(AR) r $(LIBO)/lib'$topdiri'.a '$fili'.o ; $(RM) '$fili'.o ; \'
    255263         echo ' cd $(GCM)'
    256264         echo
     
    303311               str1='$(LIBF)/'$diri'/'$stri
    304312            else
    305                for dirinc in dyn3d grid bibio
     313               for dirinc in dyn3d grid misc
    306314               do
    307315                  if [ -f ../$dirinc/$stri ] ; then
  • trunk/LMDZ.COMMON/libf/dyn3d/leapfrog.F

    r1302 r1403  
    170170      logical ok_sync
    171171      parameter (ok_sync = .true.)
    172       logical physic
     172      logical physics
    173173
    174174      data callinigrads/.true./
     
    251251
    252252      itau = 0
    253       physic=.true.
    254       if (iflag_phys==0.or.iflag_phys==2) physic=.false.
     253      physics=.true.
     254      if (iflag_phys==0.or.iflag_phys==2) physics=.false.
    255255
    256256c      iday = day_ini+itau/day_step
     
    362362     s        apdiss = .TRUE.
    363363         IF( MOD(itau,iphysiq ).EQ.0.AND..NOT.forward
    364      s          .and. physic                        ) apphys = .TRUE.
     364     s          .and. physics                        ) apphys = .TRUE.
    365365      ELSE
    366366      ! Leapfrog/Matsuno time stepping
     
    368368         IF( MOD(itau+1,dissip_period).EQ.0 .AND. .NOT. forward )
    369369     s        apdiss = .TRUE.
    370          IF( MOD(itau+1,iphysiq).EQ.0.AND.physic       ) apphys=.TRUE.
     370         IF( MOD(itau+1,iphysiq).EQ.0.AND.physics       ) apphys=.TRUE.
    371371      END IF
    372372
  • trunk/LMDZ.COMMON/libf/dyn3d/logic.h

    r1302 r1403  
    1212     &  ,read_start,ok_guide,ok_strato,tidal,ok_gradsfile               &
    1313     &  ,ok_limit,ok_etat0,hybrid                                       &
    14      &  ,moyzon_mu,moyzon_ch
     14     &  ,moyzon_mu,moyzon_ch,grireg,physic
    1515
    1616      COMMON/logici/ iflag_phys,iflag_trac
     
    2626
    2727      integer iflag_phys,iflag_trac
     28
     29! stuff for compatibility with Mars/Generic old dyn cores. To be cleaned!
     30      logical grireg,physic
     31
    2832!-----------------------------------------------------------------------
  • trunk/LMDZ.COMMON/libf/dyn3d_common/control_mod.F90

    r1300 r1403  
    5151  real,save :: timestart ! (Mars) time start for run in "start.nc"
    5252
     53  ! stuff for compatibility with Mars/Generic old dyn cores. To be cleaned!
     54  integer,save :: idissip ! (Mars/old dyn) dissipation freq.
     55  real,save :: nday_r ! (Mars/old dyn) number of days to run (possibly including a fraction of day)
     56
     57
    5358END MODULE
  • trunk/LMDZ.COMMON/libf/dyn3d_common/infotrac.F90

    r1391 r1403  
    444444  END SUBROUTINE infotrac_init
    445445
     446! Ehouarn: routine iniadvtrac => from Mars/generic; does essentially the
     447!          same job as infotrac_init. To clean up and merge at some point...
     448      subroutine iniadvtrac(nq,numvanle)
     449!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     450! routine which initializes tracer names and advection schemes
     451! reads these infos from file 'traceur.def' but uses default values
     452! if that file is not found.
     453! Ehouarn Millour. Oct. 2008  (made this LMDZ4-like) for future compatibility
     454!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
     455      IMPLICIT NONE
     456
     457!#include "dimensions.h"
     458!#include "advtrac.h"
     459!#include "control.h"
     460
     461! routine arguments:
     462      INTEGER,INTENT(out) :: nq ! number of tracers
     463      INTEGER,INTENT(out) :: numvanle
     464
     465! local variables:
     466      LOGICAL :: first
     467      INTEGER :: iq
     468      INTEGER :: ierr
     469      CHARACTER(len=3) :: qname
     470
     471! Look for file traceur.def
     472      OPEN(90,file='traceur.def',form='formatted',status='old', &
     473              iostat=ierr)
     474      IF (ierr.eq.0) THEN
     475        write(*,*) "iniadvtrac: Reading file traceur.def"
     476        ! read number of tracers:
     477        read(90,*,iostat=ierr) nq
     478        if (ierr.ne.0) then
     479          write(*,*) "iniadvtrac: error reading number of tracers"
     480          write(*,*) "   (first line of traceur.def) "
     481          stop
     482        endif
     483       
     484        ! allocate arrays:
     485        allocate(iadv(nq))
     486        allocate(tname(nq))
     487       
     488        ! initialize advection schemes to Van-Leer for all tracers
     489        do iq=1,nq
     490          iadv(iq)=3 ! Van-Leer
     491        enddo
     492       
     493        do iq=1,nq
     494        ! minimal version, just read in the tracer names, 1 per line
     495          read(90,*,iostat=ierr) tname(iq)
     496          if (ierr.ne.0) then
     497            write(*,*) 'iniadvtrac: error reading tracer names...'
     498            stop
     499          endif
     500        enddo !of do iq=1,nq
     501        close(90) ! done reading tracer names, close file
     502      ENDIF ! of IF (ierr.eq.0)
     503
     504!  ....  Choix  des shemas d'advection pour l'eau et les traceurs  ...
     505!  ...................................................................
     506!
     507!     iadv = 1    shema  transport type "humidite specifique LMD" 
     508!     iadv = 2    shema   amont
     509!     iadv = 3    shema  Van-leer
     510!     iadv = 4    schema  Van-leer + humidite specifique
     511!                        Modif F.Codron
     512!
     513!
     514      DO  iq = 1, nq-1
     515       IF( iadv(iq).EQ.1 ) PRINT *,' Choix du shema humidite specifique'&
     516       ,' pour le traceur no ', iq
     517       IF( iadv(iq).EQ.2 ) PRINT *,' Choix du shema  amont',' pour le'  &
     518       ,' traceur no ', iq
     519       IF( iadv(iq).EQ.3 ) PRINT *,' Choix du shema  Van-Leer ',' pour' &
     520       ,'le traceur no ', iq
     521
     522       IF( iadv(iq).EQ.4 )  THEN
     523         PRINT *,' Le shema  Van-Leer + humidite specifique ',          &
     524       ' est  uniquement pour la vapeur d eau .'
     525         PRINT *,' Corriger iadv( ',iq, ')  et repasser ! '
     526         CALL ABORT
     527       ENDIF
     528
     529       IF( iadv(iq).LE.0.OR.iadv(iq).GT.4 )   THEN
     530        PRINT *,' Erreur dans le choix de iadv (nqtot).Corriger et '    &
     531       ,' repasser car  iadv(iq) = ', iadv(iq)
     532         CALL ABORT
     533       ENDIF
     534      ENDDO
     535
     536       IF( iadv(nq).EQ.1 ) PRINT *,' Choix du shema humidite '          &
     537       ,'specifique pour la vapeur d''eau'
     538       IF( iadv(nq).EQ.2 ) PRINT *,' Choix du shema  amont',' pour la'  &
     539       ,' vapeur d''eau '
     540       IF( iadv(nq).EQ.3 ) PRINT *,' Choix du shema  Van-Leer '         &
     541       ,' pour la vapeur d''eau'
     542       IF( iadv(nq).EQ.4 ) PRINT *,' Choix du shema  Van-Leer + '       &
     543       ,' humidite specifique pour la vapeur d''eau'
     544!
     545       IF( (iadv(nq).LE.0).OR.(iadv(nq).GT.4) )   THEN
     546        PRINT *,' Erreur dans le choix de iadv (nqtot).Corriger et '    &
     547       ,' repasser car  iadv(nqtot) = ', iadv(nqtot)
     548         CALL ABORT
     549       ENDIF
     550
     551      first = .TRUE.
     552      numvanle = nq + 1
     553      DO  iq = 1, nq
     554        IF(((iadv(iq).EQ.3).OR.(iadv(iq).EQ.4)).AND.first ) THEN
     555          numvanle = iq
     556          first    = .FALSE.
     557        ENDIF
     558      ENDDO
     559!
     560      DO  iq = 1, nq
     561
     562      IF( (iadv(iq).NE.3.AND.iadv(iq).NE.4).AND.iq.GT.numvanle )  THEN
     563          PRINT *,' Il y a discontinuite dans le choix du shema de ',   &
     564          'Van-leer pour les traceurs . Corriger et repasser . '
     565           CALL ABORT
     566      ENDIF
     567
     568      ENDDO
     569!
     570      end subroutine iniadvtrac
     571
     572
    446573END MODULE infotrac
  • trunk/LMDZ.COMMON/libf/dyn3dpar/leapfrog_p.F

    r1391 r1403  
    163163      REAL :: secondes
    164164      real :: rdaym_ini
    165       logical :: physic
     165      logical :: physics
    166166      LOGICAL first,callinigrads
    167167
     
    256256
    257257      itau = 0
    258       physic=.true.
    259       if (iflag_phys==0.or.iflag_phys==2) physic=.false.
     258      physics=.true.
     259      if (iflag_phys==0.or.iflag_phys==2) physics=.false.
    260260!      iday = day_ini+itau/day_step
    261261!      time = REAL(itau-(iday-day_ini)*day_step)/day_step+time_0
     
    433433     s        apdiss = .TRUE.
    434434         IF( MOD(itau,iphysiq ).EQ.0.AND..NOT.forward
    435      s          .and. physic                        ) apphys = .TRUE.
     435     s          .and. physics                        ) apphys = .TRUE.
    436436      ELSE
    437437      ! Leapfrog/Matsuno time stepping
     
    439439         IF( MOD(itau+1,dissip_period).EQ.0 .AND. .NOT. forward )
    440440     s        apdiss = .TRUE.
    441          IF( MOD(itau+1,iphysiq).EQ.0.AND.physic) apphys=.TRUE.
     441         IF( MOD(itau+1,iphysiq).EQ.0.AND.physics) apphys=.TRUE.
    442442      END IF
    443443
  • trunk/LMDZ.COMMON/libf/dynlonlat_phylonlat/calfis.F

    r1401 r1403  
    137137      REAL,INTENT(OUT) :: pdpsfi(iip1,jjp1) ! tendency on surface pressure (Pa/s)
    138138
    139 
     139#ifndef CPP_PARA
    140140c    Local variables :
    141141c    -----------------
     
    955955      firstcal = .FALSE.
    956956
    957       RETURN
     957#endif
     958! of #ifndef CPP_PARA
    958959      END
  • trunk/LMDZ.COMMON/libf/dynlonlat_phylonlat/calfis_p.F

    r1401 r1403  
    3333!      USE IOPHY
    3434#endif
     35#ifdef CPP_PARA
    3536      USE parallel_lmdz, ONLY : omp_chunk, using_mpi, AllGather_Field
    3637      USE Write_Field
    3738      Use Write_field_p
    3839      USE Times
     40      USE cpdet_mod, only: tpot2t_p, t2tpot_p
     41! used only for zonal averages
     42      USE moyzon_mod
     43#endif
    3944      USE infotrac, ONLY: nqtot, niadv, tname
    4045      USE control_mod, ONLY: planet_type, nsplit_phys
    41       USE cpdet_mod, only: tpot2t_p, t2tpot_p
    42 
    43 ! used only for zonal averages
    44       USE moyzon_mod
    4546
    4647      IMPLICIT NONE
     
    147148      REAL,INTENT(OUT) :: pdpsfi(iip1,jjp1) ! tendency on surface pressure (Pa/s)
    148149
     150#ifdef CPP_PARA
    149151#ifdef CPP_PHYS
    150152c    Local variables :
     
    895897     .             ztfi_omp,
    896898     .             zqfi_omp,
    897 c#ifdef INCA
    898899     .             flxwfi_omp,
    899 c#endif
    900900     .             zdufi_omp,
    901901     .             zdvfi_omp,
     
    14401440#endif
    14411441! of #ifdef CPP_PHYS
    1442       RETURN
     1442#endif
     1443! of #ifdef CPP_PARA
    14431444      END
  • trunk/LMDZ.COMMON/libf/dynlonlat_phylonlat/gr_dyn_fi_p.F

    r1401 r1403  
    33!
    44      SUBROUTINE gr_dyn_fi_p(nfield,im,jm,ngrid,pdyn,pfi)
    5 #ifdef CPP_PHYS
     5#ifdef CPP_PARA
    66! Interface with parallel physics,
    77      USE mod_interface_dyn_phys
     
    4040c$OMP END DO NOWAIT
    4141#endif
    42 ! of #ifdef CPP_PHYS
     42! of #ifdef CPP_PARA
    4343      RETURN
    4444      END
  • trunk/LMDZ.COMMON/libf/dynlonlat_phylonlat/gr_fi_dyn_p.F

    r1401 r1403  
    33!
    44      SUBROUTINE gr_fi_dyn_p(nfield,ngrid,im,jm,pfi,pdyn)
    5 #ifdef CPP_PHYS
     5#ifdef CPP_PARA
    66! Interface with parallel physics,
    77      USE mod_interface_dyn_phys
    88      USE dimphy
    9       use parallel_lmdz
     9      USE parallel_lmdz
    1010      IMPLICIT NONE
    1111c=======================================================================
     
    5252c$OMP END DO NOWAIT
    5353#endif
    54 ! of #ifdef CPP_PHYS
     54! of #ifdef CPP_PARA
    5555      RETURN
    5656      END
  • trunk/LMDZ.COMMON/makelmdz

    r1391 r1403  
    7979
    8080CPP_KEY=""
    81 INCLUDE='-I$(LIBF)/grid -I$(LIBF)/bibio -I$(LIBF)/filtrez -I. '
     81INCLUDE='-I$(LIBF)/grid -I$(LIBF)/misc -I$(LIBF)/filtrez -I. '
    8282LIB=""
    8383adjnt=""
     
    8686PARA_LD=""
    8787EXT_SRC=""
     88#src_dirs: directories containing source files
     89src_dirs="grid misc"
    8890ccompiler=""
    8991OPTIMC=""
     
    116118[-chimie INCA/false]       : (Earth) with INCA chemistry model or without (default: false)
    117119[-cosp cosp/false]         : (Earth) add the cosp model (default: false)
     120[-sisvat true/false]  : (Earth) compile with/without sisvat package (default: false)
     121[-rrtm true/false]    : (Earth) compile with/without rrtm package (default: false)
    118122[-parallel none/mpi/omp/mpi_omp] : parallelism (default: none) : mpi, openmp or mixted mpi_openmp
    119123[-g GRI]                   : grid configuration in dyn3d/GRI_xy.h  (default: reg, inclues a zoom)
     
    292296for inc in $archfileline ; do INCLUDE="$INCLUDE `echo $inc | grep '\-I'`" ; done
    293297
     298phys_root=$physique
     299if [[ "${physique:0:3}" == "lmd" ]] ; then phys_root=lmd ; fi
     300if [[ "${physique:0:3}" == "mar" ]] ; then phys_root=mar ; fi
     301if [[ "${physique:0:4}" == "mars" ]] ; then phys_root=mars ; fi
     302if [[ "${physique:0:3}" == "std" ]] ; then phys_root=std ; fi
     303if [[ "${physique:0:5}" == "venus" ]] ; then phys_root=venus ; fi
     304if [[ "${physique:0:5}" == "titan" ]] ; then phys_root=titan ; fi
     305if [[ "${physique:0:3}" == "dev" ]] ; then phys_root=dev ; fi
     306
    294307if [[ "$physique" != "nophys" ]]
    295308then
     309   #We'll use some physics
     310   src_dirs="$src_dirs phy$physique"
     311   LIBPHY='$(LIBO)/libphy'"$physique"'.a'
     312   lib_phy='-lphy'"$physique"
    296313   CPP_KEY="$CPP_KEY CPP_PHYS"
    297 fi
    298 
    299 if [[ "$physique" == "lmd" ]]
    300 then
    301    #Default planet type is Earth
     314   if [[ "${phys_root}" == "lmd" ]]
     315   then
     316   #For lmd physics, default planet type is Earth
    302317   CPP_KEY="$CPP_KEY CPP_EARTH"
     318   fi
    303319fi
    304320
     
    309325   LIB="$LIB -l${LIBPREFIX}chim$physique"
    310326   opt_dep="$opt_dep chim$physique"
     327   src_dirs="$src_dirs chim$physique"
    311328# get C compiler name and optim from arch.fcm file
    312329   archfileline=$( grep -i '^%C_COMPILER' arch.fcm )
     
    322339if [[ -d ${LIBFGCM}/aerono${physique} ]]
    323340then
     341   src_dirs="$src_dirs aerono$physique"
    324342   INCLUDE="$INCLUDE -I${LIBFGCM}/aerono${physique}"
    325343   LIB="$LIB -l${LIBPREFIX}aerono$physique"
     
    442460   CPP_KEY="$CPP_KEY CPP_COSP"
    443461   COSP_PATH="$LIBFGCM/cosp"
     462   src_dirs="$src_dirs cosp"
    444463#   LIB="${LIB} -l${LIBPREFIX}cosp"
    445464   opt_dep="$opt_dep cosp"
     
    451470then
    452471   CPP_KEY="$CPP_KEY CPP_SISVAT"
     472   src_dirs="$src_dirs phy${physique}/sisvat"
    453473fi
    454474
     
    456476then
    457477   CPP_KEY="$CPP_KEY CPP_RRTM"
     478   src_dirs="$src_dirs phy${physique}/rrtm"
    458479fi
    459480
     
    507528cd $LIBFGCM/grid/dimension
    508529./makdim $dim
     530if (($? != 0))
     531then
     532    exit 1
     533fi
     534
    509535cat $LIBFGCM/grid/dimensions.h
    510536cd $LMDGCM
     
    534560########################################################################
    535561
    536 dimension=`echo $dim | wc -w`
    537 echo dimension $dimension
    538 
    539 if (( $dimension == 3 )) ; then
     562if (( $dimc == 3 )) ; then
     563   src_dirs="$src_dirs $filtre dyn3d_common dyn3d${FLAG_PARA}"
     564   if [[ $physique != "nophys" ]] ; then
     565     src_dirs="$src_dirs dynlonlat_phylonlat dynlonlat_phylonlat/phy${phys_root}"
     566     libdyn_phy="-ldynlonlat_phylonlat"
     567     LIBDYN_PHYS='$(LIBO)/libdynlonlat_phylonlat.a'
     568     INCLUDE="$INCLUDE "'-I$(LIBF)/dynlonlat_phylonlat'
     569     INCLUDE="$INCLUDE "'-I$(LIBF)/dynlonlat_phylonlat/'"${phys_root}"
     570   fi
    540571  cd $LIBFGCM/grid
    541572  \rm fxyprim.h
     
    543574  filtre="FILTRE=$filtre"
    544575  INCLUDE="$INCLUDE "'-I$(LIBF)/dyn3d${FLAG_PARA} -I$(LIBF)/dyn3d_common '
    545 elif (( $dimension == 2 )) ; then
     576elif (( $dimc == 2 )) ; then
     577   src_dirs="$src_dirs dyn2d"
    546578   filtre="FILTRE= L_FILTRE= "
    547579   INCLUDE="$INCLUDE "'-I$(LIBF)/dyn2d'
    548 elif (( $dimension == 1 )) ; then
     580elif (( $dimc == 1 )) ; then
    549581   echo pas de dynamique
     582   src_dirs="$src_dirs phy${physique}/dyn1d"
    550583   CPP_KEY="$CPP_KEY CPP_1D"
    551    filtre="L_DYN= DYN= FILTRE= L_FILTRE= DIRMAIN=phy$physique "
    552    INCLUDE="$INCLUDE "'-I$(LIBF)/dyn3d -I$(LIBF)/dyn3d_common ' # Pas tres propre
     584   filtre="L_DYN= DYN= FILTRE= L_FILTRE= "
     585   #INCLUDE="$INCLUDE "'-I$(LIBF)/dyn3d -I$(LIBF)/dyn3d_common ' # Pas tres propre
     586   INCLUDE="$INCLUDE "' -I$(LIBF)/phy'"$physique"'/dyn1d'
    553587else
    554588   echo Dimension dimc=$dimc pas prevu ; exit
     
    588622########################################################################
    589623cd $LMDGCM
    590 find libf -name '*.[Fh]' -print | sort > tmp77
    591 find libf -name '*.[Fh]' -exec egrep -i " *use *ioipsl" {} \; -print | sort > tmp90
    592 find libf -name '*.F90' -print | sort >> tmp90
     624
     625
     626if [[ -r .makelmdz ]]
     627then
     628old_lmdz_configuration=$(cat .makelmdz )
     629else
     630old_lmdz_configuration=""
     631fi
     632lmdz_configuration="$src_dirs"
     633if [[ "$lmdz_configuration" != "$old_lmdz_configuration" ]]
     634then
     635  configuration_change="true"
     636else
     637  configuration_change="false"
     638fi
     639
     640mkdir -p make_dir
     641suf_make=`echo $src_dirs | sed -e 's/\//_/g' -e 's/ /_/g'`
     642echo suf_make $suf_make
     643
     644\rm tmp77 tmp90
     645for dir in $src_dirs ; do
     646find libf/$dir -name '*.[Fh]' -print | sort >> tmp77
     647find libf/$dir -name '*.F90' -print | sort >> tmp90
    593648######### CAS PARTICULIER CHIMIE TITAN
    594649if [[ "$physique" == "titan" ]]
     
    597652fi
    598653#########
    599 
    600 if [[ ! ( -r makefile ) || ! ( -r liste_des_sources_f90 ) || ! ( -r liste_des_sources_f77 ) || ` diff tmp77 liste_des_sources_f77 | wc -w ` -ne 0 || ` diff tmp90 liste_des_sources_f90 | wc -w ` -ne 0 ]]
     654done
     655
     656liste77=make_dir/liste_des_sources_f77_$suf_make
     657liste90=make_dir/liste_des_sources_f90_$suf_make
     658if [[ "$physique" == "titan" ]] ; then
     659listeC=make_dir/liste_des_sources_C_$suf_make
     660fi
     661makefile=make_dir/makefile_$suf_make
     662
     663if [[ $configuration_change == "true" || ! ( -r makefile ) || ! ( -r $liste_90 ) || ! ( -r $liste_77 ) || ` diff tmp77 $liste_77 | wc -w ` -ne 0 || ` diff tmp90 $liste_90 | wc -w ` -ne 0 ]]
    601664then
    602665  echo "les fichiers suivants ont ete crees ou detruits"
    603666  echo "ou les fichiers suivants sont passes ou ne sont plus en Fortran 90"
    604   diff liste_des_sources_f77 tmp77
    605   diff liste_des_sources_f90 tmp90
    606   \cp -f tmp77 liste_des_sources_f77
    607   \cp -f tmp90 liste_des_sources_f90
     667  diff $liste77 tmp77
     668  diff $liste90 tmp90
     669  \cp -f tmp77 $liste77
     670  \cp -f tmp90 $liste90
    608671######### CAS PARTICULIER CHIMIE TITAN
    609672  if [[ "$physique" == "titan" ]]
    610673  then
    611   diff liste_des_sources_C tmpC
    612   \cp -f tmpC liste_des_sources_C
     674  diff $listeC tmpC
     675  \cp -f tmpC $listeC
    613676  fi
    614677#########
    615   echo "on recree le makefile"
    616   ./create_make_gcm > tmp
    617   \mv -f tmp makefile
    618   echo "Nouveau makefile cree"
     678  echo "Recreating the makefile"
     679  echo "src_dirs: $src_dirs"
     680  ./create_make_gcm $src_dirs > tmp
     681  \mv -f tmp $makefile
     682  echo "New makefile created"
    619683######### CAS PARTICULIER CHIMIE TITAN
    620684else if [[ "$physique" == "titan" ]]
    621685 then
    622    if [[ ! ( -r liste_des_sources_C ) || ` diff tmpC liste_des_sources_C | wc -w ` -ne 0 ]]
     686   if [[ ! ( -r $listeC ) || ` diff tmpC $listeC | wc -w ` -ne 0 ]]
    623687   then
    624      diff liste_des_sources_C tmpC
    625      \cp -f tmpC liste_des_sources_C
     688     diff $listeC tmpC
     689     \cp -f tmpC $listeC
    626690     echo "on recree le makefile"
    627      ./create_make_gcm > tmp
    628      \mv -f tmp makefile
     691     ./create_make_gcm $src_dirs > tmp
     692     \mv -f tmp $makefile
    629693     echo "Nouveau makefile cree"
    630694   fi
     
    633697fi
    634698
     699ln -sf $makefile makefile
     700
     701#Create a .makelmdz file containing main compilation option for later comparisons
     702echo "$lmdz_configuration" > .makelmdz
     703
    635704#################################################################
    636705# Preparation de l'execution de la commande make
     
    641710then
    642711  source_code=${code}.F
    643   code_dir=dyn${dimc}d${FLAG_PARA}
     712  dirmain=dyn${dimc}d${FLAG_PARA}
    644713else
    645714  if [[ -r $LMDGCM/libf/dyn${dimc}d${FLAG_PARA}/${code}.F90 ]]
    646715  then
    647716    source_code=${code}.F90
    648     code_dir=dyn${dimc}d${FLAG_PARA}
     717    dirmain=dyn${dimc}d${FLAG_PARA}
    649718  else
    650719    if [[ -r $LMDGCM/libf/phy${physique}/${code}.F ]]
    651720    then
    652721      source_code=${code}.F
    653       code_dir=phy${physique}
     722      dirmain=phy${physique}
    654723    else
    655       # last possibility:
    656724      if [[ -r $LMDGCM/libf/phy${physique}/${code}.F90 ]]
    657725      then
    658726        source_code=${code}.F90
    659         code_dir=phy${physique}
     727        dirmain=phy${physique}
    660728      else
    661         echo "Error: cannot find ${code}.F[90]"
    662         echo " neither in dyn${dimc}d${FLAG_PARA} nor in phy${physique}"
    663         exit
     729        if [[ -r $LMDGCM/libf/dynlonlat_phylonlat/phy$phys_root/${code}.F ]]
     730        then
     731          source_code=${code}.F
     732          dirmain="dynlonlat_phylonlat/phy${phys_root}"
     733        else
     734          if [[ -r $LMDGCM/libf/phy$physique/dyn1d/${code}.F ]]
     735          then
     736            source_code=${code}.F
     737            dirmain=phy$physique/dyn1d
     738          else
     739            echo "Error: cannot find ${code}.F[90]"
     740            echo " neither in dyn${dimc}d${FLAG_PARA} nor in phy${physique}"
     741            exit
     742          fi
     743        fi
    664744      fi
    665745    fi
     
    684764then
    685765  INCLUDE="$INCLUDE"' -I$(LIBF)/phy'"$physique"
    686   phys="PHYS=$physique"
    687 else
    688   # trick to avoid having a physics-related library in the makefile
    689   phys="L_PHY= LIBPHY="
    690 fi
    691 if (( $dimension == 1 ))
    692 then
    693  INCLUDE="$INCLUDE"' -I$(LIBF)/dyn3d -I'${LIBOGCM}/${nomlib}
    694 else
    695  INCLUDE="$INCLUDE"' -I$(LIBF)/dyn'${dimc}'d'$FLAG_PARA' -I'${LIBOGCM}/${nomlib}
    696 fi
     766#  phys="PHYS=$physique"
     767#else
     768#  # trick to avoid having a physics-related library in the makefile
     769#  phys="L_PHY= LIBPHY="
     770fi
     771INCLUDE="$INCLUDE"' -I'${LIBOGCM}/${nomlib}
     772#if (( $dimension == 1 ))
     773#then
     774# INCLUDE="$INCLUDE"' -I$(LIBF)/dyn3d -I'${LIBOGCM}/${nomlib}
     775#else
     776#INCLUDE="$INCLUDE"' -I$(LIBF)/dyn'${dimc}'d'$FLAG_PARA' -I'${LIBOGCM}/${nomlib}
     777#fi
    697778
    698779# ranlib utility (check it exists or else default to ls)
     
    727808$filtre \
    728809LIBO=${LIBOGCM}/${nomlib} \
    729 $phys \
     810"PHYS=$physique" \
     811LIBPHY=${LIBPHY} \
     812LIBDYN_PHYS=${LIBDYN_PHYS} \
    730813DIM=$dimc \
    731814FLAG_PARA=$FLAG_PARA \
     815L_PHY="$lib_phy" \
     816L_DYN_PHY="$libdyn_phy" \
    732817L_ADJNT=$adjnt \
    733818L_COSP="$lcosp" \
     
    744829MOD_SUFFIX="mod" \
    745830AR=$arcommand \
    746 DIRMAIN=$code_dir \
     831DIRMAIN=$dirmain \
    747832SOURCE=$source_code \
    748833PROG=$code
     
    758843$filtre \
    759844LIBO=${LIBOGCM}/${nomlib} \
    760 $phys \
     845"PHYS=$physique" \
     846LIBPHY=${LIBPHY} \
     847LIBDYN_PHYS=${LIBDYN_PHYS} \
    761848DIM=$dimc \
    762849FLAG_PARA=$FLAG_PARA \
     850L_PHY="$lib_phy" \
     851L_DYN_PHY="$libdyn_phy" \
    763852L_ADJNT="$adjnt" \
    764853L_COSP="$lcosp" \
     
    775864MOD_SUFFIX="mod" \
    776865AR=$arcommand \
    777 DIRMAIN=$code_dir \
     866DIRMAIN=$dirmain \
    778867SOURCE=$source_code \
    779868PROG=$code
  • trunk/LMDZ.COMMON/makelmdz_fcm

    r1391 r1403  
    4040LIBOGCM=$LMDGCM/libo
    4141LIBFGCM=$LMDGCM/libf
     42DYN_COMMON_PATH=$LIBFGCM/dyn3d_common
    4243# path for optional packages, but default set to ".void_dir"
     44FILTRE_PATH=$LMDGCM/.void_dir
     45DYN_PHYS_PATH=$LMDGCM/.void_dir
     46DYN_PHYS_SUB_PATH=$LMDGCM/.void_dir
    4347RRTM_PATH=$LMDGCM/.void_dir
    4448SISVAT_PATH=$LMDGCM/.void_dir
     
    8791[-chimie INCA/false]       : (Earth) with INCA chemistry model or without (default: false)
    8892[-cosp cosp/false]         : (Earth) add the cosp model (default: false)
     93[-sisvat true/false]  : (Earth) compile with/without sisvat package (default: false)
     94[-rrtm true/false]    : (Earth) compile with/without rrtm package (default: false)
    8995[-parallel none/mpi/omp/mpi_omp] : parallelism (default: none) : mpi, openmp or mixted mpi_openmp
    9096[-g GRI]                   : grid configuration in dyn3d/GRI_xy.h  (default: reg, inclues a zoom)
     
    236242fi
    237243
     244phys_root=$physique
     245if [[ "${physique:0:3}" == "lmd" ]] ; then phys_root=lmd ; fi
     246if [[ "${physique:0:3}" == "mar" ]] ; then phys_root=mar ; fi
     247if [[ "${physique:0:4}" == "mars" ]] ; then phys_root=mars ; fi
     248if [[ "${physique:0:3}" == "std" ]] ; then phys_root=std ; fi
     249if [[ "${physique:0:5}" == "venus" ]] ; then phys_root=venus ; fi
     250if [[ "${physique:0:5}" == "titan" ]] ; then phys_root=titan ; fi
     251if [[ "${physique:0:3}" == "dev" ]] ; then phys_root=dev ; fi
     252
    238253if [[ "$physique" != "nophys" ]]
    239254then
    240255   #We'll use some physics
    241256   CPP_KEY="$CPP_KEY CPP_PHYS"
    242    if [[ "${physique:0:3}" == "lmd" ]]
     257   if [[ "${phys_root}" == "lmd" ]]
    243258   then
    244259   #For lmd physics, default planet type is Earth
    245260   CPP_KEY="$CPP_KEY CPP_EARTH"
    246261   fi
     262   # set the dyn/phys interface path
     263   DYN_PHYS_PATH="${LIBFGCM}/dynlonlat_phylonlat"
     264   DYN_PHYS_SUB_PATH="${LIBFGCM}/dynlonlat_phylonlat/phy${phys_root}"
     265fi
     266
     267if [[ "$filtre" == "filtrez" ]]
     268then
     269   FILTRE_PATH=${LIBFGCM}/$filtre
    247270fi
    248271
     
    360383fi
    361384
    362 if [[ "$physique" == "titan" ]]
     385# for Titan (but could be used by others as well), there is also "chimtitan"
     386if [[ -d ${LIBFGCM}/chim${physique} ]]
    363387then
    364388   CHEM_PATH="${LIBFGCM}/chim${physique}"
     
    463487if (( $dimension == 1 ))
    464488then
     489  CPP_KEY="$CPP_KEY CPP_1D"
    465490##in 1D, add dyn3d to include path (because main prog is in physics)
    466   INCLUDE="$INCLUDE -Ilibf/dyn3d"
    467 #  echo pas de dynamique
    468 #  dyn="DYN= L_DYN=-ldyn3d "
     491  INCLUDE="$INCLUDE -Ilibf/dyn3d -Ilibf/dyn3d_common"
     492## no filtre in 1d:
     493  FILTRE_PATH=$LMDGCM/.void_dir
     494## no need to compile all routines in dyn3d_common either:
     495  DYN_COMMON_PATH=$LMDGCM/.void_dir
     496## no need to compile all routines in dynlmdz_phy... ;
     497## (because key ones are included in 1D main program)
     498  DYN_PHYS_PATH=$LMDGCM/.void_dir
     499  DYN_PHYS_SUB_PATH=$LMDGCM/.void_dir
    469500fi
    470501
     
    523554else
    524555  SUFF_NAME=${SUFF_NAME}_seq
    525   DYN=dyn${dimc}d
    526   ## specific stuff for 1D model (needs includes which are in dyn3d)
    527   if (( $dimension == 1 )) ; then
    528     SUFF_NAME=${SUFF_NAME}
    529     DYN=dyn3d
     556  if (( $dimension == 1 ))
     557  then
     558    # dynamics-related routines in"dyn1d" subdirectory of phy${physique}
     559    DYN=phy${physique}/dyn1d
     560  else
     561    DYN=dyn${dimc}d
    530562  fi
    531563fi
     
    561593echo "%LIBO          $LIBOGCM"       >> $config_fcm
    562594echo "%DYN           $DYN"           >> $config_fcm
     595echo "%DYN_COMMON    $DYN_COMMON_PATH" >> $config_fcm
     596echo "%FILTRE        $FILTRE_PATH"   >> $config_fcm
    563597echo "%PHYS          phy${physique}" >> $config_fcm
     598echo "%DYN_PHYS      $DYN_PHYS_PATH" >> $config_fcm
     599echo "%DYN_PHYS_SUB  $DYN_PHYS_SUB_PATH" >> $config_fcm
    564600echo "%RRTM          $RRTM_PATH"     >> $config_fcm
    565601echo "%SISVAT        $SISVAT_PATH"   >> $config_fcm
     
    594630ln -s $LIBOGCM/${arch}${SUFF_NAME}/.config/tmp tmp_src
    595631
    596 #eventual cleanup for SISVAT
    597 #sed -e 's/^src::sisvat/#src::sisvat/' bld.cfg > bld.tmp
    598 #mv bld.tmp bld.cfg
    599 
    600 #eventual cleanup for RRTM
    601 #sed -e 's/^src::rrtm/#src::rrtm/' bld.cfg > bld.tmp
    602 #mv bld.tmp bld.cfg
    603 
    604632
    605633if [[ -r $LIBFGCM/grid/dimensions.h ]]
  • 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
  • trunk/LMDZ.MARS/README

    r1399 r1403  
    21682168- Follow-up to cleanup in dynamics/physics interface. Add iniprint.h to be
    21692169  in line with what is done in LMDZ.COMMON dynamics.
     2170
     2171== 31/03/2015 == EM
     2172- Reorganizing the physics/dynamics interface, for better compatibility
     2173  between models and with the parallel LMDZ.COMMON dyn core. Main structural
     2174  changes are:
     2175* misc: (replaces what was the "bibio" directory)
     2176- Should only contain extremely generic (and non physics or
     2177  dynamics-specific) routines
     2178* dynlonlat_phylonlat: (new interface directory)
     2179- This directory contains routines relevent to physics/dynamics grid
     2180  interactions, e.g. routines gr_dyn_fi or gr_fi_dyn and calfis
     2181- Moreover the dynlonlat_phylonlat contains directory "phymars".
     2182  This subdirectories should only contain specific interfaces (e.g.
     2183  iniphysiq) or main programs (e.g. newstart or xvik).
     2184* phymars/dyn1d: this subdirectory contains the 1D model.
  • 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
  • trunk/LMDZ.MARS/libf/dyn3d/gcm.F

    r1395 r1403  
    55     &                       nday_r, idissip, iconser, ecritstart,
    66     &                       ecritphy
     7      use filtreg_mod, only: inifilr
    78!      use comgeomphy, only: initcomgeomphy
    89      IMPLICIT NONE
     
    107108
    108109      EXTERNAL caldyn, traceur
    109       EXTERNAL dissip,geopot,iniconst,inifilr
     110      EXTERNAL dissip,geopot,iniconst
    110111      EXTERNAL integrd,SCOPY
    111112      EXTERNAL inigeom
  • trunk/LMDZ.MARS/libf/dyn3d/logic.h

    r38 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,hybrid
     4      COMMON/logic/ purmats,physic,forward,leapf,apphys,grireg,         &
     5     &  statcl,conser,apdiss,apdelq,saison,ecripar,fxyhypb,ysinus,hybrid
    66
    7       LOGICAL purmats,physic,forward,leapf,apphys,grireg,statcl,conser,
    8      * apdiss,apdelq,saison,ecripar,fxyhypb,ysinus,hybrid
     7      LOGICAL purmats,physic,forward,leapf,apphys,grireg,statcl,conser, &
     8     & apdiss,apdelq,saison,ecripar,fxyhypb,ysinus,hybrid
    99
    10 c-----------------------------------------------------------------------
     10!-----------------------------------------------------------------------
  • trunk/LMDZ.MARS/libf/dyn3d/serre.h

    r38 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.MARS/libf/dynlonlat_phylonlat/phymars/datareadnc.F

    r1401 r1403  
    228228      if (k.eq.4) then
    229229
    230           call multscal(imd*jmdp1,zdata,1000.,zdata)
    231           call multscal(imd,longitude,pi/180.,longitude)
    232           call multscal(jmdp1,latitude,pi/180.,latitude)
     230          zdata(:)=1000.*zdata(:)
     231          longitude(:)=(pi/180.)*longitude(:)
     232          latitude(:)=(pi/180.)*latitude(:)
    233233
    234234          call grid_noro1(360, 180, longitude, latitude, zdata,
     
    299299c-----------------------------------------------------------------------
    300300
    301       DO i=1,iimp1*jjp1
    302             phisinit(i)=1000.*phisinit(i)
    303       ENDDO
     301      phisinit(1:iimp1*jjp1)=1000.*phisinit(1:iimp1*jjp1)
    304302      CALL dump2d(iimp1,jjp1,phisinit,'Altitude in m')
    305       CALL multscal(iimp1*jjp1,phisinit,g,phisinit)
     303      phisinit(:)=g*phisinit(:)
    306304
    307305c-----------------------------------------------------------------------
  • trunk/LMDZ.MARS/libf/dynlonlat_phylonlat/phymars/newstart.F

    r1401 r1403  
    3434      use turb_mod, only: q2
    3535      use comgeomfi_h, only: ini_fillgeom
    36 
     36      use filtreg_mod, only: inifilr
    3737
    3838      implicit none
     
    137137      integer flagthermo, flagh2o
    138138      character modif*20
    139       real z_reel(iip1,jjp1)
    140139      real tsud,albsud,alb_bb,ith_bb,Tiso
    141140      real ptoto,pcap,patm,airetot,ptotn,patmn
     
    545544        if (trim(modif) .eq. 'flat') then
    546545c         set topo to zero
    547           CALL initial0(ip1jmp1,z_reel)
    548           CALL multscal(ip1jmp1,z_reel,g,phis)
     546          phis(:,:)=0
    549547          CALL gr_dyn_fi(1,iip1,jjp1,ngridmx,phis,phisfi)
    550548          write(*,*) 'topography set to zero.'
  • trunk/LMDZ.MARS/libf/dynlonlat_phylonlat/phymars/start2archive.F

    r1401 r1403  
    2424      use comsoil_h, only: ini_comsoil_h
    2525      use comgeomphy, only: initcomgeomphy
     26      use filtreg_mod, only: inifilr
    2627      implicit none
    2728
  • trunk/LMDZ.MARS/libf/dynlonlat_phylonlat/phymars/xvik.F

    r1401 r1403  
    11      PROGRAM xvik
     2
     3      USE filtreg_mod, ONLY: inifilr
     4
    25      IMPLICIT NONE
    36c=======================================================================
     
    7780
    7881      EXTERNAL iniconst,inigeom,covcont,mywrite
    79       EXTERNAL inifilr,exner,pbar
     82      EXTERNAL exner,pbar
    8083      EXTERNAL solarlong,coordij,moy2
    8184      EXTERNAL SSUM
    8285      REAL SSUM
    83       EXTERNAL lnblnk
    84       INTEGER lnblnk
    8586
    8687cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc
     
    157158
    158159      firstcal=.true.
    159       DO WHILE(lnblnk(nomfich).GT.0.AND.lnblnk(nomfich).LT.50)
     160      DO WHILE(len_trim(nomfich).GT.0.AND.len_trim(nomfich).LT.50)
    160161      PRINT *,'>>>  nomfich : ',trim(nomfich)
    161162
    162163c%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    163164
    164       file=pathchmp(1:lnblnk(pathchmp))//'/'//
    165      s     nomfich(1:lnblnk(nomfich))
    166       PRINT*,'file.nc: ', file(1:lnblnk(file))//'.nc'
     165      file=pathchmp(1:len_trim(pathchmp))//'/'//
     166     s     nomfich(1:len_trim(nomfich))
     167      PRINT*,'file.nc: ', file(1:len_trim(file))//'.nc'
    167168      PRINT*,'timestep ',dtvr
    168169
    169170      IF(nc) THEN
    170       ierr= NF_OPEN(file(1:lnblnk(file))//'.nc',NF_NOWRITE,nid)       
     171      ierr= NF_OPEN(file(1:len_trim(file))//'.nc',NF_NOWRITE,nid)       
    171172      ELSE
    172173         PRINT*,'Ouverture binaire ',file
     
    179180c   ------------------------------
    180181
    181       CALL readhead_NC(file(1:lnblnk(file))//'.nc',day0,phis,constR)
     182      CALL readhead_NC(file(1:len_trim(file))//'.nc',day0,phis,constR)
    182183
    183184      WRITE (*,*) 'day0 = ' , day0
  • trunk/LMDZ.MARS/libf/filtrez/coefils.h

    r38 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.MARS/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.MARS/libf/filtrez/parafilt.h

    r38 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)
    2323        PARAMETER (nfilun=9,nfilus=9,nfilvn=9,nfilvs=9)
    24 c 96 72 19 non-zoom:
    25 ccc      PARAMETER (nfilun=12, nfilus=11, nfilvn=12, nfilvs=12)
    26 c
    27 c        PARAMETER ( nfilun=20, nfilus=20, nfilvn=20, nfilvs=20 )
    28 c        PARAMETER ( nfilun=8, nfilus=7, nfilvn=7, nfilvs=7 )
    29 c
    30 c
    31 c      Ici , on a exagere  les nombres de lignes de latitudes a filtrer .
    32 c
    33 c      La premiere fois que  le Gcm  rentrera  dans le Filtre ,
    34 c
    35 c      il indiquera  les bonnes valeurs  de  nfilun , nflius, nfilvn  et
    36 c
    37 c      nfilvs  a  mettre .  Il suffira alors de changer ces valeurs dans
    38 c
    39 c      Parameter  ci-dessus  et de relancer  le  run . 
     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 . 
    4040
  • trunk/LMDZ.MARS/makegcm_g95

    r1246 r1403  
    88set physique=mars
    99set phys="PHYS=$physique"
    10 set include='-I$(LIBF)/grid -I$(LIBF)/bibio -I. -I$(LIBF)/aeronomars'
     10set include='-I$(LIBF)/grid -I$(LIBF)/misc -I. -I$(LIBF)/dynlonlat_phylonlat'
    1111set ntrac = 1
    1212set filtre=filtrez
     
    1414set dyntype="dyn"
    1515set full=""
     16#src_dirs: directories containing source files
     17set src_dirs="grid misc"
     18
    1619########################################################################
    1720# path a changer contenant les sources et les objets du modele
    1821########################################################################
    1922
    20 ##### If you want you can set environment variables here (instead of
    21 #####  relying on the C-shell environment variables)
    22 ## default LMDGCM to where makegcm script is located:
    23 #set scriptdir=`dirname $0`
    24 #setenv LMDGCM `readlink -f $scriptdir`
    25 ## You may set LIBOGCM to something else; otherwise we default to:
    26 #setenv LIBOGCM $LMDGCM/libo
    27 ### NetCDF Libraries: what follows is OK for LMD 32 and 64bit Linux Machines
    28 ##if ( `uname -m` == "x86_64" ) then
    29 ### 64 bit machines
    30 #  setenv NCDFLIB /donnees/emlmd/netcdf64-4.0.1_g95/lib
    31 #  setenv NCDFINC /donnees/emlmd/netcdf64-4.0.1_g95/include
    32 ##else
    33 ##  setenv NCDFLIB /donnees/emlmd/netcdf-4.0.1_g95/lib
    34 ##  setenv NCDFINC /donnees/emlmd/netcdf-4.0.1_g95/include
    35 ##endif
    36 #####
     23#### If you want you can set environment variables here (instead of
     24####  relying on the C-shell environment variables)
     25# default LMDGCM to where makegcm script is located:
     26set scriptdir=`dirname $0`
     27setenv LMDGCM `readlink -f $scriptdir`
     28# You may set LIBOGCM to something else; otherwise we default to:
     29setenv LIBOGCM $LMDGCM/libo
     30## NetCDF Libraries: what follows is OK for LMD 32 and 64bit Linux Machines
     31#if ( `uname -m` == "x86_64" ) then
     32# 64 bit machines
     33  setenv NCDFLIB /donnees/emlmd/netcdf64-4.0.1_g95/lib
     34  setenv NCDFINC /donnees/emlmd/netcdf64-4.0.1_g95/include
     35#else
     36#  setenv NCDFLIB /donnees/emlmd/netcdf-4.0.1_g95/lib
     37#  setenv NCDFINC /donnees/emlmd/netcdf-4.0.1_g95/include
     38#endif
     39####
    3740
    3841setenv localdir "`pwd`"
     
    183186# Ehouarn 'g95' compiler
    184187   set optim="-O3 -fstatic -funroll-loops "
    185    set optim90=" -O3 -fstatic -funroll-loops "
    186    set optimtru90=" -O3 -fstatic -funroll-loops "
    187 #   set opt_link=" -Mfree -L/usr/local/pgi/linux86/lib -lpgf90 -lpgftnrtl -lpghpf -lpghpf2 -L$NCDFLIB -lnetcdf -Wl,-Bstatic "
    188 # Ehouarn: there is no /usr/local/pgi/linux86/lib, but it doesn't matter
    189 #          also changed -Wl,-Bstatic to -Bstatic
     188   set optim90="-O3 -fstatic -funroll-loops "
     189   set optimtru90="-O3 -fstatic -funroll-loops "
     190#
    190191   set opt_link=" -L$NCDFLIB -lnetcdf "
    191192   set mod_loc_dir=$localdir
     
    217218endif
    218219
    219 # Ehouarn: add 'g95' string to pathname
     220# Ehouarn: add 'g9fortran' string to pathname
    220221set nomlib=${machine}_g95
    221222
     
    405406if ( "$physique" == 'nophys' ) then
    406407   set phys="L_PHY= LIBPHY="
    407 endif
    408 
     408else
     409   set src_dirs="$src_dirs aerono$physique phy$physique"
     410   set include="$include "'-I$(LIBF)/aerono'"$physique"' -I$(LIBF)/phy'"$physique"
     411endif
     412set libdyn_phy=""
     413set LIBDYN_PHYS=""
    409414########################################################################
    410415# choix du nombre de traceur par defaut si il n'a pas ete choisi,
     
    488493  set include="$include "'-I$(LIBF)/dyn2d '
    489494  set dimh=$dim
    490 else
     495endif
     496if ( "$dimc" == "3" ) then
    491497  if ( "$dyntype" == "olddyn" ) then
    492498    set include="$include "'-I$(LIBF)/olddyn3d '
     499    set src_dirs="$src_dirs olddyn3d dynlonlat_phylonlat dynlonlat_phylonlat/phy$physique"
    493500  else
    494501    set include="$include "'-I$(LIBF)/dyn3d '
     502    set src_dirs="$src_dirs dyn3d dynlonlat_phylonlat dynlonlat_phylonlat/phy$physique"
    495503  endif
     504  set libdyn_phy="-ldynlonlat_phylonlat"
     505  set LIBDYN_PHYS='$(LIBO)/libdynlonlat_phylonlat.a'
    496506  set dimh=`echo $dim | awk ' { print $1 "." $2 } '`
    497507endif
     
    532542cat $libf/grid/dimensions.h
    533543
    534 #
    535544cd $LMDGCM
    536545# set path to objects directory
     
    553562## NB: we still need to have L_DYN=libdyn3d to reach routines and module
    554563## objects which are located in dyn3d
    555   set dyn="L_DYN=-ldyn3d DYN= L_FILTRE= DIRMAIN=phy$physique "
     564  set dyntype=""
     565  set filtre="L_DYN= DYN= FILTRE= L_FILTRE= "
     566  set dyn="L_DYN= DYN= L_FILTRE= "
     567  set dirmain="phy$physique/dyn1d"
     568  set src_dirs="$src_dirs phy$physique/dyn1d "
     569  set include="$include "' -I$(LIBF)/phy'"$physique"'/dyn1d'
    556570endif
    557571endif
     
    593607if ( `expr $dimc \> 2` == 1 ) then
    594608   set filtre="FILTRE=$filtre"
     609   if ( "$dyntype" == "olddyn" ) then
     610     set src_dirs="$src_dirs oldfiltrez"
     611   else
     612     set src_dirs="$src_dirs filtrez"
     613   endif
    595614else
    596    set filtre="FILTRE= L_FILTRE= "
     615   set filtre="FILTRE= L_FILTRE= L_DYN= "
    597616endif
    598617echo "MACRO FILTRE $filtre"
     
    636655        \cp tmp90 liste_des_sources_f90
    637656        echo "On recree le makefile"
    638         if ("$dyntype" == "olddyn") then
    639           ./create_make_gcm olddyn3d grid bibio aeronomars phy$physique >! tmp
    640         else
    641           ./create_make_gcm dyn3d grid bibio aeronomars phy$physique >! tmp
    642         endif
     657        echo "src_dirs: $src_dirs"
     658        create_make_gcm $src_dirs >! tmp
    643659        \mv tmp makefile
    644660        echo "Nouveau makefile cree."
     
    721737else if $LINUX then
    722738# Ehouarn : adapt to g95
    723  set optim="$optim -fmod=$libo"
    724  set optim90="$optim90 -fmod=$libo"
    725  set optimtru90="$optimtru90 -fmod=$libo"
     739 set optim="$optim -fmod=${libo}"
     740 set optim90="$optim90 -fmod=${libo}"
     741 set optimtru90="$optimtru90 -fmod=${libo}"
    726742# Ehouarn: remove set mod_loc_dir def below; mod_loc_dir=$localdir (set above)
    727743# set mod_loc_dir=$libo
     
    741757cd $localdir
    742758
    743 ## locate main program (could be in dyn3d or phy$physique
    744 ##                      and could be .F or .F90)
     759## locate main program (could be in dyn3d or dynlonlat_phylonlat/phy$physique
     760##  or phy$physique/dyn1d   and could be .F or .F90)
    745761set source_code=${code}.F
     762set dirmain=dyn${dimc}d
    746763if ( -f $LMDGCM/libf/dyn3d/${code}.F90 ) then
    747764  set source_code=${code}.F90
    748765endif
    749 if ( -f $LMDGCM/libf/phy${physique}/${code}.F ) then
     766if ( -f $LMDGCM/libf/phy${physique}/dyn1d/${code}.F ) then
     767  set dirmain=phy${physique}/dyn1d
    750768  set source_code=${code}.F
    751769endif
    752 if ( -f $LMDGCM/libf/phy${physique}/${code}.F90 ) then
     770if ( -f $LMDGCM/libf/phy${physique}/dyn1d/${code}.F90 ) then
     771  set dirmain=phy${physique}/dyn1d
    753772  set source_code=${code}.F90
    754773endif
    755 
    756 ## locate directory where main program is located
    757 if ( $dimension == 3 ) then
    758   if ( -f $LMDGCM/libf/dyn3d/${source_code} ) then
    759     set dyn="DIRMAIN=dyn3d "
    760   endif
    761   if ( -f $LMDGCM/libf/phy${physique}/${source_code} ) then
    762     set dyn="DIRMAIN=phy${physique} "
    763   endif
     774if ( -f $LMDGCM/libf/dynlonlat_phylonlat/phy${physique}/${code}.F ) then
     775  set dirmain=dynlonlat_phylonlat/phy${physique}
     776  set source_code=${code}.F
     777endif
     778if ( -f $LMDGCM/libf/dynlonlat_phylonlat/phy${physique}/${code}.F90 ) then
     779  set dirmain=dynlonlat_phylonlat/phy${physique}
     780  set source_code=${code}.F90
    764781endif
    765782
     
    772789$filtre \
    773790LIBO=$libo \
    774 $dyn \
    775791$phys \
     792LIBDYN_PHYS=${LIBDYN_PHYS} \
    776793DIM=$dimc \
    777794DYNTYPE="$dyntype" \
     795L_DYN_PHY="$libdyn_phy" \
    778796L_ADJNT="$adjnt" \
    779797LOCAL_DIR="$localdir"  \
     
    786804MOD_SUFFIX=$mod_suffix \
    787805AR=$ar \
     806DIRMAIN=$dirmain \
    788807SOURCE=$source_code \
    789808PROG=$code
     
    798817$filtre \
    799818LIBO=$libo \
    800 $dyn \
    801819$phys \
     820LIBDYN_PHYS=${LIBDYN_PHYS} \
    802821DIM=$dimc \
    803822DYNTYPE="$dyntype" \
     823L_DYN_PHY="$libdyn_phy" \
    804824L_ADJNT="$adjnt" \
    805825LOCAL_DIR="$localdir"  \
     
    812832MOD_SUFFIX=$mod_suffix \
    813833AR=$ar \
     834DIRMAIN=$dirmain \
    814835SOURCE=$source_code \
    815836PROG=$code
    816837
    817 # cleanup, remove dimensions.h 
     838# cleanup, remove dimensions.h
    818839\rm -f $libf/grid/dimensions.h
  • trunk/LMDZ.MARS/makegcm_gfortran

    r1246 r1403  
    88set physique=mars
    99set phys="PHYS=$physique"
    10 set include='-I$(LIBF)/grid -I$(LIBF)/bibio -I. -I$(LIBF)/aeronomars'
     10set include='-I$(LIBF)/grid -I$(LIBF)/misc -I. -I$(LIBF)/dynlonlat_phylonlat'
    1111set ntrac = 1
    1212set filtre=filtrez
     
    1414set dyntype="dyn"
    1515set full=""
     16#src_dirs: directories containing source files
     17set src_dirs="grid misc"
     18
    1619########################################################################
    1720# path a changer contenant les sources et les objets du modele
     
    403406if ( "$physique" == 'nophys' ) then
    404407   set phys="L_PHY= LIBPHY="
    405 endif
    406 
     408else
     409   set src_dirs="$src_dirs aerono$physique phy$physique"
     410   set include="$include "'-I$(LIBF)/aerono'"$physique"' -I$(LIBF)/phy'"$physique"
     411endif
     412set libdyn_phy=""
     413set LIBDYN_PHYS=""
    407414########################################################################
    408415# choix du nombre de traceur par defaut si il n'a pas ete choisi,
     
    486493  set include="$include "'-I$(LIBF)/dyn2d '
    487494  set dimh=$dim
    488 else
     495endif
     496if ( "$dimc" == "3" ) then
    489497  if ( "$dyntype" == "olddyn" ) then
    490498    set include="$include "'-I$(LIBF)/olddyn3d '
     499    set src_dirs="$src_dirs olddyn3d dynlonlat_phylonlat dynlonlat_phylonlat/phy$physique"
    491500  else
    492501    set include="$include "'-I$(LIBF)/dyn3d '
     502    set src_dirs="$src_dirs dyn3d dynlonlat_phylonlat dynlonlat_phylonlat/phy$physique"
    493503  endif
     504  set libdyn_phy="-ldynlonlat_phylonlat"
     505  set LIBDYN_PHYS='$(LIBO)/libdynlonlat_phylonlat.a'
    494506  set dimh=`echo $dim | awk ' { print $1 "." $2 } '`
    495507endif
     
    550562## NB: we still need to have L_DYN=libdyn3d to reach routines and module
    551563## objects which are located in dyn3d
    552   set dyn="L_DYN=-ldyn3d DYN= L_FILTRE= DIRMAIN=phy$physique "
     564  set dyntype=""
     565  set filtre="L_DYN= DYN= FILTRE= L_FILTRE= "
     566  set dyn="L_DYN= DYN= L_FILTRE= "
     567  set dirmain="phy$physique/dyn1d"
     568  set src_dirs="$src_dirs phy$physique/dyn1d "
     569  set include="$include "' -I$(LIBF)/phy'"$physique"'/dyn1d'
    553570endif
    554571endif
     
    590607if ( `expr $dimc \> 2` == 1 ) then
    591608   set filtre="FILTRE=$filtre"
     609   if ( "$dyntype" == "olddyn" ) then
     610     set src_dirs="$src_dirs oldfiltrez"
     611   else
     612     set src_dirs="$src_dirs filtrez"
     613   endif
    592614else
    593    set filtre="FILTRE= L_FILTRE= "
     615   set filtre="FILTRE= L_FILTRE= L_DYN= "
    594616endif
    595617echo "MACRO FILTRE $filtre"
     
    633655        \cp tmp90 liste_des_sources_f90
    634656        echo "On recree le makefile"
    635         if ("$dyntype" == "olddyn") then
    636           ./create_make_gcm olddyn3d grid bibio aeronomars phy$physique >! tmp
    637         else
    638           ./create_make_gcm dyn3d grid bibio aeronomars phy$physique >! tmp
    639         endif
     657        echo "src_dirs: $src_dirs"
     658        create_make_gcm $src_dirs >! tmp
    640659        \mv tmp makefile
    641660        echo "Nouveau makefile cree."
     
    738757cd $localdir
    739758
    740 ## locate main program (could be in dyn3d or phy$physique
    741 ##                      and could be .F or .F90)
     759## locate main program (could be in dyn3d or dynlonlat_phylonlat/phy$physique
     760##  or phy$physique/dyn1d   and could be .F or .F90)
    742761set source_code=${code}.F
     762set dirmain=dyn${dimc}d
    743763if ( -f $LMDGCM/libf/dyn3d/${code}.F90 ) then
    744764  set source_code=${code}.F90
    745765endif
    746 if ( -f $LMDGCM/libf/phy${physique}/${code}.F ) then
     766if ( -f $LMDGCM/libf/phy${physique}/dyn1d/${code}.F ) then
     767  set dirmain=phy${physique}/dyn1d
    747768  set source_code=${code}.F
    748769endif
    749 if ( -f $LMDGCM/libf/phy${physique}/${code}.F90 ) then
     770if ( -f $LMDGCM/libf/phy${physique}/dyn1d/${code}.F90 ) then
     771  set dirmain=phy${physique}/dyn1d
    750772  set source_code=${code}.F90
    751773endif
    752 
    753 ## locate directory where main program is located
    754 if ( $dimension == 3 ) then
    755   if ( -f $LMDGCM/libf/dyn3d/${source_code} ) then
    756     set dyn="DIRMAIN=dyn3d "
    757   endif
    758   if ( -f $LMDGCM/libf/phy${physique}/${source_code} ) then
    759     set dyn="DIRMAIN=phy${physique} "
    760   endif
     774if ( -f $LMDGCM/libf/dynlonlat_phylonlat/phy${physique}/${code}.F ) then
     775  set dirmain=dynlonlat_phylonlat/phy${physique}
     776  set source_code=${code}.F
     777endif
     778if ( -f $LMDGCM/libf/dynlonlat_phylonlat/phy${physique}/${code}.F90 ) then
     779  set dirmain=dynlonlat_phylonlat/phy${physique}
     780  set source_code=${code}.F90
    761781endif
    762782
     
    769789$filtre \
    770790LIBO=$libo \
    771 $dyn \
    772791$phys \
     792LIBDYN_PHYS=${LIBDYN_PHYS} \
    773793DIM=$dimc \
    774794DYNTYPE="$dyntype" \
     795L_DYN_PHY="$libdyn_phy" \
    775796L_ADJNT="$adjnt" \
    776797LOCAL_DIR="$localdir"  \
     
    783804MOD_SUFFIX=$mod_suffix \
    784805AR=$ar \
     806DIRMAIN=$dirmain \
    785807SOURCE=$source_code \
    786808PROG=$code
     
    795817$filtre \
    796818LIBO=$libo \
    797 $dyn \
    798819$phys \
     820LIBDYN_PHYS=${LIBDYN_PHYS} \
    799821DIM=$dimc \
    800822DYNTYPE="$dyntype" \
     823L_DYN_PHY="$libdyn_phy" \
    801824L_ADJNT="$adjnt" \
    802825LOCAL_DIR="$localdir"  \
     
    809832MOD_SUFFIX=$mod_suffix \
    810833AR=$ar \
     834DIRMAIN=$dirmain \
    811835SOURCE=$source_code \
    812836PROG=$code
  • trunk/LMDZ.MARS/makegcm_ifort

    r1354 r1403  
    88set physique=mars
    99set phys="PHYS=$physique"
    10 set include='-I$(LIBF)/grid -I$(LIBF)/bibio -I. -I$(LIBF)/aeronomars'
     10set include='-I$(LIBF)/grid -I$(LIBF)/misc -I. -I$(LIBF)/dynlonlat_phylonlat'
    1111set ntrac = 1
    1212set filtre=filtrez
     
    1414set dyntype="dyn"
    1515set full=""
     16#src_dirs: directories containing source files
     17set src_dirs="grid misc"
     18
    1619########################################################################
    1720# path a changer contenant les sources et les objets du modele
     
    416419if ( "$physique" == 'nophys' ) then
    417420   set phys="L_PHY= LIBPHY="
    418 endif
    419 
     421else
     422   set src_dirs="$src_dirs aerono$physique phy$physique"
     423   set include="$include "'-I$(LIBF)/aerono'"$physique"' -I$(LIBF)/phy'"$physique"
     424endif
     425set libdyn_phy=""
     426set LIBDYN_PHYS=""
    420427########################################################################
    421428# choix du nombre de traceur par defaut si il n'a pas ete choisi,
     
    499506  set include="$include "'-I$(LIBF)/dyn2d '
    500507  set dimh=$dim
    501 else
     508endif
     509if ( "$dimc" == "3" ) then
    502510  if ( "$dyntype" == "olddyn" ) then
    503511    set include="$include "'-I$(LIBF)/olddyn3d '
     512    set src_dirs="$src_dirs olddyn3d dynlonlat_phylonlat dynlonlat_phylonlat/phy$physique"
    504513  else
    505514    set include="$include "'-I$(LIBF)/dyn3d '
     515    set src_dirs="$src_dirs dyn3d dynlonlat_phylonlat dynlonlat_phylonlat/phy$physique"
    506516  endif
     517  set libdyn_phy="-ldynlonlat_phylonlat"
     518  set LIBDYN_PHYS='$(LIBO)/libdynlonlat_phylonlat.a'
    507519  set dimh=`echo $dim | awk ' { print $1 "." $2 } '`
    508520endif
     
    563575## NB: we still need to have L_DYN=libdyn3d to reach routines and module
    564576## objects which are located in dyn3d
    565   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'
    566583endif
    567584endif
     
    603620if ( `expr $dimc \> 2` == 1 ) then
    604621   set filtre="FILTRE=$filtre"
     622   if ( "$dyntype" == "olddyn" ) then
     623     set src_dirs="$src_dirs oldfiltrez"
     624   else
     625     set src_dirs="$src_dirs filtrez"
     626   endif
    605627else
    606    set filtre="FILTRE= L_FILTRE= "
     628   set filtre="FILTRE= L_FILTRE= L_DYN= "
    607629endif
    608630echo "MACRO FILTRE $filtre"
     
    646668        \cp tmp90 liste_des_sources_f90
    647669        echo "On recree le makefile"
    648         if ("$dyntype" == "olddyn") then
    649           ./create_make_gcm olddyn3d grid bibio aeronomars phy$physique >! tmp
    650         else
    651           ./create_make_gcm dyn3d grid bibio aeronomars phy$physique >! tmp
    652         endif
     670        echo "src_dirs: $src_dirs"
     671        create_make_gcm $src_dirs >! tmp
    653672        \mv tmp makefile
    654673        echo "Nouveau makefile cree."
     
    750769cd $localdir
    751770
    752 ## locate main program (could be in dyn3d or phy$physique
    753 ##                      and could be .F or .F90)
     771## locate main program (could be in dyn3d or dynlonlat_phylonlat/phy$physique
     772##  or phy$physique/dyn1d   and could be .F or .F90)
    754773set source_code=${code}.F
     774set dirmain=dyn${dimc}d
    755775if ( -f $LMDGCM/libf/dyn3d/${code}.F90 ) then
    756776  set source_code=${code}.F90
    757777endif
    758 if ( -f $LMDGCM/libf/phy${physique}/${code}.F ) then
     778if ( -f $LMDGCM/libf/phy${physique}/dyn1d/${code}.F ) then
     779  set dirmain=phy${physique}/dyn1d
    759780  set source_code=${code}.F
    760781endif
    761 if ( -f $LMDGCM/libf/phy${physique}/${code}.F90 ) then
     782if ( -f $LMDGCM/libf/phy${physique}/dyn1d/${code}.F90 ) then
     783  set dirmain=phy${physique}/dyn1d
    762784  set source_code=${code}.F90
    763785endif
    764 
    765 ## locate directory where main program is located
    766 if ( $dimension == 3 ) then
    767   if ( -f $LMDGCM/libf/dyn3d/${source_code} ) then
    768     set dyn="DIRMAIN=dyn3d "
    769   endif
    770   if ( -f $LMDGCM/libf/phy${physique}/${source_code} ) then
    771     set dyn="DIRMAIN=phy${physique} "
    772   endif
     786if ( -f $LMDGCM/libf/dynlonlat_phylonlat/phy${physique}/${code}.F ) then
     787  set dirmain=dynlonlat_phylonlat/phy${physique}
     788  set source_code=${code}.F
     789endif
     790if ( -f $LMDGCM/libf/dynlonlat_phylonlat/phy${physique}/${code}.F90 ) then
     791  set dirmain=dynlonlat_phylonlat/phy${physique}
     792  set source_code=${code}.F90
    773793endif
    774794
     
    781801$filtre \
    782802LIBO=$libo \
    783 $dyn \
    784803$phys \
     804LIBDYN_PHYS=${LIBDYN_PHYS} \
    785805DIM=$dimc \
    786806DYNTYPE="$dyntype" \
     807L_DYN_PHY="$libdyn_phy" \
    787808L_ADJNT="$adjnt" \
    788809LOCAL_DIR="$localdir"  \
     
    795816MOD_SUFFIX=$mod_suffix \
    796817AR=$ar \
     818DIRMAIN=$dirmain \
    797819SOURCE=$source_code \
    798820PROG=$code
     
    807829$filtre \
    808830LIBO=$libo \
    809 $dyn \
    810831$phys \
     832LIBDYN_PHYS=${LIBDYN_PHYS} \
    811833DIM=$dimc \
    812834DYNTYPE="$dyntype" \
     835L_DYN_PHY="$libdyn_phy" \
    813836L_ADJNT="$adjnt" \
    814837LOCAL_DIR="$localdir"  \
     
    821844MOD_SUFFIX=$mod_suffix \
    822845AR=$ar \
     846DIRMAIN=$dirmain \
    823847SOURCE=$source_code \
    824848PROG=$code
    825849
    826 # cleanup, remove dimensions.h 
     850# cleanup, remove dimensions.h
    827851\rm -f $libf/grid/dimensions.h
  • trunk/LMDZ.MARS/makegcm_pgf

    r1246 r1403  
    88set physique=mars
    99set phys="PHYS=$physique"
    10 set include='-I$(LIBF)/grid -I$(LIBF)/bibio -I. -I$(LIBF)/aeronomars'
     10set include='-I$(LIBF)/grid -I$(LIBF)/misc -I. -I$(LIBF)/dynlonlat_phylonlat'
    1111set ntrac = 1
    1212set filtre=filtrez
     
    1414set dyntype="dyn"
    1515set full=""
     16#src_dirs: directories containing source files
     17set src_dirs="grid misc"
     18
    1619########################################################################
    1720# path a changer contenant les sources et les objets du modele
     
    2730## NetCDF Libraries: what follows is OK for LMD 32 and 64bit Linux Machines
    2831#if ( `uname -m` == "x86_64" ) then
    29 ## 64 bit machines
     32# 64 bit machines
    3033  setenv NCDFLIB /donnees/emlmd/netcdf64-4.0.1_pgi/lib
    3134  setenv NCDFINC /donnees/emlmd/netcdf64-4.0.1_pgi/include
     
    3538#endif
    3639####
    37 
    3840
    3941setenv localdir "`pwd`"
     
    221223endif
    222224
    223 set nomlib=$machine
     225# Ehouarn: add 'g9fortran' string to pathname
     226set nomlib=${machine}
    224227
    225228# Impose distinct name for 64 bit Linux machines (to avoid mixing 32 and 64)
    226229if (`uname` == Linux && `uname -m` == "x86_64") then
    227   set nomlib=${machine}64
     230  set nomlib=${machine}
    228231endif
    229232
     
    407410if ( "$physique" == 'nophys' ) then
    408411   set phys="L_PHY= LIBPHY="
    409 endif
    410 
     412else
     413   set src_dirs="$src_dirs aerono$physique phy$physique"
     414   set include="$include "'-I$(LIBF)/aerono'"$physique"' -I$(LIBF)/phy'"$physique"
     415endif
     416set libdyn_phy=""
     417set LIBDYN_PHYS=""
    411418########################################################################
    412419# choix du nombre de traceur par defaut si il n'a pas ete choisi,
     
    490497  set include="$include "'-I$(LIBF)/dyn2d '
    491498  set dimh=$dim
    492 else
     499endif
     500if ( "$dimc" == "3" ) then
    493501  if ( "$dyntype" == "olddyn" ) then
    494502    set include="$include "'-I$(LIBF)/olddyn3d '
     503    set src_dirs="$src_dirs olddyn3d dynlonlat_phylonlat dynlonlat_phylonlat/phy$physique"
    495504  else
    496505    set include="$include "'-I$(LIBF)/dyn3d '
     506    set src_dirs="$src_dirs dyn3d dynlonlat_phylonlat dynlonlat_phylonlat/phy$physique"
    497507  endif
     508  set libdyn_phy="-ldynlonlat_phylonlat"
     509  set LIBDYN_PHYS='$(LIBO)/libdynlonlat_phylonlat.a'
    498510  set dimh=`echo $dim | awk ' { print $1 "." $2 } '`
    499511endif
     
    554566## NB: we still need to have L_DYN=libdyn3d to reach routines and module
    555567## objects which are located in dyn3d
    556   set dyn="L_DYN=-ldyn3d DYN= L_FILTRE= DIRMAIN=phy$physique "
     568  set dyntype=""
     569  set filtre="L_DYN= DYN= FILTRE= L_FILTRE= "
     570  set dyn="L_DYN= DYN= L_FILTRE= "
     571  set dirmain="phy$physique/dyn1d"
     572  set src_dirs="$src_dirs phy$physique/dyn1d "
     573  set include="$include "' -I$(LIBF)/phy'"$physique"'/dyn1d'
    557574endif
    558575endif
     
    594611if ( `expr $dimc \> 2` == 1 ) then
    595612   set filtre="FILTRE=$filtre"
     613   if ( "$dyntype" == "olddyn" ) then
     614     set src_dirs="$src_dirs oldfiltrez"
     615   else
     616     set src_dirs="$src_dirs filtrez"
     617   endif
    596618else
    597    set filtre="FILTRE= L_FILTRE= "
     619   set filtre="FILTRE= L_FILTRE= L_DYN= "
    598620endif
    599621echo "MACRO FILTRE $filtre"
     
    637659        \cp tmp90 liste_des_sources_f90
    638660        echo "On recree le makefile"
    639         if ("$dyntype" == "olddyn") then
    640           ./create_make_gcm olddyn3d grid bibio aeronomars phy$physique >! tmp
    641         else
    642           ./create_make_gcm dyn3d grid bibio aeronomars phy$physique >! tmp
    643         endif
     661        echo "src_dirs: $src_dirs"
     662        create_make_gcm $src_dirs >! tmp
    644663        \mv tmp makefile
    645664        echo "Nouveau makefile cree."
     
    739758cd $localdir
    740759
    741 ## locate main program (could be in dyn3d or phy$physique
    742 ##                      and could be .F or .F90)
     760## locate main program (could be in dyn3d or dynlonlat_phylonlat/phy$physique
     761##  or phy$physique/dyn1d   and could be .F or .F90)
    743762set source_code=${code}.F
     763set dirmain=dyn${dimc}d
    744764if ( -f $LMDGCM/libf/dyn3d/${code}.F90 ) then
    745765  set source_code=${code}.F90
    746766endif
    747 if ( -f $LMDGCM/libf/phy${physique}/${code}.F ) then
     767if ( -f $LMDGCM/libf/phy${physique}/dyn1d/${code}.F ) then
     768  set dirmain=phy${physique}/dyn1d
    748769  set source_code=${code}.F
    749770endif
    750 if ( -f $LMDGCM/libf/phy${physique}/${code}.F90 ) then
     771if ( -f $LMDGCM/libf/phy${physique}/dyn1d/${code}.F90 ) then
     772  set dirmain=phy${physique}/dyn1d
    751773  set source_code=${code}.F90
    752774endif
    753 
    754 ## locate directory where main program is located
    755 if ( $dimension == 3 ) then
    756   if ( -f $LMDGCM/libf/dyn3d/${source_code} ) then
    757     set dyn="DIRMAIN=dyn3d "
    758   endif
    759   if ( -f $LMDGCM/libf/phy${physique}/${source_code} ) then
    760     set dyn="DIRMAIN=phy${physique} "
    761   endif
     775if ( -f $LMDGCM/libf/dynlonlat_phylonlat/phy${physique}/${code}.F ) then
     776  set dirmain=dynlonlat_phylonlat/phy${physique}
     777  set source_code=${code}.F
     778endif
     779if ( -f $LMDGCM/libf/dynlonlat_phylonlat/phy${physique}/${code}.F90 ) then
     780  set dirmain=dynlonlat_phylonlat/phy${physique}
     781  set source_code=${code}.F90
    762782endif
    763783
     
    770790$filtre \
    771791LIBO=$libo \
    772 $dyn \
    773792$phys \
     793LIBDYN_PHYS=${LIBDYN_PHYS} \
    774794DIM=$dimc \
    775795DYNTYPE="$dyntype" \
     796L_DYN_PHY="$libdyn_phy" \
    776797L_ADJNT="$adjnt" \
    777798LOCAL_DIR="$localdir"  \
     
    784805MOD_SUFFIX=$mod_suffix \
    785806AR=$ar \
     807DIRMAIN=$dirmain \
    786808SOURCE=$source_code \
    787809PROG=$code
     
    796818$filtre \
    797819LIBO=$libo \
    798 $dyn \
    799820$phys \
     821LIBDYN_PHYS=${LIBDYN_PHYS} \
    800822DIM=$dimc \
    801823DYNTYPE="$dyntype" \
     824L_DYN_PHY="$libdyn_phy" \
    802825L_ADJNT="$adjnt" \
    803826LOCAL_DIR="$localdir"  \
     
    810833MOD_SUFFIX=$mod_suffix \
    811834AR=$ar \
     835DIRMAIN=$dirmain \
    812836SOURCE=$source_code \
    813837PROG=$code
    814838
    815 # cleanup, remove dimensions.h 
     839# cleanup, remove dimensions.h
    816840\rm -f $libf/grid/dimensions.h
  • trunk/LMDZ.TITAN/libf/phytitan/dyn1d/rcm1d.F

    r1401 r1403  
    466466c***********************************************************************
    467467
    468 #include "../dyn3d_common/disvert_noterre.F"
    469 #include "../dyn3d/abort_gcm.F"
     468!#include "../dyn3d_common/disvert_noterre.F"
     469!#include "../dyn3d/abort_gcm.F"
  • trunk/LMDZ.VENUS/libf/phyvenus/dyn1d/rcm1d.F

    r1401 r1403  
    473473c***********************************************************************
    474474
    475 #include "../dyn3d_common/disvert_noterre.F"
    476 #include "../dyn3d/abort_gcm.F"
    477 
     475!#include "../dyn3d_common/disvert_noterre.F"
     476!#include "../dyn3d/abort_gcm.F"
     477
Note: See TracChangeset for help on using the changeset viewer.