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/dyn3d/vlspltqs.F

    r2603 r4050  
    44       SUBROUTINE vlspltqs ( q,pente_max,masse,w,pbaru,pbarv,pdt,
    55     ,                                  p,pk,teta,iq             )
    6        USE infotrac, ONLY: nqtot,nqdesc,iqfils
     6       USE infotrac, ONLY: nqtot,tracers
    77c
    88c     Auteurs:   P.Le Van, F.Hourdin, F.Forget, F.Codron
     
    121121      CALL SCOPY(ijp1llm,q(1,1,iq),1,zq(1,1,iq),1)
    122122      CALL SCOPY(ijp1llm,masse,1,zm(1,1,iq),1)
    123       if (nqdesc(iq).gt.0) then 
    124        do ifils=1,nqdesc(iq)
    125         iq2=iqfils(ifils,iq)
     123      do ifils=1,tracers(iq)%nqDescen
     124        iq2=tracers(iq)%iqDescen(ifils)
    126125        CALL SCOPY(ijp1llm,q(1,1,iq2),1,zq(1,1,iq2),1)
    127        enddo 
    128       endif !if (nqfils(iq).gt.0) then
     126      enddo 
    129127
    130128c      call minmaxq(zq,qmin,qmax,'avant vlxqs     ')
     
    162160      ENDDO
    163161      ! CRisi: aussi pour les fils
    164       if (nqdesc(iq).gt.0) then
    165       do ifils=1,nqdesc(iq)
    166         iq2=iqfils(ifils,iq)
     162      do ifils=1,tracers(iq)%nqDescen
     163        iq2=tracers(iq)%iqDescen(ifils)
    167164        DO l=1,llm
    168          DO ij=1,ip1jmp1
    169            q(ij,l,iq2)=zq(ij,l,iq2)
    170          ENDDO
    171          DO ij=1,ip1jm+1,iip1
     165          DO ij=1,ip1jmp1
     166            q(ij,l,iq2)=zq(ij,l,iq2)
     167          ENDDO
     168          DO ij=1,ip1jm+1,iip1
    172169            q(ij+iim,l,iq2)=q(ij,l,iq2)
    173          ENDDO
     170          ENDDO
    174171        ENDDO
    175       enddo !do ifils=1,nqdesc(iq) 
    176       endif ! if (nqfils(iq).gt.0) then
     172      enddo
    177173      !write(*,*) 'vlspltqs 183: fin de la routine'
    178174
     
    180176      END
    181177      SUBROUTINE vlxqs(q,pente_max,masse,u_m,qsat,iq)
    182       USE infotrac, ONLY : nqtot,nqfils,nqdesc,iqfils ! CRisi
     178      USE infotrac, ONLY : nqtot,tracers ! CRisi
    183179
    184180c
     
    483479! CRisi: appel récursif de l'advection sur les fils.
    484480! Il faut faire ça avant d'avoir mis à jour q et masse
    485       !write(*,*) 'vlspltqs 326: iq,nqfils(iq)=',iq,nqfils(iq)
     481      !write(*,*) 'vlspltqs 326: iq,nqChilds(iq)=',iq,tracers(iq)%nqChilds
    486482     
    487       if (nqfils(iq).gt.0) then 
    488        do ifils=1,nqdesc(iq)
    489          iq2=iqfils(ifils,iq)
    490          DO l=1,llm
     483      do ifils=1,tracers(iq)%nqDescen
     484        iq2=tracers(iq)%iqDescen(ifils)
     485        DO l=1,llm
    491486          DO ij=iip2,ip1jm
    492            ! On a besoin de q et masse seulement entre iip2 et ip1jm
    493            masseq(ij,l,iq2)=masse(ij,l,iq)*q(ij,l,iq)
    494            Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)
     487          ! On a besoin de q et masse seulement entre iip2 et ip1jm
     488            masseq(ij,l,iq2)=masse(ij,l,iq)*q(ij,l,iq)
     489            Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)
    495490          enddo   
    496          enddo
    497         enddo !do ifils=1,nqdesc(iq)
    498         do ifils=1,nqfils(iq)
    499          iq2=iqfils(ifils,iq)
    500          call vlx(Ratio,pente_max,masseq,u_mq,iq2)
    501         enddo !do ifils=1,nqfils(iq)
    502       endif !if (nqfils(iq).gt.0) then
     491        enddo
     492      enddo
     493      do ifils=1,tracers(iq)%nqChilds
     494        iq2=tracers(iq)%iqDescen(ifils)
     495        call vlx(Ratio,pente_max,masseq,u_mq,iq2)
     496      enddo
    503497! end CRisi
    504498
     
    523517      ! On calcule q entre iip2+1,ip1jm -> on fait pareil pour ratio
    524518      ! puis on boucle en longitude
    525       if (nqdesc(iq).gt.0) then 
    526        do ifils=1,nqdesc(iq)
    527          iq2=iqfils(ifils,iq) 
    528          DO l=1,llm
     519      do ifils=1,tracers(iq)%nqDescen
     520        iq2=tracers(iq)%iqDescen(ifils)
     521        DO l=1,llm
    529522          DO ij=iip2+1,ip1jm
    530523            q(ij,l,iq2)=q(ij,l,iq)*Ratio(ij,l,iq2)           
    531524          enddo
    532525          DO ij=iip1+iip1,ip1jm,iip1
    533              q(ij-iim,l,iq2)=q(ij,l,iq2)
    534           enddo ! DO ij=ijb+iip1-1,ije,iip1
    535          enddo !DO l=1,llm
    536         enddo !do ifils=1,nqdesc(iq)
    537       endif !if (nqfils(iq).gt.0) then
     526            q(ij-iim,l,iq2)=q(ij,l,iq2)
     527          enddo
     528        enddo
     529      enddo
    538530
    539531c     CALL SCOPY((jjm-1)*llm,q(iip1+iip1,1),iip1,q(iip2,1),iip1)
     
    544536      END
    545537      SUBROUTINE vlyqs(q,pente_max,masse,masse_adv_v,qsat,iq)
    546       USE infotrac, ONLY : nqtot,nqfils,nqdesc,iqfils ! CRisi
     538      USE infotrac, ONLY : nqtot,tracers ! CRisi
    547539c
    548540c     Auteurs:   P.Le Van, F.Hourdin, F.Forget
     
    794786! CRisi: appel récursif de l'advection sur les fils.
    795787! Il faut faire ça avant d'avoir mis à jour q et masse
    796       !write(*,*) 'vlyqs 689: iq,nqfils(iq)=',iq,nqfils(iq)
     788      !write(*,*) 'vlyqs 689: iq,nqDesc(iq)=',iq,tracers(iq)%nqDescen
    797789   
    798       if (nqfils(iq).gt.0) then 
    799        do ifils=1,nqdesc(iq)
    800          iq2=iqfils(ifils,iq)
    801          DO l=1,llm
    802          DO ij=1,ip1jmp1
    803            masseq(ij,l,iq2)=masse(ij,l,iq)*q(ij,l,iq)
    804            Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)     
     790      do ifils=1,tracers(iq)%nqDescen
     791        iq2=tracers(iq)%iqDescen(ifils)
     792        DO l=1,llm
     793          DO ij=1,ip1jmp1
     794            masseq(ij,l,iq2)=masse(ij,l,iq)*q(ij,l,iq)
     795            Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)     
    805796          enddo   
    806          enddo
    807         enddo !do ifils=1,nqdesc(iq)
    808 
    809         do ifils=1,nqfils(iq)
    810          iq2=iqfils(ifils,iq)
    811          !write(*,*) 'vlyqs 783: appel rec de vly, iq2=',iq2
    812          call vly(Ratio,pente_max,masseq,qbyv,iq2)
    813         enddo !do ifils=1,nqfils(iq)
    814       endif !if (nqfils(iq).gt.0) then
     797        enddo
     798      enddo
     799      do ifils=1,tracers(iq)%nqChilds
     800        iq2=tracers(iq)%iqDescen(ifils)
     801        !write(*,*) 'vlyqs 783: appel rec de vly, iq2=',iq2
     802        call vly(Ratio,pente_max,masseq,qbyv,iq2)
     803      enddo
    815804
    816805      DO l=1,llm
     
    868857
    869858! retablir les fils en rapport de melange par rapport a l'air:
    870       if (nqdesc(iq).gt.0) then 
    871        do ifils=1,nqdesc(iq)
    872          iq2=iqfils(ifils,iq) 
    873          DO l=1,llm
     859      do ifils=1,tracers(iq)%nqDescen
     860        iq2=tracers(iq)%iqDescen(ifils)
     861        DO l=1,llm
    874862          DO ij=1,ip1jmp1
    875863            q(ij,l,iq2)=q(ij,l,iq)*Ratio(ij,l,iq2)           
    876864          enddo
    877          enddo
    878         enddo !do ifils=1,nqdesc(iq)
    879       endif !if (nqfils(iq).gt.0) then
     865        enddo
     866      enddo
    880867      !write(*,*) 'vly 879'
    881868
Note: See TracChangeset for help on using the changeset viewer.