Ignore:
Timestamp:
Jun 14, 2015, 9:13:32 PM (9 years ago)
Author:
Laurent Fairhead
Message:

Merged trunk changes -r2237:2291 into testing branch

Location:
LMDZ5/branches/testing
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • LMDZ5/branches/testing

  • LMDZ5/branches/testing/libf/dyn3dmem/qminimum_loc.F

    r1910 r2298  
    1       SUBROUTINE qminimum_loc( q,nq,deltap )
     1      SUBROUTINE qminimum_loc( q,nqtot,deltap )
    22      USE parallel_lmdz
     3      USE infotrac, ONLY: ok_isotopes,ntraciso,iqiso,ok_iso_verif
    34      IMPLICIT none
    45c
     
    1011#include "comvert.h"
    1112c
    12       INTEGER nq
    13       REAL q(ijb_u:ije_u,llm,nq), deltap(ijb_u:ije_u,llm)
     13      INTEGER nqtot ! CRisi: on remplace nq par nqtot
     14      REAL q(ijb_u:ije_u,llm,nqtot), deltap(ijb_u:ije_u,llm)
    1415c
    1516      INTEGER iq_vap, iq_liq
     
    2728      INTEGER i, k, iq
    2829      REAL zx_defau, zx_abc, zx_pump(ijb_u:ije_u), pompe
     30
     31      real zx_defau_diag(ijb_u:ije_u,llm,2)
     32      real q_follow(ijb_u:ije_u,llm,2)
    2933c
    3034      REAL SSUM
     
    3842      INTEGER Index_pump(ij_end-ij_begin+1)
    3943      INTEGER nb_pump
     44      INTEGER ixt
     45      INTEGER iso_verif_noNaN_nostop
    4046c
    4147c Quand l'eau liquide est trop petite (ou negative), on prend
     
    4450c
    4551
     52        !write(*,*) 'qminimum 52: entree'
     53        if (ok_iso_verif) then
     54           call check_isotopes(q,ij_begin,ij_end,'qminimum 52')   
     55        endif !if (ok_iso_verif) then     
     56
    4657      ijb=ij_begin
    4758      ije=ij_end
    4859
     60      zx_defau_diag(ijb:ije,:,:)=0.0
     61      q_follow(ijb:ije,:,1:2)=q(ijb:ije,:,1:2) 
     62
     63      !write(*,*) 'qminimum 57'
    4964c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)       
    5065      DO 1000 k = 1, llm
    5166      DO 1040 i = ijb, ije
    5267            if (seuil_liq - q(i,k,iq_liq) .gt. 0.d0 ) then
     68
     69              if (ok_isotopes) then
     70                 zx_defau_diag(i,k,iq_liq)=AMAX1
     71     :               ( seuil_liq - q(i,k,iq_liq), 0.0 )
     72              endif !if (ok_isotopes) then
     73
    5374               q(i,k,iq_vap) = q(i,k,iq_vap) + q(i,k,iq_liq) - seuil_liq
    5475               q(i,k,iq_liq) = seuil_liq
     
    6081c --->  SYNCHRO OPENMP ICI
    6182
     83
    6284c
    6385c Quand l'eau vapeur est trop faible (ou negative), on complete
    6486c le defaut en prennant de l'eau vapeur de la couche au-dessous.
    6587c
     88      !write(*,*) 'qminimum 81'
    6689      iq = iq_vap
    6790c
     
    7093c$OMP DO SCHEDULE(STATIC)
    7194      DO i = ijb, ije
     95
    7296         if ( seuil_vap - q(i,k,iq) .gt. 0.d0 ) then
     97
     98            if (ok_isotopes) then
     99              zx_defau_diag(i,k,iq)=AMAX1( seuil_vap - q(i,k,iq), 0.0 )
     100            endif !if (ok_isotopes) then
     101
    73102            q(i,k-1,iq) =  q(i,k-1,iq) - ( seuil_vap - q(i,k,iq) ) *
    74103     &           deltap(i,k) / deltap(i,k-1)
    75104            q(i,k,iq)   =  seuil_vap 
     105
    76106         endif
    77107      ENDDO
     
    79109      ENDDO
    80110c$OMP BARRIER
     111
    81112c
    82113c Quand il s'agit de la premiere couche au-dessus du sol, on
    83114c doit imprimer un message d'avertissement (saturation possible).
    84115c
     116      !write(*,*) 'qminimum 106'
    85117      nb_pump=0
    86118c$OMP DO SCHEDULE(STATIC)
     
    103135         ENDDO
    104136      ENDIF
     137
     138      !write(*,*) 'qminimum 128'
     139      if (ok_isotopes) then
     140      ! CRisi: traiter de même les traceurs d'eau
     141      ! Mais il faut les prendre à l'envers pour essayer de conserver la
     142      ! masse.
     143      ! 1) pompage dans le sol 
     144      ! On suppose que ce pompage se fait sans isotopes -> on ne modifie
     145      ! rien ici et on croise les doigts pour que ça ne soit pas trop
     146      ! génant
     147      DO i = ijb, ije
     148        if (zx_pump(i).gt.0.0) then
     149          q_follow(i,1,iq_vap)=q_follow(i,1,iq_vap)+zx_pump(i)
     150        endif !if (zx_pump(i).gt.0.0) then
     151      enddo !DO i = ijb, ije 
     152
     153      ! 2) transfert de vap vers les couches plus hautes
     154      !write(*,*) 'qminimum 139'
     155      do k=2,llm
     156        DO i = ijb, ije
     157          if (zx_defau_diag(i,k,iq_vap).gt.0.0) then             
     158              ! on ajoute la vapeur en k             
     159              do ixt=1,ntraciso
     160               q(i,k,iqiso(ixt,iq_vap))=q(i,k,iqiso(ixt,iq_vap))
     161     :              +zx_defau_diag(i,k,iq_vap)
     162     :              *q(i,k-1,iqiso(ixt,iq_vap))/q_follow(i,k-1,iq_vap)
     163               
     164              if (ok_iso_verif) then
     165                if (iso_verif_noNaN_nostop(q(i,k,iqiso(ixt,iq_vap)),
     166     :                   'qminimum 155').eq.1) then
     167                   write(*,*) 'i,k,ixt=',i,k,ixt
     168                   write(*,*) 'q_follow(i,k-1,iq_vap)=',
     169     :                   q_follow(i,k-1,iq_vap)
     170                   write(*,*) 'q(i,k,iqiso(ixt,iq_vap))=',
     171     :                   q(i,k,iqiso(ixt,iq_vap))
     172                   write(*,*) 'zx_defau_diag(i,k,iq_vap)=',
     173     :                   zx_defau_diag(i,k,iq_vap)
     174                   write(*,*) 'q(i,k-1,iqiso(ixt,iq_vap))=',
     175     :                   q(i,k-1,iqiso(ixt,iq_vap))
     176                   stop
     177                endif
     178              endif
     179
     180              ! et on la retranche en k-1
     181               q(i,k-1,iqiso(ixt,iq_vap))=q(i,k-1,iqiso(ixt,iq_vap))
     182     :              -zx_defau_diag(i,k,iq_vap)
     183     :              *deltap(i,k)/deltap(i,k-1)
     184     :              *q(i,k-1,iqiso(ixt,iq_vap))/q_follow(i,k-1,iq_vap)
     185
     186               if (ok_iso_verif) then
     187                if (iso_verif_noNaN_nostop(q(i,k-1,iqiso(ixt,iq_vap)),
     188     :                   'qminimum 175').eq.1) then
     189                   write(*,*) 'k,i,ixt=',k,i,ixt
     190                   write(*,*) 'q_follow(i,k-1,iq_vap)=',
     191     :                   q_follow(i,k-1,iq_vap)
     192                   write(*,*) 'q(i,k,iqiso(ixt,iq_vap))=',
     193     :                   q(i,k,iqiso(ixt,iq_vap))
     194                   write(*,*) 'zx_defau_diag(i,k,iq_vap)=',
     195     :                   zx_defau_diag(i,k,iq_vap)
     196                   write(*,*) 'q(i,k-1,iqiso(ixt,iq_vap))=',
     197     :                   q(i,k-1,iqiso(ixt,iq_vap))
     198                   stop
     199                endif
     200              endif
     201
     202              enddo !do ixt=1,niso
     203              q_follow(i,k,iq_vap)=   q_follow(i,k,iq_vap)
     204     :               +zx_defau_diag(i,k,iq_vap)
     205              q_follow(i,k-1,iq_vap)=   q_follow(i,k-1,iq_vap)
     206     :               -zx_defau_diag(i,k,iq_vap)
     207     :              *deltap(i,k)/deltap(i,k-1)
     208          endif !if (zx_defau_diag(i,k,iq_vap).gt.0.0) then
     209        enddo !DO i = 1, ip1jmp1       
     210       enddo !do k=2,llm
     211
     212        if (ok_iso_verif) then
     213           call check_isotopes(q,ijb,ije,'qminimum 168')
     214        endif !if (ok_iso_verif) then
     215       
     216     
     217        ! 3) transfert d'eau de la vapeur au liquide
     218        !write(*,*) 'qminimum 164'
     219        do k=1,llm
     220        DO i = ijb, ije
     221          if (zx_defau_diag(i,k,iq_liq).gt.0.0) then
     222
     223              ! on ajoute eau liquide en k en k             
     224              do ixt=1,ntraciso
     225               q(i,k,iqiso(ixt,iq_liq))=q(i,k,iqiso(ixt,iq_liq))
     226     :              +zx_defau_diag(i,k,iq_liq)
     227     :              *q(i,k,iqiso(ixt,iq_vap))/q_follow(i,k,iq_vap)
     228              ! et on la retranche à la vapeur en k
     229               q(i,k,iqiso(ixt,iq_vap))=q(i,k,iqiso(ixt,iq_vap))
     230     :              -zx_defau_diag(i,k,iq_liq)
     231     :              *q(i,k,iqiso(ixt,iq_vap))/q_follow(i,k,iq_vap)   
     232              enddo !do ixt=1,niso
     233              q_follow(i,k,iq_liq)=   q_follow(i,k,iq_liq)
     234     :               +zx_defau_diag(i,k,iq_liq)
     235              q_follow(i,k,iq_vap)=   q_follow(i,k,iq_vap)
     236     :               -zx_defau_diag(i,k,iq_liq)
     237          endif !if (zx_defau_diag(i,k,iq_vap).gt.0.0) then
     238        enddo !DO i = 1, ip1jmp1
     239       enddo !do k=2,llm 
     240
     241        if (ok_iso_verif) then
     242           call check_isotopes(q,ijb,ije,'qminimum 197')
     243        endif !if (ok_iso_verif) then
     244
     245      endif !if (ok_isotopes) then
     246      !write(*,*) 'qminimum 188'
    105247c
    106248      RETURN
Note: See TracChangeset for help on using the changeset viewer.