Ignore:
Timestamp:
Apr 16, 2010, 11:50:10 AM (15 years ago)
Author:
Ehouarn Millour
Message:

Added possibility to run in "Shallow Water" mode. SW mode is automatically set if the number of atmospheric layers is 1.
To use SW mode, the model should be compiled without physics (makelmdz_fcm -p nophys) and/or without calls to the physics (i.e. set iflag_phys=0 in gcm.def).

-Updated some definitions and comments in run.def & gcm.def

-Fixed misplaced #ifdef CPP_EARTH in calfis.F + some write(lunout,*)

-Specific initialisation of fields for SW are done in sw_case_williamson91_6 (called by iniacademic, when read_start=.false.)

  • Checked (on Vargas & Brodie) that these changes don't alter usual bench GCM outputs.

EM

Location:
LMDZ4/branches/LMDZ4V5.0-dev/libf/dyn3d
Files:
1 added
3 edited

Legend:

Unmodified
Added
Removed
  • LMDZ4/branches/LMDZ4V5.0-dev/libf/dyn3d/calfis.F

    r1320 r1363  
    9898#include "comvert.h"
    9999#include "comgeom2.h"
     100#include "iniprint.h"
    100101
    101102c    Arguments :
     
    188189        debut = .TRUE.
    189190        IF (ngridmx.NE.2+(jjm-1)*iim) THEN
    190          PRINT*,'STOP dans calfis'
    191          PRINT*,'La dimension ngridmx doit etre egale a 2 + (jjm-1)*iim'
    192          PRINT*,'  ngridmx  jjm   iim   '
    193          PRINT*,ngridmx,jjm,iim
     191         write(lunout,*) 'STOP dans calfis'
     192         write(lunout,*)
     193     &   'La dimension ngridmx doit etre egale a 2 + (jjm-1)*iim'
     194         write(lunout,*) '  ngridmx  jjm   iim   '
     195         write(lunout,*) ngridmx,jjm,iim
    194196         STOP
    195197        ENDIF
     
    315317      CALL gr_dyn_fi(1,iip1,jjp1,ngridmx,pphis,zphis)
    316318      DO l=1,llm
    317         DO ig=1,ngridmx
    318            zphi(ig,l)=zphi(ig,l)-zphis(ig)
    319         ENDDO
     319        DO ig=1,ngridmx
     320           zphi(ig,l)=zphi(ig,l)-zphis(ig)
     321        ENDDO
    320322      ENDDO
    321323
     
    415417            z1(i)   =(rlonu(i)-rlonu(i-1))*pvcov(i,jjm,l)/cv(i,jjm)
    416418            z1bis(i)=(rlonu(i)-rlonu(i-1))*pdvcov(i,jjm,l)/cv(i,jjm)
    417         ENDDO
     419        ENDDO
    418420
    419421         DO i=1,iim
     
    422424            zsin(i)    = SIN(rlonv(i))*z1(i)
    423425            zsinbis(i) = SIN(rlonv(i))*z1bis(i)
    424         ENDDO
     426        ENDDO
    425427
    426428         zufi(ngridmx,l)  = SSUM(iim,zcos,1)/pi
     
    449451
    450452      if (planet_type=="earth") then
    451 
    452       print*,'PHYSIQUE AVEC NSPLIT_PHYS=',nsplit_phys
     453#ifdef CPP_EARTH
     454
     455      write(lunout,*) 'PHYSIQUE AVEC NSPLIT_PHYS=',nsplit_phys
    453456      zdt_split=dtphys/nsplit_phys
    454457      zdufic(:,:)=0.
     
    463466         lafin_split=lafin.and.isplit==nsplit_phys
    464467
    465 #ifdef CPP_EARTH
    466468         CALL physiq (ngridmx,
    467469     .             llm,
  • LMDZ4/branches/LMDZ4V5.0-dev/libf/dyn3d/exner_hyb.F

    r524 r1363  
    11!
    2 ! $Header$
     2! $Id $
    33!
    44      SUBROUTINE  exner_hyb ( ngrid, ps, p,alpha,beta, pks, pk, pkf )
     
    5151      REAL SSUM
    5252c
     53
     54      if (llm.eq.1) then
     55        ! Specific behaviour for Shallow Water (1 vertical layer) case
    5356     
     57        ! Sanity checks
     58        if (kappa.ne.1) then
     59          call abort_gcm("exner_hyb",
     60     &    "kappa!=1 , but running in Shallow Water mode!!",42)
     61        endif
     62        if (cpp.ne.r) then
     63        call abort_gcm("exner_hyb",
     64     &    "cpp!=r , but running in Shallow Water mode!!",42)
     65        endif
     66       
     67        ! Compute pks(:),pk(:),pkf(:)
     68       
     69        DO   ij  = 1, ngrid
     70          pks(ij) = (cpp/preff) * ps(ij)
     71          pk(ij,1) = .5*pks(ij)
     72        ENDDO
     73       
     74        CALL SCOPY   ( ngrid * llm, pk, 1, pkf, 1 )
     75        CALL filtreg ( pkf, jmp1, llm, 2, 1, .TRUE., 1 )
     76       
     77        ! our work is done, exit routine
     78        return
     79      endif ! of if (llm.eq.1)
     80
     81     
    5482      unpl2k    = 1.+ 2.* kappa
    5583c
  • LMDZ4/branches/LMDZ4V5.0-dev/libf/dyn3d/iniacademic.F

    r1299 r1363  
    4747#include "temps.h"
    4848#include "iniprint.h"
     49#include "logic.h"
    4950
    5051c   Arguments:
     
    8586        time_0=0.
    8687        day_ref=0
    87         annee_ref=0
     88        annee_ref=0
    8889
    8990        im         = iim
     
    106107        ang0       = 0.
    107108
     109        if (llm.eq.1) then
     110          ! specific initializations for the shallow water case
     111          kappa=1
     112        endif
     113       
    108114        CALL iniconst
    109115        CALL inigeom
    110116        CALL inifilr
    111117
    112         ps=0.
    113         phis=0.
     118        if (llm.eq.1) then
     119          ! initialize fields for the shallow water case, if required
     120          if (.not.read_start) then
     121            phis(:)=0.
     122            q(:,:,1)=1.e-10
     123            q(:,:,2)=1.e-15
     124            q(:,:,3:nqtot)=0.
     125            CALL sw_case_williamson91_6(vcov,ucov,teta,masse,ps)
     126          endif
     127        endif
     128
     129        if (iflag_phys.eq.2) then
     130          ! initializations for the academic case
     131          ps(:)=1.e5
     132          phis(:)=0.
    114133c---------------------------------------------------------------------
    115134
    116         taurappel=10.*daysec
     135          taurappel=10.*daysec
    117136
    118137c---------------------------------------------------------------------
     
    120139c   --------------------------------------
    121140
    122         DO l=1,llm
    123          zsig=ap(l)/preff+bp(l)
    124          if (zsig.gt.0.3) then
    125            lsup=l
    126            tetarappell=1./8.*(-log(zsig)-.5)
    127            DO j=1,jjp1
     141          DO l=1,llm
     142            zsig=ap(l)/preff+bp(l)
     143            if (zsig.gt.0.3) then
     144             lsup=l
     145             tetarappell=1./8.*(-log(zsig)-.5)
     146             DO j=1,jjp1
    128147             ddsin=sin(rlatu(j))-sin(pi/20.)
    129148             tetajl(j,l)=300.*(1+1./18.*(1.-3.*ddsin*ddsin)+tetarappell)
    130            ENDDO
    131           else
     149             ENDDO
     150            else
    132151c   Choix isotherme au-dessus de 300 mbar
    133            do j=1,jjp1
    134              tetajl(j,l)=tetajl(j,lsup)*(0.3/zsig)**kappa
    135            enddo
    136           endif ! of if (zsig.gt.0.3)
    137         ENDDO ! of DO l=1,llm
    138 
    139         do l=1,llm
    140            do j=1,jjp1
     152             do j=1,jjp1
     153               tetajl(j,l)=tetajl(j,lsup)*(0.3/zsig)**kappa
     154             enddo
     155            endif ! of if (zsig.gt.0.3)
     156          ENDDO ! of DO l=1,llm
     157
     158          do l=1,llm
     159            do j=1,jjp1
    141160              do i=1,iip1
    142161                 ij=(j-1)*iip1+i
    143162                 tetarappel(ij,l)=tetajl(j,l)
    144163              enddo
    145            enddo
    146         enddo
     164            enddo
     165          enddo
    147166
    148167c       call dump2d(jjp1,llm,tetajl,'TEQ   ')
    149168
    150         ps=1.e5
    151         phis=0.
    152         CALL pression ( ip1jmp1, ap, bp, ps, p       )
    153         CALL exner_hyb( ip1jmp1, ps, p,alpha,beta, pks, pk, pkf )
    154         CALL massdair(p,masse)
     169          CALL pression ( ip1jmp1, ap, bp, ps, p       )
     170          CALL exner_hyb( ip1jmp1, ps, p,alpha,beta, pks, pk, pkf )
     171          CALL massdair(p,masse)
    155172
    156173c  intialisation du vent et de la temperature
    157         teta(:,:)=tetarappel(:,:)
    158         CALL geopot(ip1jmp1,teta,pk,pks,phis,phi)
    159         call ugeostr(phi,ucov)
    160         vcov=0.
    161         q(:,:,1   )=1.e-10
    162         q(:,:,2   )=1.e-15
    163         q(:,:,3:nqtot)=0.
     174          teta(:,:)=tetarappel(:,:)
     175          CALL geopot(ip1jmp1,teta,pk,pks,phis,phi)
     176          call ugeostr(phi,ucov)
     177          vcov=0.
     178          q(:,:,1   )=1.e-10
     179          q(:,:,2   )=1.e-15
     180          q(:,:,3:nqtot)=0.
    164181
    165182
    166183c   perturbation aleatoire sur la temperature
    167         idum  = -1
    168         zz = ran1(idum)
    169         idum  = 0
    170         do l=1,llm
    171            do ij=iip2,ip1jm
     184          idum  = -1
     185          zz = ran1(idum)
     186          idum  = 0
     187          do l=1,llm
     188            do ij=iip2,ip1jm
    172189              teta(ij,l)=teta(ij,l)*(1.+0.005*ran1(idum))
    173            enddo
    174         enddo
    175 
    176         do l=1,llm
    177            do ij=1,ip1jmp1,iip1
     190            enddo
     191          enddo
     192
     193          do l=1,llm
     194            do ij=1,ip1jmp1,iip1
    178195              teta(ij+iim,l)=teta(ij,l)
    179            enddo
    180         enddo
     196            enddo
     197          enddo
    181198
    182199
     
    188205
    189206c   initialisation d'un traceur sur une colonne
    190         j=jjp1*3/4
    191         i=iip1/2
    192         ij=(j-1)*iip1+i
    193         q(ij,:,3)=1.
    194      
     207          j=jjp1*3/4
     208          i=iip1/2
     209          ij=(j-1)*iip1+i
     210          q(ij,:,3)=1.
     211        endif ! of if (iflag_phys.eq.2)
     212       
    195213      else
    196214        write(lunout,*)"iniacademic: planet types other than earth",
Note: See TracChangeset for help on using the changeset viewer.