Ignore:
Timestamp:
Jan 29, 2026, 12:52:39 AM (6 weeks ago)
Author:
fhourdin
Message:

Travail pour la replayisation de la convection

Reunion de tous les anciens common devenus modules, dans lmdz_cv_ini.
Déplacement de presque toutes les routines d'initialisation dans lmdz_cv_ini.
Encapsulage de certains sous-programmes dans des modules.
Suppression de programmes inutilisés (cv3_crit et cv3_incp)
Reste :

  • à sortir des routines d'initialisation "_pre" de cv_driver et

cva_driver

  • à passer le variables argunement en intent(in/out/inout).

La convergence numérique a été testée pour
iflag_con=3/30/4
en 3D parallèle.
La compilation de la version isotopique fonctionne.

File:
1 moved

Legend:

Unmodified
Added
Removed
  • LMDZ6/trunk/libf/phylmd/cv_driver_mod.F90

    r6057 r6058  
    1 
    21! $Header$
     2MODULE cv_driver_mod
     3
     4CONTAINS
    35
    46SUBROUTINE cv_driver(len, nd, ndp1, ntra, iflag_con, t1, q1, qs1, u1, v1, &
     
    1214
    1315  USE dimphy
    14   USE cv30_routines_mod, ONLY: cv30_param, cv30_prelim, cv30_feed, cv30_undilute1, cv30_trigger, cv30_compress, cv30_undilute2, &
     16  USE cv30_routines_mod, ONLY: cv30_prelim, cv30_feed, cv30_undilute1, cv30_trigger, cv30_compress, cv30_undilute2, &
    1517          cv30_closure, cv30_epmax_fn_cape, cv30_mixing, cv30_unsat, cv30_yield, cv30_tracer, cv30_uncompress
    16   USE cv_routines_mod
     18  USE cv_routines_mod, ONLY : cv_prelim, cv_feed, cv_undilute1, cv_trigger, cv_compress, cv_undilute2, cv_closure, cv_mixing, cv_unsat, cv_yield, cv_uncompress
     19
     20  USE lmdz_cv_ini, ONLY : cv_param, cv_flag, cv_thermo ! A retirer apres replayisation
     21
    1722  IMPLICIT NONE
    1823
     
    352357  ! -------------------------------------------------------------------
    353358  ! --- SET CONSTANTS AND PARAMETERS
    354   ! -------------------------------------------------------------------
    355   ! print *, '-> cv_driver'      !jyg
    356   ! -- set simulation flags:
    357   ! (common cvflag)
    358 
    359   CALL cv_flag(0)
    360 
    361   ! -- set thermodynamical constants:
    362   ! (common cvthermo)
    363 
    364   CALL cv_thermo(iflag_con)
    365 
    366   ! -- set convect parameters
    367 
    368   ! includes microphysical parameters and parameters that
    369   ! control the rate of approach to quasi-equilibrium)
    370   ! (common cvparam)
    371 
    372 
    373   IF (iflag_con==30) THEN
    374     CALL cv30_param(nd, delt)
    375   END IF
    376 
    377   IF (iflag_con==4) THEN
    378     CALL cv_param(nd)
    379   END IF
     359! Replay deplace vers lmdz_cv_ini  ! -------------------------------------------------------------------
     360! Replay deplace vers lmdz_cv_ini  ! print *, '-> cv_driver'      !jyg
     361! Replay deplace vers lmdz_cv_ini  ! -- set simulation flags:
     362! Replay deplace vers lmdz_cv_ini  ! (common cvflag)
     363! Replay deplace vers lmdz_cv_ini
     364! Replay deplace vers lmdz_cv_ini  CALL cv_flag(0)
     365! Replay deplace vers lmdz_cv_ini
     366! Replay deplace vers lmdz_cv_ini  ! -- set thermodynamical constants:
     367! Replay deplace vers lmdz_cv_ini  ! (common cvthermo)
     368! Replay deplace vers lmdz_cv_ini
     369! Replay deplace vers lmdz_cv_ini  CALL cv_thermo(iflag_con)
     370! Replay deplace vers lmdz_cv_ini
     371! Replay deplace vers lmdz_cv_ini  ! -- set convect parameters
     372! Replay deplace vers lmdz_cv_ini
     373! Replay deplace vers lmdz_cv_ini  ! includes microphysical parameters and parameters that
     374! Replay deplace vers lmdz_cv_ini  ! control the rate of approach to quasi-equilibrium)
     375! Replay deplace vers lmdz_cv_ini  ! (common cvparam)
     376! Replay deplace vers lmdz_cv_ini
     377! Replay deplace vers lmdz_cv_ini
     378! Replay deplace vers lmdz_cv_ini  IF (iflag_con==30) THEN
     379! Replay deplace vers lmdz_cv_ini    CALL cv30_param(nd, delt)
     380! Replay deplace vers lmdz_cv_ini  END IF
     381! Replay deplace vers lmdz_cv_ini
     382! Replay deplace vers lmdz_cv_ini  IF (iflag_con==4) THEN
     383! Replay deplace vers lmdz_cv_ini    CALL cv_param(nd)
     384! Replay deplace vers lmdz_cv_ini  END IF
    380385
    381386  ! ---------------------------------------------------------------------
     
    683688END SUBROUTINE cv_driver
    684689
    685 ! ==================================================================
    686 SUBROUTINE cv_flag(iflag_ice_thermo)
    687 
    688   USE cvflag_mod_h
    689   USE ioipsl_getin_p_mod, ONLY : getin_p
    690 
    691   IMPLICIT NONE
    692 
    693   ! Argument : iflag_ice_thermo : ice thermodynamics is taken into account if
    694   ! iflag_ice_thermo >=1
    695   INTEGER iflag_ice_thermo
    696 
    697 
    698   ! -- si .TRUE., on rend la gravite plus explicite et eventuellement
    699   ! differente de 10.0 dans convect3:
    700   cvflag_grav = .TRUE.
    701   cvflag_ice = iflag_ice_thermo >= 1
    702   !
    703 ! si icvflag_Tpa=0, alors la fraction de glace dans l'ascendance adiabatique est
    704   ! fonction de la temperature de l'environnement et la temperature de l'ascendance est
    705   ! calculee en deux it�rations, une en supposant qu'il n'y a pas de glace et l'autre
    706   ! en ajoutant la glace (ancien sch�ma d'Arnaud Jam).
    707 ! si icvflag_Tpa=1, alors la fraction de glace dans l'ascendance adiabatique est
    708   ! fonction de la temperature de l'environnement et la temperature de l'ascendance est
    709   ! calculee en une seule iteration.
    710 ! si icvflag_Tpa=2, alors la fraction de glace dans l'ascendance adiabatique est
    711   ! fonction de la temperature de l'ascendance et la temperature de l'ascendance est
    712   ! calculee en une seule iteration.
    713   icvflag_Tpa=0
    714   call getin_p('icvflag_Tpa', icvflag_Tpa)
    715 
    716   RETURN
    717 END SUBROUTINE cv_flag
    718 
    719 ! ==================================================================
    720 SUBROUTINE cv_thermo(iflag_con)
    721   USE yomcst_mod_h
    722   USE lmdz_cv_ini, ONLY : ci,cl,clmci,clmcpd,clmcpv,cpd,cpdmcp,cpv,cpvmcl,cpvmcpd,eps,epsi,epsim1,g,ginv,grav,hrd,lf0,lv0,rowl,rrd,rrv,t0
    723 
    724 IMPLICIT NONE
    725 
    726   ! -------------------------------------------------------------
    727   ! Set thermodynamical constants for convectL
    728   ! -------------------------------------------------------------
    729 
    730 
    731 
    732   INTEGER iflag_con
    733 
    734 
    735   ! original set from convect:
    736   IF (iflag_con==4) THEN
    737     cpd = 1005.7
    738     cpv = 1870.0
    739     cl = 4190.0
    740     rrv = 461.5
    741     rrd = 287.04
    742     lv0 = 2.501E6
    743     g = 9.8
    744     t0 = 273.15
    745     grav = g
    746   ELSE
    747 
    748     ! constants consistent with LMDZ:
    749     cpd = rcpd
    750     cpv = rcpv
    751     cl = rcw
    752     ci = rcs
    753     rrv = rv
    754     rrd = rd
    755     lv0 = rlvtt
    756     lf0 = rlstt - rlvtt
    757     g = rg ! not used in convect3
    758     ! ori      t0  = RTT
    759     t0 = 273.15 ! convect3 (RTT=273.16)
    760     ! maf       grav= 10.    ! implicitely or explicitely used in convect3
    761     grav = g ! implicitely or explicitely used in convect3
    762   END IF
    763 
    764   rowl = 1000.0 !(a quelle variable de YOMCST cela correspond-il?)
    765 
    766   clmcpv = cl - cpv
    767   clmcpd = cl - cpd
    768   clmci = cl - ci
    769   cpdmcp = cpd - cpv
    770   cpvmcpd = cpv - cpd
    771   cpvmcl = cl - cpv ! for convect3
    772   eps = rrd/rrv
    773   epsi = 1.0/eps
    774   epsim1 = epsi - 1.0
    775   ! ginv=1.0/g
    776   ginv = 1.0/grav
    777   hrd = 0.5*rrd
    778 
    779   RETURN
    780 END SUBROUTINE cv_thermo
     690END MODULE cv_driver_mod
Note: See TracChangeset for help on using the changeset viewer.