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/dyn3dmem/qminimum_loc.F

    r3801 r4171  
    44      SUBROUTINE qminimum_loc( q,nqtot,deltap )
    55      USE parallel_lmdz
    6       USE infotrac, ONLY: ok_isotopes,ntraciso,iqiso,ok_iso_verif,             &
    7      &   ratiomin,qperemin ! CRisi 23nov2020
     6      USE infotrac, ONLY: niso, ntiso, iqIsoPha, tracers,
     7     &                    isoCheck, min_qParent
     8      USE strings_mod, ONLY: strIdx
     9      USE readTracFiles_mod, ONLY: addPhase
    810      IMPLICIT none
    911c
     
    1820      REAL q(ijb_u:ije_u,llm,nqtot), deltap(ijb_u:ije_u,llm)
    1921c
    20       INTEGER iq_vap, iq_liq
    21       PARAMETER ( iq_vap = 1 ) ! indice pour l'eau vapeur
    22       PARAMETER ( iq_liq = 2 ) ! indice pour l'eau liquide
    23       REAL seuil_vap, seuil_liq
    24       PARAMETER ( seuil_vap = 1.0e-10 ) ! seuil pour l'eau vapeur
    25       PARAMETER ( seuil_liq = 1.0e-11 ) ! seuil pour l'eau liquide
     22      LOGICAL, SAVE :: first=.TRUE.
     23      INTEGER, SAVE :: iq_vap, iq_liq        ! indices pour l'eau vapeur/liquide
     24c$OMP THREADPRIVATE(iq_vap, iq_liq, first)
     25      REAL, PARAMETER :: seuil_vap = 1.0e-10 ! seuil pour l'eau vapeur
     26      REAL, PARAMETER :: seuil_liq = 1.0e-11 ! seuil pour l'eau liquide
    2627c
    2728c  NB. ....( Il est souhaitable mais non obligatoire que les valeurs des
     
    5455c
    5556
    56         !write(lunout,*) 'qminimum 52: entree'
    57         if (ok_iso_verif) then
    58            call check_isotopes(q,ij_begin,ij_end,'qminimum 52')   
    59         endif !if (ok_iso_verif) then     
     57      !write(lunout,*) 'qminimum 52: entree'
     58      IF(first) THEN
     59         iq_vap = strIdx(tracers(:)%name, addPhase('H2O', 'g'))
     60         iq_liq = strIdx(tracers(:)%name, addPhase('H2O', 'l'))
     61         first = .FALSE.
     62      END IF
     63      call check_isotopes(q,ij_begin,ij_end,'qminimum 52')   
    6064
    6165      ijb=ij_begin
     
    7175            if (seuil_liq - q(i,k,iq_liq) .gt. 0.d0 ) then
    7276
    73               if (ok_isotopes) then
    74                  zx_defau_diag(i,k,iq_liq)=AMAX1
     77              if (niso > 0) zx_defau_diag(i,k,iq_liq)=AMAX1
    7578     :               ( seuil_liq - q(i,k,iq_liq), 0.0 )
    76               endif !if (ok_isotopes) then
    7779
    7880               q(i,k,iq_vap) = q(i,k,iq_vap) + q(i,k,iq_liq) - seuil_liq
     
    100102         if ( seuil_vap - q(i,k,iq) .gt. 0.d0 ) then
    101103
    102             if (ok_isotopes) then
    103               zx_defau_diag(i,k,iq)=AMAX1( seuil_vap - q(i,k,iq), 0.0 )
    104             endif !if (ok_isotopes) then
     104            if (niso > 0)
     105     &        zx_defau_diag(i,k,iq)=AMAX1( seuil_vap - q(i,k,iq), 0.0 )
    105106
    106107            q(i,k-1,iq) =  q(i,k-1,iq) - ( seuil_vap - q(i,k,iq) ) *
     
    141142
    142143      !write(lunout,*) 'qminimum 128'
    143       if (ok_isotopes) then
     144      if (niso > 0) then
    144145              !write(lunout,*) 'qminimum 140'
    145146      ! CRisi: traiter de même les traceurs d'eau
     
    172173!              write(lunout,*) 'i,k,q_follow(i,k-1,iq_vap)=',
    173174!     :                 i,k,q_follow(i,k-1,iq_vap)         
    174               if (q_follow(i,k-1,iq_vap).lt.qperemin) then
     175              if (q_follow(i,k-1,iq_vap).lt.min_qParent) then
    175176                write(lunout,*) 'tmp qmin: on stoppe'
    176177                write(lunout,*) 'zx_pump(i)=',zx_pump(i)
     
    180181                call abort_gcm("qminimum","not enough vapor",1)
    181182              endif 
    182             do ixt=1,ntraciso
     183            do ixt=1,ntiso
    183184!                write(lunout,*) 'qmin 168: ixt=',ixt
    184 !                write(lunout,*) 'q(i,k,iqiso(ixt,iq_vap)=',
    185 !     :             q(i,k,iqiso(ixt,iq_vap))
     185!                write(lunout,*) 'q(i,k,iqIsoPha(ixt,iq_vap)=',
     186!     :             q(i,k,iqIsoPha(ixt,iq_vap))
    186187!                write(lunout,*) 'zx_defau_diag(i,k,iq_vap)=',
    187188!     :                  zx_defau_diag(i,k,iq_vap)
    188 !                write(lunout,*) 'q(i,k-1,iqiso(ixt,iq_vap)=',
    189 !     :                   q(i,k-1,iqiso(ixt,iq_vap))     
    190 
    191                q(i,k,iqiso(ixt,iq_vap))=q(i,k,iqiso(ixt,iq_vap))
    192      :              +zx_defau_diag(i,k,iq_vap)
    193      :              *q(i,k-1,iqiso(ixt,iq_vap))/q_follow(i,k-1,iq_vap)
     189!                write(lunout,*) 'q(i,k-1,iqIsoPha(ixt,iq_vap)=',
     190!     :                   q(i,k-1,iqIsoPha(ixt,iq_vap))     
     191
     192               q(i,k,iqIsoPha(ixt,iq_vap))=q(i,k,iqIsoPha(ixt,iq_vap))
     193     :           +zx_defau_diag(i,k,iq_vap)
     194     :           *q(i,k-1,iqIsoPha(ixt,iq_vap))/q_follow(i,k-1,iq_vap)
    194195               
    195               if (ok_iso_verif) then
    196                 if (iso_verif_noNaN_nostop(q(i,k,iqiso(ixt,iq_vap)),
     196              if (isoCheck) then
     197                if(iso_verif_noNaN_nostop(q(i,k,iqIsoPha(ixt,iq_vap)),
    197198     :                   'qminimum 155').eq.1) then
    198199                   write(*,*) 'i,k,ixt=',i,k,ixt
    199200                   write(*,*) 'q_follow(i,k-1,iq_vap)=',
    200201     :                   q_follow(i,k-1,iq_vap)
    201                    write(*,*) 'q(i,k,iqiso(ixt,iq_vap))=',
    202      :                   q(i,k,iqiso(ixt,iq_vap))
     202                   write(*,*) 'q(i,k,iqIsoPha(ixt,iq_vap))=',
     203     :                   q(i,k,iqIsoPha(ixt,iq_vap))
    203204                   write(*,*) 'zx_defau_diag(i,k,iq_vap)=',
    204205     :                   zx_defau_diag(i,k,iq_vap)
    205                    write(*,*) 'q(i,k-1,iqiso(ixt,iq_vap))=',
    206      :                   q(i,k-1,iqiso(ixt,iq_vap))
     206                   write(*,*) 'q(i,k-1,iqIsoPha(ixt,iq_vap))=',
     207     :                   q(i,k-1,iqIsoPha(ixt,iq_vap))
    207208                   stop
    208209                endif
     
    210211
    211212              ! et on la retranche en k-1
    212                q(i,k-1,iqiso(ixt,iq_vap))=q(i,k-1,iqiso(ixt,iq_vap))
     213               q(i,k-1,iqIsoPha(ixt,iq_vap)) =
     214     :            q(i,k-1,iqIsoPha(ixt,iq_vap))
    213215     :              -zx_defau_diag(i,k,iq_vap)
    214216     :              *deltap(i,k)/deltap(i,k-1)
    215      :              *q(i,k-1,iqiso(ixt,iq_vap))/q_follow(i,k-1,iq_vap)
    216 
    217                if (ok_iso_verif) then
    218                 if (iso_verif_noNaN_nostop(q(i,k-1,iqiso(ixt,iq_vap)),
     217     :              *q(i,k-1,iqIsoPha(ixt,iq_vap))
     218     :              /q_follow(i,k-1,iq_vap)
     219
     220               if (isoCheck) then
     221                if (iso_verif_noNaN_nostop(
     222     :              q(i,k-1,iqIsoPha(ixt,iq_vap)),
    219223     :                   'qminimum 175').eq.1) then
    220224                   write(*,*) 'k,i,ixt=',k,i,ixt
    221225                   write(*,*) 'q_follow(i,k-1,iq_vap)=',
    222226     :                   q_follow(i,k-1,iq_vap)
    223                    write(*,*) 'q(i,k,iqiso(ixt,iq_vap))=',
    224      :                   q(i,k,iqiso(ixt,iq_vap))
     227                   write(*,*) 'q(i,k,iqIsoPha(ixt,iq_vap))=',
     228     :                   q(i,k,iqIsoPha(ixt,iq_vap))
    225229                   write(*,*) 'zx_defau_diag(i,k,iq_vap)=',
    226230     :                   zx_defau_diag(i,k,iq_vap)
    227                    write(*,*) 'q(i,k-1,iqiso(ixt,iq_vap))=',
    228      :                   q(i,k-1,iqiso(ixt,iq_vap))
     231                   write(*,*) 'q(i,k-1,iqIsoPha(ixt,iq_vap))=',
     232     :                   q(i,k-1,iqIsoPha(ixt,iq_vap))
    229233                   stop
    230234                endif
     
    242246        enddo !do k=2,llm
    243247
    244         if (ok_iso_verif) then
    245            call check_isotopes(q,ijb,ije,'qminimum 168')
    246         endif !if (ok_iso_verif) then
     248        call check_isotopes(q,ijb,ije,'qminimum 168')
    247249       
    248250     
     
    255257
    256258              ! on ajoute eau liquide en k en k             
    257               do ixt=1,ntraciso
    258                q(i,k,iqiso(ixt,iq_liq))=q(i,k,iqiso(ixt,iq_liq))
     259              do ixt=1,ntiso
     260               q(i,k,iqIsoPha(ixt,iq_liq))=q(i,k,iqIsoPha(ixt,iq_liq))
    259261     :              +zx_defau_diag(i,k,iq_liq)
    260      :              *q(i,k,iqiso(ixt,iq_vap))/q_follow(i,k,iq_vap)
     262     :              *q(i,k,iqIsoPha(ixt,iq_vap))/q_follow(i,k,iq_vap)
    261263              ! et on la retranche à la vapeur en k
    262                q(i,k,iqiso(ixt,iq_vap))=q(i,k,iqiso(ixt,iq_vap))
     264               q(i,k,iqIsoPha(ixt,iq_vap))=q(i,k,iqIsoPha(ixt,iq_vap))
    263265     :              -zx_defau_diag(i,k,iq_liq)
    264      :              *q(i,k,iqiso(ixt,iq_vap))/q_follow(i,k,iq_vap)   
     266     :              *q(i,k,iqIsoPha(ixt,iq_vap))/q_follow(i,k,iq_vap)   
    265267              enddo !do ixt=1,niso
    266268              q_follow(i,k,iq_liq)=   q_follow(i,k,iq_liq)
     
    273275       enddo !do k=2,llm 
    274276
    275         if (ok_iso_verif) then
    276            call check_isotopes(q,ijb,ije,'qminimum 197')
    277         endif !if (ok_iso_verif) then
    278 
    279       endif !if (ok_isotopes) then
     277       call check_isotopes(q,ijb,ije,'qminimum 197')
     278
     279      endif !if (niso > 0) then
    280280      !write(*,*) 'qminimum 188'
    281281c
Note: See TracChangeset for help on using the changeset viewer.