Ignore:
Timestamp:
Dec 23, 2021, 6:54:17 PM (2 years ago)
Author:
dcugnet
Message:

Second commit for new tracers.

  • include most of the keys in the tracers descriptor vector "tracers(:)".
  • fix in phylmdiso/cv3_routines: fq_* variables were used where their fxt_* counterparts were expected.
  • multiple IF(nqdesc(iq)>0) and IF(nqfils(iq)>0) tests suppressed, because they are not needed: "do ... enddo" loops with 0 upper bound are not executed.
  • remove French accents from comments (encoding problem) in phylmdiso/cv3_routines and phylmdiso/cv30_routines.
  • modifications in "isotopes_verif_mod", where the call to function "iso_verif_tag17_q_deltad_chn" in "iso_verif_tag17_q_deltad_chn" was not detected at linking stage, although defined in the same module (?).
File:
1 edited

Legend:

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

    r3800 r4050  
    1414c   --------------------------------------------------------------------
    1515      USE parallel_lmdz
    16       USE infotrac, ONLY : nqtot,nqfils,nqdesc,iqfils, ! CRisi                 &
     16      USE infotrac, ONLY : nqtot,tracers, ! CRisi                 &
    1717     &                     qperemin,masseqmin,ratiomin ! MVals et CRisi
    1818      IMPLICIT NONE
     
    330330! Il faut faire ça avant d'avoir mis à jour q et masse
    331331
    332        if (nqfils(iq).gt.0) then
    333        do ifils=1,nqdesc(iq)
    334        !do ifils=1,nqfils(iq) ! modif C Risi 22nov2020
     332      do ifils=1,tracers(iq)%nqDescen
    335333        ! attention: comme Ratio est utilisé comme q dans l'appel
    336334        ! recursif, il doit contenir à lui seul tous les indices de tous
    337335        ! les descendants!
    338          iq2=iqfils(ifils,iq)
    339 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
    340          DO l=1,llm
     336        iq2=tracers(iq)%iqDescen(ifils)
     337c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
     338        DO l=1,llm
    341339          DO ij=ijb,ije
    342            ! On a besoin de q et masse seulement entre ijb et ije. On ne
    343            ! les calcule donc que de ijb à ije
    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
     340            ! On a besoin de q et masse seulement entre ijb et ije. On ne
     341            ! les calcule donc que de ijb à ije
     342            !MVals: veiller a ce qu'on n'ait pas de denominateur nul
     343            masse(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),masseqmin)
     344            if (q(ij,l,iq).gt.qperemin) then ! modif 13 nov 2020
     345              Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)
     346            else
     347              Ratio(ij,l,iq2)=ratiomin
     348            endif
    351349          enddo   
    352          enddo
    353 c$OMP END DO NOWAIT
    354         enddo !do ifils=1,nqdesc(iq)
    355         do ifils=1,nqfils(iq)
    356          iq2=iqfils(ifils,iq)
    357          call vlx_loc(Ratio,pente_max,masse,u_mq,ijb_x,ije_x,iq2)
    358         enddo !do ifils=1,nqfils(iq)
    359       endif !if (nqfils(iq).gt.0) then
     350        enddo
     351c$OMP END DO NOWAIT
     352      enddo !do ifils=1,tracers(iq)%nqDescen
     353      do ifils=1,tracers(iq)%nqChilds
     354        iq2=tracers(iq)%iqDescen(ifils)
     355        call vlx_loc(Ratio,pente_max,masse,u_mq,ijb_x,ije_x,iq2)
     356      enddo
    360357! end CRisi
    361358
     
    383380      ! On calcule q entre ijb+1 et ije -> on fait pareil pour ratio
    384381      ! puis on boucle en longitude
    385       if (nqfils(iq).gt.0) then 
    386        do ifils=1,nqdesc(iq)
    387        !do ifils=1,nqfils(iq) ! modif C Risi 22nov2020
    388          iq2=iqfils(ifils,iq) 
     382      do ifils=1,tracers(iq)%nqDescen
     383        iq2=tracers(iq)%iqDescen(ifils)
    389384c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)   
    390          DO l=1,llm
     385        DO l=1,llm
    391386          DO ij=ijb+1,ije
    392387            q(ij,l,iq2)=q(ij,l,iq)*Ratio(ij,l,iq2)           
    393388          enddo
    394389          DO ij=ijb+iip1-1,ije,iip1
    395              q(ij-iim,l,iq2)=q(ij,l,iq2)
    396           enddo ! DO ij=ijb+iip1-1,ije,iip1
    397          enddo !DO l=1,llm
    398 c$OMP END DO NOWAIT
    399         enddo !do ifils=1,nqdesc(iq)
    400       endif !if (nqfils(iq).gt.0) then
     390            q(ij-iim,l,iq2)=q(ij,l,iq2)
     391          enddo
     392        enddo
     393c$OMP END DO NOWAIT
     394      enddo
    401395
    402396      !write(*,*) 'vlsplt 399: iq,ijb_x=',iq,ijb_x
     
    422416c   --------------------------------------------------------------------
    423417      USE parallel_lmdz
    424       USE infotrac, ONLY : nqtot,nqfils,nqdesc,iqfils, ! CRisi                 &
     418      USE infotrac, ONLY : nqtot,tracers, ! CRisi                 &
    425419     &                     qperemin,masseqmin,ratiomin ! MVals et CRisi   
    426420      USE comconst_mod, ONLY: pi
     
    732726! CRisi: appel récursif de l'advection sur les fils.
    733727! Il faut faire ça avant d'avoir mis à jour q et masse
    734       !write(*,*) 'vly 689: iq,nqfils(iq)=',iq,nqfils(iq)
     728      !write(*,*) 'vly 689: iq,nqDesc(iq)=',iq,tracers(iq)%nqDescen
    735729
    736730      ijb=ij_begin-2*iip1
     
    743737      if (pole_sud)  ijem=ij_end
    744738
    745       if (nqfils(iq).gt.0) then 
    746        do ifils=1,nqdesc(iq)
    747        !do ifils=1,nqfils(iq) ! modif C Risi 22nov2020
    748          iq2=iqfils(ifils,iq)
     739      do ifils=1,tracers(iq)%nqDescen
     740        iq2=tracers(iq)%iqDescen(ifils)
    749741c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
    750          DO l=1,llm
    751           ! modif des bornes: CRisi 16 nov 2020
    752           ! d'abord masse avec bornes corrigées
     742        DO l=1,llm
     743        ! modif des bornes: CRisi 16 nov 2020
     744        ! d'abord masse avec bornes corrigées
    753745          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
     746          !MVals: veiller a ce qu'on n'ait pas de denominateur nul
     747            masse(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),masseqmin)
     748          enddo
    757749
    758750          ! ensuite Ratio avec anciennes bornes
    759          DO ij=ijb,ije
    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     
     751          DO ij=ijb,ije
     752          !MVals: veiller a ce qu'on n'ait pas de denominateur nul
     753            if (q(ij,l,iq).gt.qperemin) then ! modif 13 nov 2020
     754              Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)
     755            else
     756              Ratio(ij,l,iq2)=ratiomin 
     757            endif     
    766758          enddo !DO ij=ijbm,ijem 
    767          enddo !DO l=1,llm
    768 c$OMP END DO NOWAIT
    769         enddo !do ifils=1,nqdesc(iq)
    770 
    771         do ifils=1,nqfils(iq)
    772          iq2=iqfils(ifils,iq)
    773          call vly_loc(Ratio,pente_max,masse,qbyv,iq2)
    774         enddo !do ifils=1,nqfils(iq)
    775       endif !if (nqfils(iq).gt.0) then
     759        enddo !DO l=1,llm
     760c$OMP END DO NOWAIT
     761      enddo
     762
     763      do ifils=1,tracers(iq)%nqChilds
     764        iq2=tracers(iq)%iqDescen(ifils)
     765        call vly_loc(Ratio,pente_max,masse,qbyv,iq2)
     766      enddo
    776767! end CRisi
    777768     
     
    862853!      if (pole_sud)  ije=ij_end
    863854
    864       if (nqfils(iq).gt.0) then 
    865        do ifils=1,nqdesc(iq)
    866          iq2=iqfils(ifils,iq) 
     855      do ifils=1,tracers(iq)%nqDescen
     856        iq2=tracers(iq)%iqDescen(ifils)
    867857c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)   
    868          DO l=1,llm
     858        DO l=1,llm
    869859          DO ij=ijb,ije
    870860            q(ij,l,iq2)=q(ij,l,iq)*Ratio(ij,l,iq2)           
    871861          enddo
    872          enddo
    873 c$OMP END DO NOWAIT
    874         enddo !do ifils=1,nqdesc(iq)
    875       endif !if (nqfils(iq).gt.0) then
     862        enddo
     863c$OMP END DO NOWAIT
     864      enddo
    876865
    877866
     
    895884      USE parallel_lmdz
    896885      USE vlz_mod
    897       USE infotrac, ONLY : nqtot,nqfils,nqdesc,iqfils, ! CRisi                 &
     886      USE infotrac, ONLY : nqtot,tracers, ! CRisi                 &
    898887     &                     qperemin,masseqmin,ratiomin ! MVals et CRisi
    899888     
     
    11591148! CRisi: appel récursif de l'advection sur les fils.
    11601149! Il faut faire ça avant d'avoir mis à jour q et masse
    1161       !write(*,*) 'vlsplt 942: iq,nqfils(iq)=',iq,nqfils(iq)
    1162       if (nqfils(iq).gt.0) then 
    1163        do ifils=1,nqdesc(iq)
    1164        !do ifils=1,nqfils(iq) ! modif C Risi 22 nov 2020
    1165          iq2=iqfils(ifils,iq)
    1166 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
    1167          DO l=1,llm
     1150      !write(*,*) 'vlsplt 942: iq,nqChilds(iq)=',iq,tracers(iq)%nqChilds
     1151      do ifils=1,tracers(iq)%nqDescen
     1152        iq2=tracers(iq)%iqDescen(ifils)
     1153c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)
     1154        DO l=1,llm
    11681155          DO ij=ijb,ije
    11691156           !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
    1176            !wq(ij,l,iq2)=wq(ij,l,iq) ! correction bug le 15mai2015
    1177            w(ij,l,iq2)=wq(ij,l,iq)
     1157            masse(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),masseqmin)
     1158            if (q(ij,l,iq).gt.qperemin) then
     1159              Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)
     1160            else
     1161              Ratio(ij,l,iq2)=ratiomin
     1162            endif
     1163            !wq(ij,l,iq2)=wq(ij,l,iq) ! correction bug le 15mai2015
     1164            w(ij,l,iq2)=wq(ij,l,iq)
    11781165          enddo   
    1179          enddo
    1180 c$OMP END DO NOWAIT
    1181         enddo !do ifils=1,nqdesc(iq)
     1166        enddo
     1167c$OMP END DO NOWAIT
     1168      enddo
    11821169c$OMP BARRIER
    11831170
    1184         do ifils=1,nqfils(iq)
    1185          iq2=iqfils(ifils,iq)
    1186          call vlz_loc(Ratio,pente_max,masse,w,ijb_x,ije_x,iq2)
    1187         enddo !do ifils=1,nqfils(iq)
    1188       endif !if (nqfils(iq).gt.0) then
     1171      do ifils=1,tracers(iq)%nqChilds
     1172        iq2=tracers(iq)%iqDescen(ifils)
     1173        call vlz_loc(Ratio,pente_max,masse,w,ijb_x,ije_x,iq2)
     1174      enddo
    11891175! end CRisi 
    11901176
     
    12071193     
    12081194! retablir les fils en rapport de melange par rapport a l'air:
    1209       if (nqfils(iq).gt.0) then 
    1210        do ifils=1,nqdesc(iq)
    1211          iq2=iqfils(ifils,iq) 
     1195      do ifils=1,tracers(iq)%nqDescen
     1196        iq2=tracers(iq)%iqDescen(ifils)
    12121197c$OMP DO SCHEDULE(STATIC,OMP_CHUNK)   
    1213          DO l=1,llm
     1198        DO l=1,llm
    12141199          DO ij=ijb,ije
    12151200            q(ij,l,iq2)=q(ij,l,iq)*Ratio(ij,l,iq2)           
    12161201          enddo
    1217          enddo
    1218 c$OMP END DO NOWAIT
    1219         enddo !do ifils=1,nqdesc(iq)
    1220       endif !if (nqfils(iq).gt.0) then
     1202        enddo
     1203c$OMP END DO NOWAIT
     1204      enddo
    12211205
    12221206      RETURN
Note: See TracChangeset for help on using the changeset viewer.