Ignore:
Timestamp:
Jan 15, 2021, 6:10:56 PM (3 years ago)
Author:
Laurent Fairhead
Message:

Modifications nécessaires pour les isotopes
CRisi

File:
1 edited

Legend:

Unmodified
Added
Removed
  • LMDZ6/trunk/libf/dyn3dmem/vlsplt_loc.F

    • Property svn:keywords set to Id
    r3435 r3800  
    1414c   --------------------------------------------------------------------
    1515      USE parallel_lmdz
    16       USE infotrac, ONLY : nqtot,nqfils,nqdesc,iqfils ! CRisi
     16      USE infotrac, ONLY : nqtot,nqfils,nqdesc,iqfils, ! CRisi                 &
     17     &                     qperemin,masseqmin,ratiomin ! MVals et CRisi
    1718      IMPLICIT NONE
    1819c
     
    329330! Il faut faire ça avant d'avoir mis à jour q et masse
    330331
    331       !write(*,*) 'vlsplt 326: iq,ijb_x,nqfils(iq)=',iq,ijb_x,nqfils(iq)
    332 
    333       if (nqfils(iq).gt.0) then 
     332       if (nqfils(iq).gt.0) then
    334333       do ifils=1,nqdesc(iq)
     334       !do ifils=1,nqfils(iq) ! modif C Risi 22nov2020
     335        ! attention: comme Ratio est utilisé comme q dans l'appel
     336        ! recursif, il doit contenir à lui seul tous les indices de tous
     337        ! les descendants!
    335338         iq2=iqfils(ifils,iq)
    336339c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
     
    339342           ! On a besoin de q et masse seulement entre ijb et ije. On ne
    340343           ! les calcule donc que de ijb à ije
    341            masse(ij,l,iq2)=masse(ij,l,iq)*q(ij,l,iq)
    342            Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)
     344           !MVals: veiller a ce qu'on n'ait pas de denominateur nul
     345           masse(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),masseqmin)
     346           if (q(ij,l,iq).gt.qperemin) then ! modif 13 nov 2020
     347             Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)
     348           else
     349             Ratio(ij,l,iq2)=ratiomin
     350           endif
    343351          enddo   
    344352         enddo
     
    352360! end CRisi
    353361
    354       !write(*,*) 'vlsplt 360: iq,ijb_x=',iq,ijb_x
    355362
    356363c   calcul des tENDances
     
    358365      DO l=1,llm
    359366         DO ij=ijb+1,ije
    360             new_m=masse(ij,l,iq)+u_m(ij-1,l)-u_m(ij,l)
     367            !MVals: veiller a ce qu'on n'ait pas de denominateur nul
     368            new_m=max(masse(ij,l,iq)+u_m(ij-1,l)-u_m(ij,l),masseqmin)
    361369            q(ij,l,iq)=(q(ij,l,iq)*masse(ij,l,iq)+
    362370     &        u_mq(ij-1,l)-u_mq(ij,l))
     
    371379      ENDDO
    372380c$OMP END DO NOWAIT
    373       !write(*,*) 'vlsplt 380: iq,ijb_x=',iq,ijb_x
    374381
    375382! retablir les fils en rapport de melange par rapport a l'air:
     
    378385      if (nqfils(iq).gt.0) then 
    379386       do ifils=1,nqdesc(iq)
     387       !do ifils=1,nqfils(iq) ! modif C Risi 22nov2020
    380388         iq2=iqfils(ifils,iq) 
    381389c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)   
     
    414422c   --------------------------------------------------------------------
    415423      USE parallel_lmdz
    416       USE infotrac, ONLY : nqtot,nqfils,nqdesc,iqfils ! CRisi
     424      USE infotrac, ONLY : nqtot,nqfils,nqdesc,iqfils, ! CRisi                 &
     425     &                     qperemin,masseqmin,ratiomin ! MVals et CRisi   
    417426      USE comconst_mod, ONLY: pi
    418427      IMPLICIT NONE
     
    468477      DATA temps0,temps1,temps2,temps3,temps4,temps5/0.,0.,0.,0.,0.,0./
    469478      INTEGER ijb,ije
     479      INTEGER ijbm,ijem
    470480
    471481      ijb=ij_begin-2*iip1
     
    726736      ijb=ij_begin-2*iip1
    727737      ije=ij_end+2*iip1
     738      ijbm=ij_begin-iip1
     739      ijem=ij_end+iip1
    728740      if (pole_nord) ijb=ij_begin
    729       if (pole_sud)  ije=ij_end
    730    
     741      if (pole_sud)  ije=ij_end 
     742      if (pole_nord) ijbm=ij_begin
     743      if (pole_sud)  ijem=ij_end
     744
    731745      if (nqfils(iq).gt.0) then 
    732746       do ifils=1,nqdesc(iq)
     747       !do ifils=1,nqfils(iq) ! modif C Risi 22nov2020
    733748         iq2=iqfils(ifils,iq)
    734749c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
    735750         DO l=1,llm
     751          ! modif des bornes: CRisi 16 nov 2020
     752          ! d'abord masse avec bornes corrigées
     753          DO ij=ijbm,ijem
     754           !MVals: veiller a ce qu'on n'ait pas de denominateur nul
     755           masse(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),masseqmin)
     756          enddo !DO ij=ijbm,ijem
     757
     758          ! ensuite Ratio avec anciennes bornes
    736759         DO ij=ijb,ije
    737            masse(ij,l,iq2)=masse(ij,l,iq)*q(ij,l,iq)
    738            Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)     
    739           enddo   
    740          enddo
     760           !MVals: veiller a ce qu'on n'ait pas de denominateur nul
     761           if (q(ij,l,iq).gt.qperemin) then ! modif 13 nov 2020
     762             Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)
     763           else
     764             Ratio(ij,l,iq2)=ratiomin 
     765           endif     
     766          enddo !DO ij=ijbm,ijem 
     767         enddo !DO l=1,llm
    741768c$OMP END DO NOWAIT
    742769        enddo !do ifils=1,nqdesc(iq)
     
    868895      USE parallel_lmdz
    869896      USE vlz_mod
    870       USE infotrac, ONLY : nqtot,nqfils,nqdesc,iqfils ! CRisi 
     897      USE infotrac, ONLY : nqtot,nqfils,nqdesc,iqfils, ! CRisi                 &
     898     &                     qperemin,masseqmin,ratiomin ! MVals et CRisi
     899     
    871900      IMPLICIT NONE
    872901c
     
    10841113                lorig(ij,l)=lorig(ij,l)-1
    10851114             ENDIF
     1115             ! CRisi 24nov2020: ajout d'un message d'erreur clair au lieu d'un plantage
     1116             ! pour seg fault
     1117             if (lorig(ij,l).eq.0) then
     1118                call abort_gcm("vlz in vlsplt_loc",
     1119     :           "unfixable violation of CFL",1)
     1120             endif
    10861121             morig(ij,l)=masse(ij,lorig(ij,l),iq)
    10871122             qorig(ij,l)=q(ij,lorig(ij,l),iq)
     
    11271162      if (nqfils(iq).gt.0) then 
    11281163       do ifils=1,nqdesc(iq)
     1164       !do ifils=1,nqfils(iq) ! modif C Risi 22 nov 2020
    11291165         iq2=iqfils(ifils,iq)
    11301166c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
    11311167         DO l=1,llm
    11321168          DO ij=ijb,ije
    1133            masse(ij,l,iq2)=masse(ij,l,iq)*q(ij,l,iq)
    1134            Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)
     1169           !MVals: veiller a ce qu'on n'ait pas de denominateur nul
     1170           masse(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),masseqmin)
     1171           if (q(ij,l,iq).gt.qperemin) then
     1172             Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)
     1173           else
     1174             Ratio(ij,l,iq2)=ratiomin
     1175           endif
    11351176           !wq(ij,l,iq2)=wq(ij,l,iq) ! correction bug le 15mai2015
    11361177           w(ij,l,iq2)=wq(ij,l,iq)
Note: See TracChangeset for help on using the changeset viewer.