Ignore:
Timestamp:
Jun 17, 2022, 4:24:49 PM (2 years ago)
Author:
lguez
Message:

Sync latest trunk changes to branch LMDZ-ECRAD.

Location:
LMDZ6/branches/LMDZ-ECRAD
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/branches/LMDZ-ECRAD

  • LMDZ6/branches/LMDZ-ECRAD/libf/dyn3d/qminimum.F

    r2600 r4171  
    44      SUBROUTINE qminimum( q,nqtot,deltap )
    55
    6       USE infotrac, ONLY: ok_isotopes,ntraciso,iqiso,ok_iso_verif
     6      USE infotrac, ONLY: niso, ntiso,iqIsoPha, tracers
     7      USE strings_mod, ONLY: strIdx
     8      USE readTracFiles_mod, ONLY: addPhase
    79      IMPLICIT none
    810c
     
    1618      REAL q(ip1jmp1,llm,nqtot), deltap(ip1jmp1,llm)
    1719c
    18       INTEGER iq_vap, iq_liq
    19       PARAMETER ( iq_vap = 1 ) ! indice pour l'eau vapeur
    20       PARAMETER ( iq_liq = 2 ) ! indice pour l'eau liquide
    21       REAL seuil_vap, seuil_liq
    22       PARAMETER ( seuil_vap = 1.0e-10 ) ! seuil pour l'eau vapeur
    23       PARAMETER ( seuil_liq = 1.0e-11 ) ! seuil pour l'eau liquide
     20      LOGICAL, SAVE :: first=.TRUE.
     21      INTEGER, SAVE :: iq_vap, iq_liq        ! indices pour l'eau vapeur/liquide
     22      REAL, PARAMETER :: seuil_vap = 1.0e-10 ! seuil pour l'eau vapeur
     23      REAL, PARAMETER :: seuil_liq = 1.0e-11 ! seuil pour l'eau liquide
    2424c
    2525c  NB. ....( Il est souhaitable mais non obligatoire que les valeurs des
     
    4343      !INTEGER nb_pump
    4444      INTEGER ixt
     45
     46      IF(first) THEN
     47         iq_vap = strIdx(tracers(:)%name, addPhase('H2O', 'g'))
     48         iq_liq = strIdx(tracers(:)%name, addPhase('H2O', 'l'))
     49         first = .FALSE.
     50      END IF
    4551c
    4652c Quand l'eau liquide est trop petite (ou negative), on prend
     
    4955c
    5056
    51         if (ok_iso_verif) then
    52            call check_isotopes_seq(q,ip1jmp1,'qminimum 52')   
    53         endif !if (ok_iso_verif) then     
     57      call check_isotopes_seq(q,ip1jmp1,'qminimum 52')   
    5458
    5559      zx_defau_diag(:,:,:)=0.0
     
    5963          if (seuil_liq - q(i,k,iq_liq) .gt. 0.d0 ) then
    6064
    61               if (ok_isotopes) then
    62                  zx_defau_diag(i,k,iq_liq)=AMAX1
     65              if (niso > 0) zx_defau_diag(i,k,iq_liq)=AMAX1
    6366     :               ( seuil_liq - q(i,k,iq_liq), 0.0 )
    64               endif !if (ok_isotopes) then
    6567
    6668             q(i,k,iq_vap) = q(i,k,iq_vap) + q(i,k,iq_liq) - seuil_liq
     
    8082          if ( seuil_vap - q(i,k,iq) .gt. 0.d0 ) then
    8183
    82             if (ok_isotopes) then
    83               zx_defau_diag(i,k,iq)=AMAX1( seuil_vap - q(i,k,iq), 0.0 )
    84             endif !if (ok_isotopes) then
     84            if (niso > 0)
     85     &        zx_defau_diag(i,k,iq)=AMAX1( seuil_vap - q(i,k,iq), 0.0 )
    8586
    8687            q(i,k-1,iq) =  q(i,k-1,iq) - ( seuil_vap - q(i,k,iq) ) *
     
    110111
    111112      !write(*,*) 'qminimum 128'
    112       if (ok_isotopes) then
     113      if (niso > 0) then
    113114      ! CRisi: traiter de même les traceurs d'eau
    114115      ! Mais il faut les prendre à l'envers pour essayer de conserver la
     
    130131          if (zx_defau_diag(i,k,iq_vap).gt.0.0) then             
    131132              ! on ajoute la vapeur en k             
    132               do ixt=1,ntraciso
    133                q(i,k,iqiso(ixt,iq_vap))=q(i,k,iqiso(ixt,iq_vap))
    134      :              +zx_defau_diag(i,k,iq_vap)
    135      :              *q(i,k-1,iqiso(ixt,iq_vap))/q_follow(i,k-1,iq_vap)
     133              do ixt=1,ntiso
     134               q(i,k,iqIsoPha(ixt,iq_vap))=q(i,k,iqIsoPha(ixt,iq_vap))
     135     :           +zx_defau_diag(i,k,iq_vap)
     136     :           *q(i,k-1,iqIsoPha(ixt,iq_vap))/q_follow(i,k-1,iq_vap)
    136137               
    137138              ! et on la retranche en k-1
    138                q(i,k-1,iqiso(ixt,iq_vap))=q(i,k-1,iqiso(ixt,iq_vap))
     139               q(i,k-1,iqIsoPha(ixt,iq_vap))=
     140     :            q(i,k-1,iqIsoPha(ixt,iq_vap))
    139141     :              -zx_defau_diag(i,k,iq_vap)
    140142     :              *deltap(i,k)/deltap(i,k-1)
    141      :              *q(i,k-1,iqiso(ixt,iq_vap))/q_follow(i,k-1,iq_vap)
     143     :              *q(i,k-1,iqIsoPha(ixt,iq_vap))
     144     :              /q_follow(i,k-1,iq_vap)
    142145
    143146              enddo !do ixt=1,niso
     
    151154       enddo !do k=2,llm
    152155
    153         if (ok_iso_verif) then     
    154            call check_isotopes_seq(q,ip1jmp1,'qminimum 168')
    155         endif !if (ok_iso_verif) then
     156       call check_isotopes_seq(q,ip1jmp1,'qminimum 168')
    156157       
    157158     
     
    163164
    164165              ! on ajoute eau liquide en k en k             
    165               do ixt=1,ntraciso
    166                q(i,k,iqiso(ixt,iq_liq))=q(i,k,iqiso(ixt,iq_liq))
     166              do ixt=1,ntiso
     167               q(i,k,iqIsoPha(ixt,iq_liq))=q(i,k,iqIsoPha(ixt,iq_liq))
    167168     :              +zx_defau_diag(i,k,iq_liq)
    168      :              *q(i,k,iqiso(ixt,iq_vap))/q_follow(i,k,iq_vap)
     169     :              *q(i,k,iqIsoPha(ixt,iq_vap))/q_follow(i,k,iq_vap)
    169170              ! et on la retranche à la vapeur en k
    170                q(i,k,iqiso(ixt,iq_vap))=q(i,k,iqiso(ixt,iq_vap))
     171               q(i,k,iqIsoPha(ixt,iq_vap))=q(i,k,iqIsoPha(ixt,iq_vap))
    171172     :              -zx_defau_diag(i,k,iq_liq)
    172      :              *q(i,k,iqiso(ixt,iq_vap))/q_follow(i,k,iq_vap)   
     173     :              *q(i,k,iqIsoPha(ixt,iq_vap))/q_follow(i,k,iq_vap)   
    173174              enddo !do ixt=1,niso
    174175              q_follow(i,k,iq_liq)=   q_follow(i,k,iq_liq)
     
    180181       enddo !do k=2,llm 
    181182
    182         if (ok_iso_verif) then
    183            call check_isotopes_seq(q,ip1jmp1,'qminimum 197')
    184         endif !if (ok_iso_verif) then
     183       call check_isotopes_seq(q,ip1jmp1,'qminimum 197')
    185184
    186       endif !if (ok_isotopes) then
     185      endif !if (niso > 0) then
    187186      !write(*,*) 'qminimum 188'
    188187     
Note: See TracChangeset for help on using the changeset viewer.