Changeset 4050 for LMDZ6/trunk/libf/phylmdiso/cv3_routines.F90
- Timestamp:
- Dec 23, 2021, 6:54:17 PM (3 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/libf/phylmdiso/cv3_routines.F90
r4033 r4050 403 403 enddo !do i=1,len 404 404 #endif 405 ! initialiser quelques variables oubli ées405 ! initialiser quelques variables oubliees 406 406 do i=1,len 407 407 plcllo(i)=0.0 … … 900 900 zfice(i) = MIN(MAX(zfice(i),0.0),1.0) 901 901 enddo 902 ! calcul de la composition du condensat glac éet liquide902 ! calcul de la composition du condensat glace et liquide 903 903 904 904 do i=1,len … … 959 959 960 960 #ifdef ISOVERIF 961 write(*,*) 'cv3_routine undilute 1 598: apr ès condiso'961 write(*,*) 'cv3_routine undilute 1 598: apres condiso' 962 962 963 963 if (iso_eau.gt.0) then … … 1435 1435 1436 1436 !JAM-------------------------------------------------------------------- 1437 ! Calcul de la quantit éd'eau sous forme de glace1437 ! Calcul de la quantite d'eau sous forme de glace 1438 1438 ! -------------------------------------------------------------------- 1439 1439 INTEGER nl, len … … 2856 2856 real xtrti(ntraciso,nloc) 2857 2857 real xtres(ntraciso) 2858 ! on ajoute la dimension nloc à xtrti pour vérifs dans les tags: 5 fev2858 ! on ajoute la dimension nloc a xtrti pour verifs dans les tags: 5 fev 2859 2859 ! 2010 2860 2860 real zfice(nloc),zxtliq(ntraciso,nloc),zxtice(ntraciso,nloc) … … 2873 2873 #ifdef ISO 2874 2874 #ifdef ISOVERIF 2875 ! write(*,*) 'cv3_routines 1820: entr ée dans cv3_mixing'2875 ! write(*,*) 'cv3_routines 1820: entree dans cv3_mixing' 2876 2876 do i=minorig+1,nl 2877 2877 do il=1,ncum … … 3083 3083 ! : 'tcond(il),rs(il,j)=', 3084 3084 ! : il,i,j,xtent(:,il,i,j),tcond(il),rs(il,j) 3085 ! colorier la vapeur r ésiduelle selon température de3086 ! condensation, et le condensat en un tag sp écifique3085 ! colorier la vapeur residuelle selon temperature de 3086 ! condensation, et le condensat en un tag specifique 3087 3087 if ((elij(il,i,j).gt.0.0).and.(qent(il,i,j).gt.0.0)) then 3088 3088 if (option_traceurs.eq.17) then … … 3194 3194 #ifdef ISOTRAC 3195 3195 if (option_tmin.ge.1) then 3196 ! colorier la vapeur r ésiduelle selon température de3197 ! condensation, et le condensat en un tag sp écifique3196 ! colorier la vapeur residuelle selon temperature de 3197 ! condensation, et le condensat en un tag specifique 3198 3198 ! write(*,*) 'cv3 tmp 2095 il,i,j,xtent(:,il,i,j)=', 3199 3199 ! : il,i,j,xtent(:,il,i,j) … … 3431 3431 #ifdef ISOTRAC 3432 3432 if (option_tmin.ge.1) then 3433 ! colorier la vapeur r ésiduelle selon température de3434 ! condensation, et le condensat en un tag sp écifique3433 ! colorier la vapeur residuelle selon temperature de 3434 ! condensation, et le condensat en un tag specifique 3435 3435 ! write(*,*) 'cv3 tmp 2314 il,i,j,xtent(:,il,i,j)=', 3436 3436 ! : il,i,j,xtent(:,il,i,j) … … 3543 3543 #ifdef ISO 3544 3544 #ifdef ISOTRAC 3545 ! seulement àla fin on taggue le condensat3545 ! seulement a la fin on taggue le condensat 3546 3546 if (option_cond.ge.1) then 3547 3547 do im = 1, nd 3548 3548 do jm = 1, nd 3549 3549 do il = 1, ncum 3550 ! colorier le condensat en un tag sp écifique3550 ! colorier le condensat en un tag specifique 3551 3551 do ixt=niso+1,ntraciso 3552 3552 if (index_zone(ixt).eq.izone_cond) then … … 3567 3567 do im = 1, nd 3568 3568 do il = 1, ncum 3569 ! colorier le condensat en un tag sp écifique3569 ! colorier le condensat en un tag specifique 3570 3570 do ixt=niso+1,ntraciso 3571 3571 if (index_zone(ixt).eq.izone_cond) then … … 3991 3991 call iso_verif_traceur(xtwdtrain(1,il),'cv3_routine 2540') 3992 3992 if (option_cond.ge.1) then 3993 ! on v érifie que tout le détrainement est taggécondensat3993 ! on verifie que tout le detrainement est tagge condensat 3994 3994 if (iso_verif_positif_nostop( & 3995 3995 & xtwdtrain(index_trac(izone_cond,iso_eau),il) & … … 4156 4156 !!---end jyg--- 4157 4157 4158 ! --------retour àla formulation originale d'Emanuel.4158 ! --------retour a la formulation originale d'Emanuel. 4159 4159 IF (cvflag_ice) THEN 4160 4160 … … 4170 4170 4171 4171 !JAM Attention: evap=sigt*E 4172 ! Modification: evap devient l' évaporation en milieu de couche4173 ! car n écessaire dans cv3_yield4174 ! 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... 4175 4175 ! et l'expression de afac qui devient afac1 4176 4176 ! revap=sqrt((prec(i+1)+prec(i))/2) … … 4191 4191 !JYG Dans sa formulation originale, Emanuel calcule l'evaporation par: 4192 4192 ! 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. 4194 4194 ! Ici,l'evaporation evap est simplement calculee par l'equation de 4195 4195 ! conservation. … … 4525 4525 #ifdef ISO 4526 4526 #ifdef ISOVERIF 4527 ! verif des inputs àappel stewart4527 ! verif des inputs a appel stewart 4528 4528 do il=1,ncum 4529 4529 if (i.le.inb(il) .and. lwork(il)) then … … 4543 4543 enddo 4544 4544 #endif 4545 ! appel de appel_stewart_vectoris é4545 ! appel de appel_stewart_vectorise 4546 4546 call appel_stewart_vectall_np(lwork,ncum, & 4547 4547 & ph,t,evap,xtwdtrain, & … … 4611 4611 #endif 4612 4612 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)) 4614 4614 do il=1,ncum 4615 4615 if (i.lt.inb(il) .and. lwork(il)) then … … 4651 4651 #endif 4652 4652 rpprec(il,i)=rs(il,i) 4653 ! sous cas rajout éle 11dec 2011. Normalement, pas utile4653 ! sous cas rajoute le 11dec 2011. Normalement, pas utile 4654 4654 else if (rp(il,i).eq.0.0) then 4655 4655 do ixt=1,ntraciso … … 4864 4864 real xtbx(ntraciso), xtawat(ntraciso,nloc) 4865 4865 ! cam debug 4866 ! pour l'homog énéisation sous le nuage:4866 ! pour l'homogeneisation sous le nuage: 4867 4867 real bxtsum(ntraciso,nloc), fxtsum(ntraciso,nloc) 4868 4868 #ifdef DIAGISO 4869 ! diagnostiques juste: tendance des diff érents processus4869 ! diagnostiques juste: tendance des differents processus 4870 4870 real fxt_detrainement(niso,nloc,nd) 4871 4871 real fxt_fluxmasse(niso,nloc,nd) … … 4917 4917 #ifdef ISO 4918 4918 ! cam debug 4919 ! write(*,*) 'cv3_routines 3082: entr ée dans cv3_yield'4919 ! write(*,*) 'cv3_routines 3082: entree dans cv3_yield' 4920 4920 ! en cam debug 4921 4921 do ixt = 1, ntraciso … … 4994 4994 END DO 4995 4995 #ifdef ISO 4996 ! on initialise mieux fr et fxt par securit é4996 ! on initialise mieux fr et fxt par securite 4997 4997 fr(:,:)=0.0 4998 4998 fxt(:,:,:)=0.0 … … 5845 5845 else ! taggage des ddfts: 5846 5846 ! 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 écules5848 ! 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. 5849 5849 ! Il faut donc prendre en compte ce taux de conversion quand 5850 5850 ! entrainement d'env vers ddft … … 5855 5855 ! : -conversion(iiso) 5856 5856 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 ( on5859 ! 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). 5860 5860 5861 5861 ! Solution alternative: Dans le cas entrainant, Ye ne varie que par 5862 5862 ! 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'évap5863 ! calcule donc ce terme directement avec schema amont: 5864 5865 ! ajout deja de l'evap 5866 5866 do ixt = 1+niso,ntraciso 5867 5867 fxt(ixt,il,i)=fxt(ixt,il,i) & … … 5941 5941 #endif 5942 5942 else !if (abs(dXe).gt.ridicule) then 5943 ! dans ce cas, fxtXe doit être faible5943 ! dans ce cas, fxtXe doit etre faible 5944 5944 5945 5945 #ifdef ISOVERIF … … 5957 5957 fxt(ixt,il,i)=fxt(ixt,il,i)+fxtXe(iiso) 5958 5958 else !if (izone.eq.izone_poubelle) then 5959 ! pas de tendance pour ce tag l à5959 ! pas de tendance pour ce tag la 5960 5960 endif !if (izone.eq.izone_poubelle) then 5961 5961 endif !if ((izone.ne.izone_revap).and. … … 5971 5971 5972 5972 else !if (mp(il,i).gt.mp(il,i+1)) then 5973 ! cas d étrainant: pas de problèmes5973 ! cas detrainant: pas de problemes 5974 5974 do ixt=1+niso,ntraciso 5975 5975 fxt(ixt,il,i)=fxt(ixt,il,i) & … … 6176 6176 ! on change le traitement de cette ligne le 8 mai 2009: 6177 6177 ! 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 était6178 ! c'est a dire que Rawat=Relij+(1-ep)*clw/awat*(Relij-Rclw) 6179 ! si Relij!=Rclw, alors un fractionnement isotopique non physique etait 6180 6180 ! introduit. 6181 ! En fait, awat repr ésente le surplus de condensat dans le mélange par6182 ! rapport àcelui restant dans la colonne adiabatique6183 ! 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. 6185 6185 if (elij(il,k,i).gt.0.0) then 6186 6186 do ixt = 1, ntraciso 6187 6187 xtawat(ixt,il)=awat(il)*(xtelij(ixt,il,k,i)/elij(il,k,i)) 6188 ! xtawat(ixt)=amax1(xtawat(ixt),0.0) ! pas n écessaire6188 ! xtawat(ixt)=amax1(xtawat(ixt),0.0) ! pas necessaire 6189 6189 enddo !do ixt = 1, ntraciso 6190 6190 else !if (elij(il,k,i).gt.0.0) then 6191 6191 ! normalement, si elij(il,k,i)<=0, alors awat=0 6192 ! on le v érifie. Si c'est vrai -> xtawat=0 aussi6192 ! on le verifie. Si c'est vrai -> xtawat=0 aussi 6193 6193 #ifdef ISOVERIF 6194 6194 call iso_verif_egalite(awat(il),0.0,'cv3_yield 3779') … … 6850 6850 fq_detrainement(il, i) = fq_detrainement(il, i)/alpha_qpos(il) 6851 6851 do ixt=1,ntraciso 6852 f q_ddft(ixt,il, i) = fq_ddft(ixt,il, i)/alpha_qpos(il)6853 f q_evapprecip(ixt,il, i) = fq_evapprecip(ixt,il, i)/alpha_qpos(il)6854 f q_fluxmasse(ixt,il, i) = fq_fluxmasse(ixt,il, i)/alpha_qpos(il)6855 f q_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) 6856 6856 enddo ! do ixt=1,ntraciso 6857 6857 #endif … … 7179 7179 ENDDO ! k 7180 7180 7181 ! 14/01/15 AJ delta n'a rien à faire là...7181 ! 14/01/15 AJ delta n'a rien a faire la... 7182 7182 DO il = 1, ncum ! cld 7183 7183 !! IF (wa(il,i)>0.0 .AND. iflag(il)<=1) & ! cld … … 7195 7195 7196 7196 ! IM cf. FH 7197 ! 14/01/15 AJ ne correspond pas à ce qui a été codépar JYG et SB7197 ! 14/01/15 AJ ne correspond pas a ce qui a ete code par JYG et SB 7198 7198 7199 7199 IF (iflag_clw==0) THEN ! cld … … 7290 7290 7291 7291 ! 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.dzdz7292 ! et eau condensee precipitee dans masse d'air sature : l_m*dM_m/dzdz.dzdz 7293 7293 DO j = 1, nl 7294 7294 DO k = 1, nl … … 7576 7576 7577 7577 ! On fait varier epmax en fn de la cape 7578 ! Il faut donc recalculer ep, et hp qui a d éjà été calculéet7579 ! qui en d épend7580 ! 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. 7581 7581 7582 7582 include "cvthermo.h" … … 7613 7613 7614 7614 ! 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 sont7615 ! connait pas ep, on ne connait pas les melanges, ddfts etc... qui sont 7616 7616 ! necessaires au calcul de la cape dans la nouvelle physique 7617 7617
Note: See TracChangeset
for help on using the changeset viewer.