Changeset 2135


Ignore:
Timestamp:
May 3, 2019, 1:10:27 PM (6 years ago)
Author:
slebonnois
Message:

SL, Venus: new keys for flexibility cp0/cp(T) and Held-Suarez type physics

Location:
trunk
Files:
1 added
1 deleted
13 edited
1 moved

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.COMMON/libf/dyn3d/conf_gcm.F90

    r2126 r2135  
    1717                         output_grads_dyn, periodav, planet_type, &
    1818                         raz_date, resetvarc, starttime, timestart, &
    19                          ecritstart,force_conserv_tracer
     19                         ecritstart, cpofT,force_conserv_tracer
    2020  USE infotrac, ONLY : type_trac
    2121  use assert_m, only: assert
     
    476476  iphysiq = 5
    477477  CALL getin('iphysiq', iphysiq)
     478
     479!Config  Key  =  cpofT
     480!Config  Desc = dependence of Cp on T
     481!Config  Def  = False
     482!Config  Help = dependence of Cp on T (true or false)
     483  cpofT = .False.
     484  if (planet_type.eq."venus") then
     485   cpofT = .True.
     486  endif
     487  CALL getin('cpofT', cpofT)
    478488
    479489!Config  Key  = iflag_trac
     
    952962 write(lunout,*)' iflag_phys = ', iflag_phys
    953963 write(lunout,*)' iphysiq = ', iphysiq
     964 write(lunout,*)' cpofT = ', cpofT
    954965 write(lunout,*)' iflag_trac = ', iflag_trac
    955966 write(lunout,*)' iapp_tracvl = ', iapp_tracvl
  • trunk/LMDZ.COMMON/libf/dyn3d_common/control_mod.F90

    r2126 r2135  
    2929  integer,save :: ip_ebil_dyn
    3030  logical,save :: offline
     31  logical,save :: cpofT
    3132  logical,save :: force_conserv_tracer ! enforce conservation of tracer mass
    3233  character(len=4),save :: config_inca
  • trunk/LMDZ.COMMON/libf/dyn3d_common/cpdet_mod.F90

    r1659 r2135  
    2121      SUBROUTINE ini_cpdet
    2222     
    23       USE control_mod, ONLY: planet_type
     23      USE control_mod, ONLY: cpofT
    2424      USE comconst_mod, ONLY: nu_venus,t0_venus
    2525      IMPLICIT none
     
    2828!======================================================================
    2929
    30       if (planet_type.eq."venus") then
     30      if (cpofT) then
    3131          nu_venus=0.35
    3232          t0_venus=460.
     
    4444      FUNCTION cpdet(t)
    4545
    46       USE control_mod, ONLY: planet_type
     46      USE control_mod, ONLY: cpofT
    4747      USE comconst_mod, ONLY: cpp,t0_venus,nu_venus
    4848      IMPLICIT none
     
    5353      real cpdet
    5454
    55       if (planet_type.eq."venus") then
     55      if (cpofT) then
    5656          cpdet = cpp*(t/t0_venus)**nu_venus
    5757      else
     
    7575!======================================================================
    7676
    77       USE control_mod, ONLY: planet_type
     77      USE control_mod, ONLY: cpofT
    7878      USE comconst_mod, ONLY: cpp,t0_venus,nu_venus
    7979
     
    107107!----------------------
    108108
    109       if (planet_type.eq."venus") then
     109      if (cpofT) then
    110110          yteta = yt**nu_venus                                          &
    111111     &            - nu_venus * t0_venus**nu_venus * log(ypk/cpp)
     
    136136!======================================================================
    137137
    138       USE control_mod, ONLY: planet_type
     138      USE control_mod, ONLY: cpofT
    139139      USE comconst_mod, ONLY: cpp,nu_venus,t0_venus
    140140
     
    168168!----------------------
    169169
    170       if (planet_type.eq."venus") then
     170      if (cpofT) then
    171171
    172172!----------------------
     
    193193      SUBROUTINE t2tpot_p(nlon,nlev, yt, yteta, ypk)
    194194! Parallel version of t2tpot, for an arbitrary number of columns
    195       USE control_mod, only : planet_type
     195      USE control_mod, only : cpofT
    196196      USE parallel_lmdz, only : OMP_CHUNK
    197197      USE comconst_mod, ONLY: cpp,nu_venus,t0_venus
     
    231231!----------------------
    232232
    233       if (planet_type.eq."venus") then
     233      if (cpofT) then
    234234!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
    235235        do l=1,nlev
     
    250250        enddo
    251251!$OMP END DO
    252       endif ! of if (planet_type.eq."venus")
     252      endif ! of if (cpofT)
    253253
    254254      end subroutine t2tpot_p
     
    261261! (more efficient than multiple calls to t2tpot_p() with slices of data)
    262262      USE parallel_lmdz, only : jj_begin,jj_end,OMP_CHUNK
    263       USE control_mod, only : planet_type
     263      USE control_mod, only : cpofT
    264264      USE comconst_mod, ONLY: cpp,nu_venus,t0_venus
    265265
     
    306306      jje=jj_end
    307307
    308       if (planet_type.eq."venus") then
     308      if (cpofT) then
    309309!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
    310310        do l=1,llm
     
    325325        enddo
    326326!$OMP END DO
    327       endif ! of if (planet_type.eq."venus")
     327      endif ! of if (cpofT)
    328328
    329329      end subroutine t2tpot_glo_p
     
    334334      SUBROUTINE tpot2t_p(nlon,nlev,yteta,yt,ypk)
    335335! Parallel version of tpot2t, for an arbitrary number of columns
    336       USE control_mod, only : planet_type
     336      USE control_mod, only : cpofT
    337337      USE parallel_lmdz, only : OMP_CHUNK
    338338      USE comconst_mod, ONLY: cpp,nu_venus,t0_venus
     
    373373!----------------------
    374374
    375       if (planet_type.eq."venus") then
     375      if (cpofT) then
    376376!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
    377377        do l=1,nlev
     
    391391        enddo
    392392!$OMP END DO
    393       endif ! of if (planet_type.eq."venus")
     393      endif ! of if (cpofT)
    394394      end subroutine tpot2t_p
    395395
     
    401401! (more efficient than multiple calls to tpot2t_p() with slices of data)
    402402      USE parallel_lmdz, only : jj_begin,jj_end,OMP_CHUNK
    403       USE control_mod, only : planet_type
     403      USE control_mod, only : cpofT
    404404      USE comconst_mod, ONLY: cpp,nu_venus,t0_venus
    405405
     
    446446      jje=jj_end
    447447
    448       if (planet_type.eq."venus") then
     448      if (cpofT) then
    449449!$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
    450450        do l=1,llm
     
    465465        enddo
    466466!$OMP END DO
    467       endif ! of if (planet_type.eq."venus")
     467      endif ! of if (cpofT)
    468468      end subroutine tpot2t_glo_p
    469469
  • trunk/LMDZ.COMMON/libf/dyn3dpar/conf_gcm.F90

    r2126 r2135  
    498498  iphysiq = 5
    499499  CALL getin('iphysiq', iphysiq)
     500
     501!Config  Key  =  cpofT
     502!Config  Desc = dependence of Cp on T
     503!Config  Def  = False
     504!Config  Help = dependence of Cp on T (true or false)
     505  cpofT = .False.
     506  if (planet_type.eq."venus") then
     507   cpofT = .True.
     508  endif
     509  CALL getin('cpofT', cpofT)
    500510
    501511!Config  Key  = iflag_trac
     
    9901000      write(lunout,*)' iflag_phys = ', iflag_phys
    9911001      write(lunout,*)' iphysiq = ', iphysiq
     1002      write(lunout,*)' cpofT = ', cpofT
    9921003      write(lunout,*)' iflag_trac = ', iflag_trac
    9931004      write(lunout,*)' iapp_tracvl = ', iapp_tracvl
  • trunk/LMDZ.COMMON/libf/dynphy_lonlat/phyvenus/iniphysiq_mod.F90

    r1682 r2135  
    7676
    7777  ! Initialize some physical constants
    78   call suphec
     78  call suphec(pcpp)
    7979
    8080  ! Initialize cpdet_phy module
  • trunk/LMDZ.COMMON/libf/dynphy_lonlat/phyvenus/newstart.F

    r2049 r2135  
    10411041c-----------------------------------------------------------------------
    10421042
     1043       IF ( notopo ) THEN
     1044        ps=9.2e6
     1045       ELSE
    10431046c  Extrapolation la pression dans la nouvelle grille
    10441047      call interp_horiz(psold,ps,imold,jmold,iim,jjm,1,
    10451048     &                   rlonuold,rlatvold,rlonu,rlatv)
     1049       ENDIF
    10461050
    10471051c       On assure la conservation de la masse de l'atmosphere
  • trunk/LMDZ.VENUS/libf/phyvenus/clesphys.h

    r1723 r2135  
    1313       LOGICAL callnlte,callnirco2,callthermos
    1414       LOGICAL ok_cloud, ok_chem, reinit_trac, ok_sedim
    15        LOGICAL cclmain
    16        LOGICAL startphy_file
     15       LOGICAL ok_clmain, physideal, startphy_file
    1716       INTEGER nbapp_rad, nbapp_chim, iflag_con, iflag_ajs
    1817       INTEGER lev_histins, lev_histday, lev_histmth
    1918       INTEGER tr_scheme, cl_scheme
    2019       INTEGER nircorr, nltemodel, solvarmod
     20       INTEGER nb_mode
    2121       REAL    ecriphy
    2222       REAL    solaire
     
    2424       REAL    ksta, inertie
    2525       REAL    euveff, solarcondate
    26        INTEGER nb_mode
    2726
    2827       COMMON/clesphys_l/ cycle_diurne, soil_model,                     &
    2928     &     ok_orodr, ok_orolf, ok_gw_nonoro, ok_kzmin,                  &
    3029     &     callnlte,callnirco2,callthermos,                             &
    31      &     ok_cloud, ok_chem, reinit_trac, ok_sedim, startphy_file
     30     &     ok_cloud, ok_chem, reinit_trac, ok_sedim,                    &
     31     &     ok_clmain, physideal, startphy_file
    3232
    3333       COMMON/clesphys_i/ nbapp_rad, nbapp_chim,                        &
    34      &     iflag_con, iflag_ajs,cclmain,                                &
     34     &     iflag_con, iflag_ajs,                                        &
    3535     &     lev_histins, lev_histday, lev_histmth, tr_scheme,            &
    3636     &     cl_scheme, nircorr, nltemodel, solvarmod, nb_mode
  • trunk/LMDZ.VENUS/libf/phyvenus/conf_phys.F90

    r1981 r2135  
    251251  call getin('ok_kzmin',ok_kzmin)
    252252
    253   cclmain = .true.
    254   call getin('clmain',cclmain)
     253  ok_clmain = .true.
     254  call getin('ok_clmain',ok_clmain)
     255
     256  physideal = .false.
     257  call getin('physideal',physideal)
    255258
    256259!Config Key  = iflag_ajs
     
    507510  write(lunout,*)' ok_kzmin = ',ok_kzmin
    508511  write(lunout,*)' inertie = ', inertie
    509   write(lunout,*)' clmain = ',cclmain
     512  write(lunout,*)' ok_clmain = ',ok_clmain
     513  write(lunout,*)' physideal = ',physideal
    510514  write(lunout,*)' iflag_ajs = ', iflag_ajs
    511515  write(lunout,*)' lev_histins = ',lev_histins
  • trunk/LMDZ.VENUS/libf/phyvenus/cpdet_phy_mod.F90

    r1658 r2135  
    3636      real cpdet
    3737
    38       cpdet = cpp*(t/t0_venus)**nu_venus
     38      if (t0_venus.ne.0.) then
     39       cpdet = cpp*(t/t0_venus)**nu_venus
     40      else
     41       cpdet = cpp
     42      endif
    3943
    4044      end function cpdet
     
    8185!----------------------
    8286
    83       yteta = yt**nu_venus                                          &
     87      if (t0_venus.ne.0.) then
     88       yteta = yt**nu_venus                                          &
    8489     &            - nu_venus * t0_venus**nu_venus * log(ypk/cpp)
    85       yteta = yteta**(1./nu_venus)
     90       yteta = yteta**(1./nu_venus)
     91      else
     92       yteta = yt * cpp/ypk
     93      endif
     94
    8695!----------------------
    8796! ATMOSPHERE PROFONDE
     
    135144! ATMOSPHERE PROFONDE
    136145!----------------------
     146      if (t0_venus.ne.0.) then
    137147     yt = (yteta/ratio_mod)**nu_venus                               &
    138148!----------------------
    139149         + nu_venus * t0_venus**nu_venus * log(ypk/cpp)
    140150     yt = yt**(1./nu_venus)
     151      else
     152     yt = (yteta/ratio_mod) * ypk/cpp
     153      endif
     154 
    141155 
    142156      end subroutine tpot2t
  • trunk/LMDZ.VENUS/libf/phyvenus/phys_state_var_mod.F90

    r1723 r2135  
    7777     REAL,ALLOCATABLE,SAVE :: d_t_nirco2(:,:),d_t_nlte(:,:)
    7878!$OMP THREADPRIVATE(d_t_nirco2,d_t_nlte)
     79
     80! Case for Newtonian cooling (physideal=.true.)
     81     REAL,ALLOCATABLE,SAVE :: zt_eq(:,:)   
     82!$OMP THREADPRIVATE(zt_eq)
    7983
    8084! Fluxes (W/m2)
     
    145149      ALLOCATE(d_t_rad(klon,klev),d_t_euv(klon,klev))
    146150      ALLOCATE(d_t_nirco2(klon,klev),d_t_nlte(klon,klev))
     151      ALLOCATE(zt_eq(klon,klev))
    147152
    148153      ALLOCATE(swnet(klon,klev+1), lwnet(klon,klev+1))
     
    186191      deallocate(d_t_rad,d_t_euv)
    187192      deallocate(d_t_nirco2,d_t_nlte)
     193      deallocate(zt_eq)
    188194
    189195      deallocate(swnet, lwnet)
  • trunk/LMDZ.VENUS/libf/phyvenus/physiq_mod.F

    r2125 r2135  
    234234      EXTERNAL ajsec     ! ajustement sec
    235235      EXTERNAL clmain    ! couche limite
     236      EXTERNAL clmain_ideal    ! couche limite simple
    236237      EXTERNAL hgardfou  ! verifier les temperatures
    237238c     EXTERNAL orbite    ! calculer l'orbite
     
    239240      EXTERNAL phyredem  ! ecrire l'etat de redemarrage de la physique
    240241      EXTERNAL radlwsw   ! rayonnements solaire et infrarouge
    241       EXTERNAL suphec    ! initialiser certaines constantes
     242!      EXTERNAL suphec    ! initialiser certaines constantes
    242243      EXTERNAL transp    ! transport total de l'eau et de l'energie
    243244      EXTERNAL printflag
     
    446447#endif
    447448
    448          CALL suphec ! initialiser constantes et parametres phys.
     449! The call to suphec is now done in iniphysiq_mod (interface)
     450!         CALL suphec ! initialiser constantes et parametres phys.
    449451
    450452         IF (if_ebil.ge.1) d_h_vcol_phy=0.
     
    11301132c VENUS TEST: on ne tient pas compte des calculs de clmain mais on force
    11311133c l'equilibre radiatif du sol
    1132       if (.not. cclmain) then
     1134      if (.not. ok_clmain) then
    11331135              if (debut) then
    11341136                print*,"ATTENTION, CLMAIN SHUNTEE..."
     
    11591161! ADAPTATION GCM POUR CP(T)
    11601162
    1161       CALL clmain(dtime,itap,
     1163      if (physideal) then
     1164       CALL clmain_ideal(dtime,itap,
    11621165     e            t_seri,u_seri,v_seri,
    11631166     e            rmu0,
     
    11721175     s            dsens,
    11731176     s            ycoefh,yu1,yv1)
     1177      else
     1178       CALL clmain(dtime,itap,
     1179     e            t_seri,u_seri,v_seri,
     1180     e            rmu0,
     1181     e            ftsol,
     1182     $            ftsoil,
     1183     $            paprs,pplay,ppk,radsol,falbe,
     1184     e            solsw, sollw, sollwdown, fder,
     1185     e            longitude_deg, latitude_deg, dx, dy,   
     1186     e            debut, lafin,
     1187     s            d_t_vdf,d_u_vdf,d_v_vdf,d_ts,
     1188     s            fluxt,fluxu,fluxv,cdragh,cdragm,
     1189     s            dsens,
     1190     s            ycoefh,yu1,yv1)
     1191      endif
    11741192
    11751193CXXX Incrementation des flux
     
    14051423c       LTE radiative transfert / solar / IR matrix
    14061424c       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    1407       CALL radlwsw
     1425      if (physideal) then
     1426       CALL radlwsw_newtoncool
    14081427     e            (dist, rmu0, fract, zzlev,
    14091428     e             paprs, pplay,ftsol, t_seri)
     1429      else
     1430       CALL radlwsw
     1431     e            (dist, rmu0, fract, zzlev,
     1432     e             paprs, pplay,ftsol, t_seri)
     1433      endif
    14101434
    14111435c albedo variations: test for Yeon Joo Lee
    1412 c +12% in 4 Vd / increment to increase it for 20 Vd => +80%
    1413 c       heat(:,:)=heat(:,:)*(1.+0.12*(rjourvrai+gmtime)/4.)*1.12**4
     1436c  increment to increase it for 20 Vd => +80%
     1437c       heat(:,:)=heat(:,:)*(1.+0.80*((rjourvrai-356)+gmtime)/20.)
     1438c  or to decrease it for 20 Vd => 1/1.8
     1439c       heat(:,:)=heat(:,:)/(1.+0.80*((rjourvrai-356)+gmtime)/20.)
    14141440
    14151441c       CO2 near infrared absorption
  • trunk/LMDZ.VENUS/libf/phyvenus/phytrac_emiss.F

    r1621 r2135  
    6767
    6868      integer,parameter :: nblat=5,nblon=4,nbz=3
    69       integer,parameter :: Nemiss=1     ! duree emission (Ed)
     69      integer,parameter :: Nemiss=0     ! duree emission (Ed)
    7070      integer,save :: Nheight(nbz)      ! layer emission
    7171      real,save :: so2_quantity         ! quantity so2 (kg)
     
    149149         if (reinit_trac) then
    150150           tr_seri(:,:,:)=0.
     151c CAS N2 TRACEUR PASSIF POUR EVALUER PROFIL SOUS 7 KM
     152c J'ai mis Nemiss=0 !
     153           do i=1,klon
     154            do k=1,klev
     155              tr_seri(i,k,:)=max(min(0.035,
     156     &          0.035*(1.-log(paprs(i,k)/6.e6)/log(9.e6/6.e6))),0.)
     157            enddo
     158           enddo
     159c FIN CAS N2 PASSIF
    151160         endif
    152161         
  • trunk/LMDZ.VENUS/libf/phyvenus/radlwsw_NewtonCool.F

    r2123 r2135  
    22! $Header: /home/cvsroot/LMDZ4/libf/phylmd/radlwsw.F,v 1.2 2004/10/27 10:14:46 lmdzadmin Exp $
    33!
    4       SUBROUTINE radlwsw(dist, rmu0, fract, zzlev,
     4      SUBROUTINE radlwsw_newtoncool(dist, rmu0, fract, zzlev,
    55     .                  paprs, pplay,tsol, pt)
    66     
     
    2626      USE geometry_mod, ONLY: latitude ! in radians
    2727      USE phys_state_var_mod, only: heat,cool,radsol,
    28      .      topsw,toplw,solsw,sollw,sollwdown,lwnet,swnet
     28     .  topsw,toplw,solsw,sollw,sollwdown,lwnet,swnet,zt_eq
    2929      USE write_field_phy
    3030      IMPLICIT none
     
    4848      parameter (tauCLee=25*86400) ! en s
    4949      real   ztemp,zdt,fact
    50       real   dTsdt(klev),zt_eq(klon,klev)
    51       save   zt_eq
     50      real   dTsdt(klev)
    5251     
    5352      data     etaCLee/9.602e-1,8.679e-1,7.577e-1,6.420e-1,5.299e-1,
     
    111110 
    112111          do k = 1,klev
    113              dTsdt(k) = -(t(j,k)-zt_eq(j,k))/tauCLee   ! en K/s
     112             dTsdt(k) = -(pt(j,k)-zt_eq(j,k))/tauCLee   ! en K/s
    114113          enddo
    115114       
  • trunk/LMDZ.VENUS/libf/phyvenus/suphec.F

    r97 r2135  
    22! $Header: /home/cvsroot/LMDZ4/libf/phylmd/suphec.F,v 1.1.1.1 2004/05/19 12:53:08 lmdzadmin Exp $
    33!
    4       SUBROUTINE suphec
     4      SUBROUTINE suphec(cpp_)
    55C
    66#include "YOMCST.h"
    77cIM cf. JLD
     8       REAL cpp_   ! from dynamics
    89       LOGICAL firstcall
    910       SAVE firstcall
     
    132133! VENUS: Cp(T) = RCPD*(T/T0)^nu (RCPD phys = cpp dyn)
    133134! avec RCPD=1000., T0=460. et nu=0.35
    134       RCPD=1.0e3
    135 !     RCPD=9.0e2  ! Version constante
     135      RCPD=cpp_
    136136
    137137      RCVD=RCPD-RD
Note: See TracChangeset for help on using the changeset viewer.