Ignore:
Timestamp:
Jul 19, 2013, 10:25:38 AM (11 years ago)
Author:
emillour
Message:

Generic GCM:

  • update the sponge layer: trun it into a module and (more important) compute the sponge quenching analytically rather than via Forward Euler approximation.

EM

Location:
trunk/LMDZ.GENERIC/libf
Files:
1 added
2 deleted
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.GENERIC/libf/dyn3d/comdissip.h

    r135 r1006  
    1 c-----------------------------------------------------------------------
    2 c INCLUDE dissip.h
     1!-----------------------------------------------------------------------
     2! INCLUDE dissip.h
    33
    4       COMMON/comdissip/
    5      $    niterdis,coefdis,tetavel,tetatemp,gamdissip
     4      COMMON/comdissip/                                                 &
     5     &    niterdis,coefdis,tetavel,tetatemp,gamdissip
    66
    77
     
    1010      REAL tetavel,tetatemp,coefdis,gamdissip
    1111
    12 c-----------------------------------------------------------------------
     12!-----------------------------------------------------------------------
  • trunk/LMDZ.GENERIC/libf/dyn3d/defrun_new.F

    r135 r1006  
    3737! to use  'getin'
    3838      USE ioipsl_getincom
     39      use sponge_mod,only: callsponge,nsponge,mode_sponge,tetasponge
    3940      IMPLICIT NONE
    4041
     
    4546#include "serre.h"
    4647#include "comdissnew.h"
    47 #include "sponge.h"
    4848c
    4949c   arguments:
     
    451451
    452452        WRITE(tapeout,*) ""
    453         WRITE(tapeout,*) "Avec sponge layer"
     453        WRITE(tapeout,*) "Use a sponge layer?"
    454454        callsponge=.true. ! default value
    455455        call getin("callsponge",callsponge)
     
    457457
    458458        WRITE(tapeout,*) ""
    459         WRITE(tapeout,*) "Sponge:  mode0(u=v=0), mode1(u=umoy,v=0), ",
    460      & "mode2(u=umoy,v=vmoy)"
     459        WRITE(tapeout,*) "Sponge: number of layers over which",
     460     &                    " sponge extends"
     461        nsponge=3 ! default value
     462        call getin("nsponge",nsponge)
     463        WRITE(tapeout,*)" nsponge = ",nsponge
     464
     465        WRITE(tapeout,*)""
     466        WRITE(tapeout,*)"Sponge mode: (forcing is towards ..."
     467        WRITE(tapeout,*)"  over upper nsponge layers)"
     468        WRITE(tapeout,*)"  0: (h=hmean,u=v=0)"
     469        WRITE(tapeout,*)"  1: (h=hmean,u=umean,v=0)"
     470        WRITE(tapeout,*)"  2: (h=hmean,u=umean,v=vmean)"
    461471        mode_sponge=2 ! default value
    462472        call getin("mode_sponge",mode_sponge)
     
    464474
    465475        WRITE(tapeout,*) ""
    466         WRITE(tapeout,*) "Sponge:  hauteur de sponge (km)"
    467         hsponge=90.0 ! default value
    468         call getin("hsponge",hsponge)
    469         WRITE(tapeout,*)" hsponge = ",hsponge
    470 
    471         WRITE(tapeout,*) ""
    472         WRITE(tapeout,*) "Sponge:  tetasponge (secondes)"
     476        WRITE(tapeout,*) "Sponge: characteristic time scale tetasponge"
     477        WRITE(tapeout,*) "(seconds) at topmost layer (time scale then "
     478        WRITE(tapeout,*) " doubles with decreasing layer index)."
    473479        tetasponge=50000.0
    474480        call getin("tetasponge",tetasponge)
  • trunk/LMDZ.GENERIC/libf/dyn3d/gcm.F

    r993 r1006  
    11      PROGRAM gcm
    22
     3      use sponge_mod,only: callsponge,mode_sponge,sponge
    34      IMPLICIT NONE
    45
     
    4647#include "serre.h"
    4748#include "tracstoke.h"
    48 #include "sponge.h"
    4949#include"advtrac.h"
    5050
     
    444444c        Sponge layer
    445445c        ~~~~~~~~~~~~
    446          DO ij=1, ip1jmp1
    447             pext(ij)=ps(ij)*aire(ij)
    448          ENDDO
     446
    449447         IF (callsponge) THEN
    450             CALL sponge(ucov,vcov,teta,pext,dtdiss,mode_sponge)
     448           pext(1:ip1jmp1)=ps(1:ip1jmp1)*aire(1:ip1jmp1)
     449           CALL sponge(ucov,vcov,teta,pext,dtdiss,mode_sponge)
    451450         ENDIF
    452451
  • trunk/LMDZ.GENERIC/libf/phystd/callsedim.F

    r858 r1006  
    7575      IF (firstcall) THEN
    7676        firstcall=.false.
     77        ! add some tests on presence of required tracers/aerosols:
     78        if (water) then
     79          if (igcm_h2o_ice.eq.0) then
     80            write(*,*) "callsedim error: water=.true.",
     81     &                 " but igcm_h2o_ice=0"
     82          stop
     83          endif
     84          if (iaero_h2o.eq.0) then
     85            write(*,*) "callsedim error: water=.true.",
     86     &                 " but iaero_ho2=0"
     87          stop
     88          endif
     89        endif
    7790      ENDIF ! of IF (firstcall)
    7891     
Note: See TracChangeset for help on using the changeset viewer.