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/phylmdiso/cv3_routines.F90

    r4033 r4050  
    403403        enddo !do i=1,len
    404404#endif         
    405 ! initialiser quelques variables oubliées
     405! initialiser quelques variables oubliees
    406406       do i=1,len
    407407          plcllo(i)=0.0
     
    900900          zfice(i) = MIN(MAX(zfice(i),0.0),1.0)         
    901901       enddo
    902        ! calcul de la composition du condensat glacé et liquide
     902       ! calcul de la composition du condensat glace et liquide
    903903
    904904       do i=1,len
     
    959959
    960960#ifdef ISOVERIF
    961             write(*,*) 'cv3_routine undilute 1 598: après condiso'
     961            write(*,*) 'cv3_routine undilute 1 598: apres condiso'
    962962         
    963963          if (iso_eau.gt.0) then
     
    14351435
    14361436!JAM--------------------------------------------------------------------
    1437 ! Calcul de la quantité d'eau sous forme de glace
     1437! Calcul de la quantite d'eau sous forme de glace
    14381438! --------------------------------------------------------------------
    14391439  INTEGER nl, len
     
    28562856      real xtrti(ntraciso,nloc)
    28572857      real xtres(ntraciso)
    2858       ! on ajoute la dimension nloc à xtrti pour vérifs dans les tags: 5 fev
     2858      ! on ajoute la dimension nloc a xtrti pour verifs dans les tags: 5 fev
    28592859      ! 2010
    28602860      real zfice(nloc),zxtliq(ntraciso,nloc),zxtice(ntraciso,nloc)
     
    28732873#ifdef ISO
    28742874#ifdef ISOVERIF
    2875 !       write(*,*) 'cv3_routines 1820: entrée dans cv3_mixing'
     2875!       write(*,*) 'cv3_routines 1820: entree dans cv3_mixing'
    28762876       do i=minorig+1,nl
    28772877        do il=1,ncum
     
    30833083!     :           'tcond(il),rs(il,j)=',
    30843084!     :            il,i,j,xtent(:,il,i,j),tcond(il),rs(il,j)
    3085         ! colorier la vapeur résiduelle selon température de
    3086         ! condensation, et le condensat en un tag spécifique
     3085        ! colorier la vapeur residuelle selon temperature de
     3086        ! condensation, et le condensat en un tag specifique
    30873087          if ((elij(il,i,j).gt.0.0).and.(qent(il,i,j).gt.0.0)) then 
    30883088            if (option_traceurs.eq.17) then       
     
    31943194#ifdef ISOTRAC         
    31953195        if (option_tmin.ge.1) then
    3196         ! colorier la vapeur résiduelle selon température de
    3197         ! condensation, et le condensat en un tag spécifique
     3196        ! colorier la vapeur residuelle selon temperature de
     3197        ! condensation, et le condensat en un tag specifique
    31983198!        write(*,*) 'cv3 tmp 2095 il,i,j,xtent(:,il,i,j)=',
    31993199!     :            il,i,j,xtent(:,il,i,j)
     
    34313431#ifdef ISOTRAC         
    34323432        if (option_tmin.ge.1) then
    3433         ! colorier la vapeur résiduelle selon température de
    3434         ! condensation, et le condensat en un tag spécifique
     3433        ! colorier la vapeur residuelle selon temperature de
     3434        ! condensation, et le condensat en un tag specifique
    34353435!        write(*,*) 'cv3 tmp 2314 il,i,j,xtent(:,il,i,j)=',
    34363436!     :            il,i,j,xtent(:,il,i,j)
     
    35433543#ifdef ISO
    35443544#ifdef ISOTRAC
    3545         ! seulement à la fin on taggue le condensat
     3545        ! seulement a la fin on taggue le condensat
    35463546        if (option_cond.ge.1) then
    35473547         do im = 1, nd
    35483548         do jm = 1, nd
    35493549         do il = 1, ncum   
    3550            ! colorier le condensat en un tag spécifique
     3550           ! colorier le condensat en un tag specifique
    35513551           do ixt=niso+1,ntraciso
    35523552             if (index_zone(ixt).eq.izone_cond) then
     
    35673567         do im = 1, nd
    35683568         do il = 1, ncum   
    3569            ! colorier le condensat en un tag spécifique
     3569           ! colorier le condensat en un tag specifique
    35703570           do ixt=niso+1,ntraciso
    35713571             if (index_zone(ixt).eq.izone_cond) then
     
    39913991        call iso_verif_traceur(xtwdtrain(1,il),'cv3_routine 2540')
    39923992        if (option_cond.ge.1) then
    3993           ! on vérifie que tout le détrainement est taggé condensat
     3993          ! on verifie que tout le detrainement est tagge condensat
    39943994          if (iso_verif_positif_nostop( &
    39953995     &          xtwdtrain(index_trac(izone_cond,iso_eau),il) &
     
    41564156!!---end jyg---
    41574157
    4158 ! --------retour à la formulation originale d'Emanuel.
     4158! --------retour a la formulation originale d'Emanuel.
    41594159        IF (cvflag_ice) THEN
    41604160
     
    41704170
    41714171!JAM  Attention: evap=sigt*E
    4172 !    Modification: evap devient l'évaporation en milieu de couche
    4173 !    car nécessaire dans cv3_yield
    4174 !    Du coup, il faut modifier pas mal d'équations...
     4172!    Modification: evap devient l'evaporation en milieu de couche
     4173!    car necessaire dans cv3_yield
     4174!    Du coup, il faut modifier pas mal d'equations...
    41754175!    et l'expression de afac qui devient afac1
    41764176!    revap=sqrt((prec(i+1)+prec(i))/2)
     
    41914191!JYG    Dans sa formulation originale, Emanuel calcule l'evaporation par:
    41924192! c             evap(il,i)=sigt*afac*revap
    4193 ! ce qui n'est pas correct. Dans cv_routines, la formulation a été modifiee.
     4193! ce qui n'est pas correct. Dans cv_routines, la formulation a ete modifiee.
    41944194! Ici,l'evaporation evap est simplement calculee par l'equation de
    41954195! conservation.
     
    45254525#ifdef ISO
    45264526#ifdef ISOVERIF
    4527 ! verif des inputs à appel stewart
     4527! verif des inputs a appel stewart
    45284528      do il=1,ncum
    45294529       if (i.le.inb(il) .and. lwork(il)) then
     
    45434543       enddo
    45444544#endif
    4545         ! appel de appel_stewart_vectorisé
     4545        ! appel de appel_stewart_vectorise
    45464546        call appel_stewart_vectall_np(lwork,ncum, &
    45474547     &                   ph,t,evap,xtwdtrain, &
     
    46114611#endif
    46124612       
    4613 ! équivalent isotopique de rp(il,i)=amin1(rp(il,i),rs(il,i))
     4613! equivalent isotopique de rp(il,i)=amin1(rp(il,i),rs(il,i))
    46144614       do il=1,ncum
    46154615        if (i.lt.inb(il) .and. lwork(il)) then
     
    46514651#endif
    46524652          rpprec(il,i)=rs(il,i)     
    4653          ! sous cas rajouté le 11dec 2011. Normalement, pas utile
     4653         ! sous cas rajoute le 11dec 2011. Normalement, pas utile
    46544654         else if (rp(il,i).eq.0.0) then                 
    46554655            do ixt=1,ntraciso
     
    48644864      real xtbx(ntraciso), xtawat(ntraciso,nloc)
    48654865      ! cam debug
    4866       ! pour l'homogénéisation sous le nuage:
     4866      ! pour l'homogeneisation sous le nuage:
    48674867      real bxtsum(ntraciso,nloc), fxtsum(ntraciso,nloc)
    48684868#ifdef DIAGISO
    4869         ! diagnostiques juste: tendance des différents processus
     4869        ! diagnostiques juste: tendance des differents processus
    48704870      real fxt_detrainement(niso,nloc,nd)
    48714871      real fxt_fluxmasse(niso,nloc,nd)
     
    49174917#ifdef ISO
    49184918       ! cam debug
    4919 !       write(*,*) 'cv3_routines 3082: entrée dans cv3_yield'
     4919!       write(*,*) 'cv3_routines 3082: entree dans cv3_yield'
    49204920       ! en cam debug
    49214921       do ixt = 1, ntraciso
     
    49944994  END DO
    49954995#ifdef ISO
    4996 ! on initialise mieux fr et fxt par securité
     4996! on initialise mieux fr et fxt par securite
    49974997  fr(:,:)=0.0
    49984998  fxt(:,:,:)=0.0
     
    58455845        else ! taggage des ddfts:
    58465846        ! la formule pour fq_ddft suppose que le ddft est en RP. Ce n'est pas le
    5847         ! cas pour le water tagging puisqu'il y a conversion des molécules
    5848         ! blances entrainées en molécule rouges.
     5847        ! cas pour le water tagging puisqu'il y a conversion des molecules
     5848        ! blances entrainees en molecule rouges.
    58495849        ! Il faut donc prendre en compte ce taux de conversion quand
    58505850        ! entrainement d'env vers ddft
     
    58555855!     :           -conversion(iiso)   
    58565856
    5857         ! Pb: quand on discretise, dqp/dt n'est pas vérifée numériquement.
    5858         ! on se retrouve donc avec des d Ye/dt différents de 0 même si ye=0 ( on
    5859         ! note X les molécules poubelles et Y les molécules ddfts).
     5857        ! Pb: quand on discretise, dqp/dt n'est pas verifee numeriquement.
     5858        ! on se retrouve donc avec des d Ye/dt differents de 0 meme si ye=0 ( on
     5859        ! note X les molecules poubelles et Y les molecules ddfts).
    58605860
    58615861        ! Solution alternative: Dans le cas entrainant, Ye ne varie que par
    58625862        ! ascendance compensatoire des ddfts et par perte de Ye vers le ddft. On
    5863         ! calcule donc ce terme directement avec schéma amont:
    5864 
    5865         ! ajout déjà de l'évap
     5863        ! calcule donc ce terme directement avec schema amont:
     5864
     5865        ! ajout deja de l'evap
    58665866        do ixt = 1+niso,ntraciso
    58675867             fxt(ixt,il,i)=fxt(ixt,il,i) &
     
    59415941#endif
    59425942                else !if (abs(dXe).gt.ridicule) then
    5943                     ! dans ce cas, fxtXe doit être faible
     5943                    ! dans ce cas, fxtXe doit etre faible
    59445944                   
    59455945#ifdef ISOVERIF
     
    59575957                      fxt(ixt,il,i)=fxt(ixt,il,i)+fxtXe(iiso)
    59585958                    else !if (izone.eq.izone_poubelle) then
    5959                         ! pas de tendance pour ce tag là
     5959                        ! pas de tendance pour ce tag la
    59605960                    endif !if (izone.eq.izone_poubelle) then
    59615961                   endif !if ((izone.ne.izone_revap).and.
     
    59715971               
    59725972            else !if (mp(il,i).gt.mp(il,i+1)) then
    5973                 ! cas détrainant: pas de problèmes
     5973                ! cas detrainant: pas de problemes
    59745974                do ixt=1+niso,ntraciso
    59755975                fxt(ixt,il,i)=fxt(ixt,il,i) &
     
    61766176        ! on change le traitement de cette ligne le 8 mai 2009:
    61776177        ! avant, on avait: xtawat=xtelij(il,k,i)-(1.-xtep(il,i))*xtclw(il,i)
    6178         ! c'est à dire que Rawat=Relij+(1-ep)*clw/awat*(Relij-Rclw)
    6179         ! si Relij!=Rclw, alors un fractionnement isotopique non physique était
     6178        ! c'est a dire que Rawat=Relij+(1-ep)*clw/awat*(Relij-Rclw)
     6179        ! si Relij!=Rclw, alors un fractionnement isotopique non physique etait
    61806180        ! introduit.
    6181         ! En fait, awat représente le surplus de condensat dans le mélange par
    6182         ! rapport à celui restant dans la colonne adiabatique
    6183         ! ce surplus à la même compo que le elij, sans fractionnement.
    6184         ! d'où le nouveau traitement ci-dessous.
     6181        ! En fait, awat represente le surplus de condensat dans le melange par
     6182        ! rapport a celui restant dans la colonne adiabatique
     6183        ! ce surplus a la meme compo que le elij, sans fractionnement.
     6184        ! d'ou le nouveau traitement ci-dessous.
    61856185      if (elij(il,k,i).gt.0.0) then
    61866186        do ixt = 1, ntraciso
    61876187          xtawat(ixt,il)=awat(il)*(xtelij(ixt,il,k,i)/elij(il,k,i))
    6188 !          xtawat(ixt)=amax1(xtawat(ixt),0.0) ! pas nécessaire
     6188!          xtawat(ixt)=amax1(xtawat(ixt),0.0) ! pas necessaire
    61896189        enddo !do ixt = 1, ntraciso
    61906190      else !if (elij(il,k,i).gt.0.0) then
    61916191          ! normalement, si elij(il,k,i)<=0, alors awat=0
    6192           ! on le vérifie. Si c'est vrai -> xtawat=0 aussi
     6192          ! on le verifie. Si c'est vrai -> xtawat=0 aussi
    61936193#ifdef ISOVERIF
    61946194        call iso_verif_egalite(awat(il),0.0,'cv3_yield 3779')
     
    68506850        fq_detrainement(il, i) = fq_detrainement(il, i)/alpha_qpos(il)
    68516851        do ixt=1,ntraciso
    6852           fq_ddft(ixt,il, i) = fq_ddft(ixt,il, i)/alpha_qpos(il)
    6853           fq_evapprecip(ixt,il, i) = fq_evapprecip(ixt,il, i)/alpha_qpos(il)
    6854           fq_fluxmasse(ixt,il, i) = fq_fluxmasse(ixt,il, i)/alpha_qpos(il)
    6855           fq_detrainement(ixt,il, i) = fq_detrainement(ixt,il, i)/alpha_qpos(il)
     6852          fxt_ddft(ixt,il, i) = fxt_ddft(ixt,il, i)/alpha_qpos(il)
     6853          fxt_evapprecip(ixt,il, i) = fxt_evapprecip(ixt,il, i)/alpha_qpos(il)
     6854          fxt_fluxmasse(ixt,il, i) = fxt_fluxmasse(ixt,il, i)/alpha_qpos(il)
     6855          fxt_detrainement(ixt,il, i) = fxt_detrainement(ixt,il, i)/alpha_qpos(il)
    68566856        enddo ! do ixt=1,ntraciso
    68576857#endif       
     
    71797179    ENDDO       ! k
    71807180
    7181 ! 14/01/15 AJ delta n'a rien à faire là...                                                 
     7181! 14/01/15 AJ delta n'a rien a faire la...                                                 
    71827182    DO il = 1, ncum                                                  ! cld
    71837183!!      IF (wa(il,i)>0.0 .AND. iflag(il)<=1) &                         ! cld
     
    71957195
    71967196! IM cf. FH
    7197 ! 14/01/15 AJ ne correspond pas à ce qui a été codé par JYG et SB           
     7197! 14/01/15 AJ ne correspond pas a ce qui a ete code par JYG et SB           
    71987198                                                         
    71997199      IF (iflag_clw==0) THEN                                         ! cld
     
    72907290
    72917291! fraction deau condensee dans les melanges convertie en precip : epm
    7292 ! et eau condensée précipitée dans masse d'air saturé : l_m*dM_m/dzdz.dzdz
     7292! et eau condensee precipitee dans masse d'air sature : l_m*dM_m/dzdz.dzdz
    72937293  DO j = 1, nl
    72947294    DO k = 1, nl
     
    75767576
    75777577        ! On fait varier epmax en fn de la cape
    7578         ! Il faut donc recalculer ep, et hp qui a déjà été calculé et
    7579         ! qui en dépend
    7580         ! Toutes les autres variables fn de ep sont calculées plus bas.
     7578        ! Il faut donc recalculer ep, et hp qui a deja ete calcule et
     7579        ! qui en depend
     7580        ! Toutes les autres variables fn de ep sont calculees plus bas.
    75817581
    75827582  include "cvthermo.h"
     
    76137613
    76147614        ! il faut calculer la cape: on fait un calcule simple car tant qu'on ne
    7615         ! connait pas ep, on ne connait pas les mélanges, ddfts etc... qui sont
     7615        ! connait pas ep, on ne connait pas les melanges, ddfts etc... qui sont
    76167616        ! necessaires au calcul de la cape dans la nouvelle physique
    76177617       
Note: See TracChangeset for help on using the changeset viewer.