Ignore:
Timestamp:
Jan 15, 2016, 8:27:16 AM (9 years ago)
Author:
emillour
Message:

Common dynamics:
Updates in the dynamics (seq and ) to keep up with updates
in LMDZ5 (up to LMDZ5 trunk, rev 2325):
IMPORTANT: Modifications for isotopes are only done in dyn3d, not in dyn3dpar

as in LMDZ5 these modifications were done in dyn3dmem.
Related LMDZ5 revisions are r2270 and r2281

  • in dynlonlat_phylonlat:
  • add module "grid_atob_m.F90" (a regridding utility so far only used by phylmd/ce0l.F90, used to be dyn3d_common/grid_atob.F)
  • in misc:
  • follow up updates on wxios.F (add missing_val module variable)
  • in dyn3d_common:
  • pression.F => pression.F90
  • misc_mod.F90: moved from misc to dyn3d_common
  • added new iso_verif_dyn.F
  • covcont.F => covcont.F90
  • infotrac.F90 : add handling of isotopes (reading of corresponding traceur.def for planets not implemented)
  • dynetat0.F => dynetat0.F90 with some code factorization
  • dynredem.F => dynredem.F90 with some code factorization
  • added dynredem_mod.F90: routines used by dynredem
  • iniacademic.F90 : added isotopes-related initialization for Earth case
  • in dyn3d:
  • added check_isotopes.F
  • modified (isotopes) advtrac.F90, caladvtrac.F
  • guide_mod.F90: ported updates
  • leapfrog.F : (isotopes) updates (NB: call integrd with nqtot tracers)
  • qminimium.F : adaptations for isotopes (copied over, except that #include comvert.h is not needed).
  • vlsplt.F: adaptations for isotopes (copied over, except than #include logic.h, comvert.h not needed, and replace "include comconst.h" with use comconst_mod, ONLY: pi)
  • vlspltqs.F : same as vlsplt.F, but also keeping added modification for CP(T)
  • in dyn3dpar:
  • leapfrog_p.F: remove unecessary #ifdef CPP_EARTH cpp flag. and call integrd_p with nqtot tracers (only important for Earth)
  • dynredem_p.F => dynredem_p.F90 and some code factorization
  • and no isotopes-relates changes in dyn3dpar (since these changes have been made in LMDZ5 dyn3dmem).

EM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.COMMON/libf/dyn3d/qminimum.F

    r1422 r1508  
    22! $Header$
    33!
    4       SUBROUTINE qminimum( q,nq,deltap )
     4      SUBROUTINE qminimum( q,nqtot,deltap )
    55
     6      USE infotrac, ONLY: ok_isotopes,ntraciso,iqiso,ok_iso_verif
    67      IMPLICIT none
    78c
     
    1213#include "paramet.h"
    1314c
    14       INTEGER nq
    15       REAL q(ip1jmp1,llm,nq), deltap(ip1jmp1,llm)
     15      INTEGER nqtot
     16      REAL q(ip1jmp1,llm,nqtot), deltap(ip1jmp1,llm)
    1617c
    1718      INTEGER iq_vap, iq_liq
     
    2930      INTEGER i, k, iq
    3031      REAL zx_defau, zx_abc, zx_pump(ip1jmp1), pompe
     32
     33      real zx_defau_diag(ip1jmp1,llm,2)
     34      real q_follow(ip1jmp1,llm,2)
    3135c
    3236      REAL SSUM
     
    3539      SAVE imprim
    3640      DATA imprim /0/
     41      !INTEGER ijb,ije
     42      !INTEGER Index_pump(ij_end-ij_begin+1)
     43      !INTEGER nb_pump
     44      INTEGER ixt
    3745c
    3846c Quand l'eau liquide est trop petite (ou negative), on prend
     
    4048c (sans changer la temperature !)
    4149c
     50
     51        if (ok_iso_verif) then
     52           call check_isotopes_seq(q,ip1jmp1,'qminimum 52')   
     53        endif !if (ok_iso_verif) then     
     54
     55      zx_defau_diag(:,:,:)=0.0
     56      q_follow(:,:,1:2)=q(:,:,1:2) 
    4257      DO 1000 k = 1, llm
    4358        DO 1040 i = 1, ip1jmp1
    4459          if (seuil_liq - q(i,k,iq_liq) .gt. 0.d0 ) then
     60
     61              if (ok_isotopes) then
     62                 zx_defau_diag(i,k,iq_liq)=AMAX1
     63     :               ( seuil_liq - q(i,k,iq_liq), 0.0 )
     64              endif !if (ok_isotopes) then
     65
    4566             q(i,k,iq_vap) = q(i,k,iq_vap) + q(i,k,iq_liq) - seuil_liq
    4667             q(i,k,iq_liq) = seuil_liq
     
    5879        DO i = 1, ip1jmp1
    5980          if ( seuil_vap - q(i,k,iq) .gt. 0.d0 ) then
     81
     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
     85
    6086            q(i,k-1,iq) =  q(i,k-1,iq) - ( seuil_vap - q(i,k,iq) ) *
    6187     &                     deltap(i,k) / deltap(i,k-1)
     
    82108         ENDDO
    83109      ENDIF
     110
     111      !write(*,*) 'qminimum 128'
     112      if (ok_isotopes) then
     113      ! CRisi: traiter de même les traceurs d'eau
     114      ! Mais il faut les prendre à l'envers pour essayer de conserver la
     115      ! masse.
     116      ! 1) pompage dans le sol 
     117      ! On suppose que ce pompage se fait sans isotopes -> on ne modifie
     118      ! rien ici et on croise les doigts pour que ça ne soit pas trop
     119      ! génant
     120      DO i = 1,ip1jmp1
     121        if (zx_pump(i).gt.0.0) then
     122          q_follow(i,1,iq_vap)=q_follow(i,1,iq_vap)+zx_pump(i)
     123        endif !if (zx_pump(i).gt.0.0) then
     124      enddo !DO i = 1,ip1jmp1
     125
     126      ! 2) transfert de vap vers les couches plus hautes
     127      !write(*,*) 'qminimum 139'
     128      do k=2,llm
     129        DO i = 1,ip1jmp1
     130          if (zx_defau_diag(i,k,iq_vap).gt.0.0) then             
     131              ! 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)
     136               
     137              ! 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     :              -zx_defau_diag(i,k,iq_vap)
     140     :              *deltap(i,k)/deltap(i,k-1)
     141     :              *q(i,k-1,iqiso(ixt,iq_vap))/q_follow(i,k-1,iq_vap)
     142
     143              enddo !do ixt=1,niso
     144              q_follow(i,k,iq_vap)=   q_follow(i,k,iq_vap)
     145     :               +zx_defau_diag(i,k,iq_vap)
     146              q_follow(i,k-1,iq_vap)=   q_follow(i,k-1,iq_vap)
     147     :               -zx_defau_diag(i,k,iq_vap)
     148     :              *deltap(i,k)/deltap(i,k-1)
     149          endif !if (zx_defau_diag(i,k,iq_vap).gt.0.0) then
     150        enddo !DO i = 1, ip1jmp1       
     151       enddo !do k=2,llm
     152
     153        if (ok_iso_verif) then     
     154           call check_isotopes_seq(q,ip1jmp1,'qminimum 168')
     155        endif !if (ok_iso_verif) then
     156       
     157     
     158        ! 3) transfert d'eau de la vapeur au liquide
     159        !write(*,*) 'qminimum 164'
     160        do k=1,llm
     161        DO i = 1,ip1jmp1
     162          if (zx_defau_diag(i,k,iq_liq).gt.0.0) then
     163
     164              ! 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))
     167     :              +zx_defau_diag(i,k,iq_liq)
     168     :              *q(i,k,iqiso(ixt,iq_vap))/q_follow(i,k,iq_vap)
     169              ! et on la retranche à la vapeur en k
     170               q(i,k,iqiso(ixt,iq_vap))=q(i,k,iqiso(ixt,iq_vap))
     171     :              -zx_defau_diag(i,k,iq_liq)
     172     :              *q(i,k,iqiso(ixt,iq_vap))/q_follow(i,k,iq_vap)   
     173              enddo !do ixt=1,niso
     174              q_follow(i,k,iq_liq)=   q_follow(i,k,iq_liq)
     175     :               +zx_defau_diag(i,k,iq_liq)
     176              q_follow(i,k,iq_vap)=   q_follow(i,k,iq_vap)
     177     :               -zx_defau_diag(i,k,iq_liq)
     178          endif !if (zx_defau_diag(i,k,iq_vap).gt.0.0) then
     179        enddo !DO i = 1, ip1jmp1
     180       enddo !do k=2,llm 
     181
     182        if (ok_iso_verif) then
     183           call check_isotopes_seq(q,ip1jmp1,'qminimum 197')
     184        endif !if (ok_iso_verif) then
     185
     186      endif !if (ok_isotopes) then
     187      !write(*,*) 'qminimum 188'
     188     
    84189c
    85190      RETURN
Note: See TracChangeset for help on using the changeset viewer.