Changeset 4050 for LMDZ6/trunk/libf/dyn3dmem
- Timestamp:
- Dec 23, 2021, 6:54:17 PM (4 years ago)
- Location:
- LMDZ6/trunk/libf/dyn3dmem
- Files:
-
- 16 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/libf/dyn3dmem/advtrac_loc.F
r4038 r4050 24 24 USE Vampir 25 25 USE times 26 USE infotrac, ONLY: nqtot, iadv, ok_iso_verif26 USE infotrac, ONLY: nqtot, tracers, ok_iso_verif 27 27 USE control_mod, ONLY: iapp_tracvl, day_step, planet_type 28 28 USE advtrac_mod, ONLY: finmasse … … 74 74 DATA fill/.true./ 75 75 DATA dum/.true./ 76 integer ijb,ije,ijbu,ijbv,ijeu,ijev,j 76 integer ijb,ije,ijbu,ijbv,ijeu,ijev,j, iadv 77 77 type(Request),SAVE :: testRequest 78 78 !$OMP THREADPRIVATE(testRequest) … … 152 152 153 153 !write(*,*) 'advtrac 157: appel de vlspltgen_loc' 154 call vlspltgen_loc( q,iadv, 2., massem, wg , 155 * pbarug,pbarvg,dtvr,p, 154 call vlspltgen_loc( q, 2., massem, wg,pbarug,pbarvg,dtvr,p, 156 155 * pk,teta ) 157 156 … … 169 168 do iq=1,nqtot 170 169 c call clock(t_initial) 171 if(iadv(iq) == 0) cycle 170 iadv = tracers(iq)%iadv 171 SELECT CASE(iadv) 172 CASE(0); CYCLE 173 CASE(10) 172 174 c ---------------------------------------------------------------- 173 175 c Schema de Van Leer I MUSCL 174 176 c ---------------------------------------------------------------- 175 if(iadv(iq).eq.10) THEN176 177 177 178 !LF call vlsplt_p(q(1,1,iq),2.,massem,wg,pbarug,pbarvg,dtvr) 178 179 180 CASE(14) 179 181 c ---------------------------------------------------------------- 180 182 c Schema "pseudo amont" + test sur humidite specifique 181 183 C pour la vapeur d'eau. F. Codron 182 184 c ---------------------------------------------------------------- 183 else if(iadv(iq).eq.14) then184 185 c 185 186 cym stop 'advtrac : appel à vlspltqs :schema non parallelise' 186 187 !LF CALL vlspltqs_p( q(1,1,1), 2., massem, wg , 187 188 !LF * pbarug,pbarvg,dtvr,p,pk,teta ) 189 CASE(12) 188 190 c ---------------------------------------------------------------- 189 191 c Schema de Frederic Hourdin 190 192 c ---------------------------------------------------------------- 191 else if(iadv(iq).eq.12) then192 193 stop 'advtrac : schema non parallelise' 193 194 c Pas de temps adaptatif 194 call adaptdt(iadv (iq),dtbon,n,pbarug,massem)195 call adaptdt(iadv,dtbon,n,pbarug,massem) 195 196 if (n.GT.1) then 196 197 write(*,*) 'WARNING horizontal dt=',dtbon,'dtvr=', … … 200 201 call advn(q(1,1,iq),massem,wg,pbarug,pbarvg,dtbon,1) 201 202 end do 202 else if(iadv(iq).eq.13) then203 CASE(13) 203 204 stop 'advtrac : schema non parallelise' 204 205 c Pas de temps adaptatif 205 call adaptdt(iadv (iq),dtbon,n,pbarug,massem)206 call adaptdt(iadv,dtbon,n,pbarug,massem) 206 207 if (n.GT.1) then 207 208 write(*,*) 'WARNING horizontal dt=',dtbon,'dtvr=', … … 211 212 call advn(q(1,1,iq),massem,wg,pbarug,pbarvg,dtbon,2) 212 213 end do 214 CASE(20) 213 215 c ---------------------------------------------------------------- 214 216 c Schema de pente SLOPES 215 217 c ---------------------------------------------------------------- 216 else if (iadv(iq).eq.20) then217 218 stop 'advtrac : schema non parallelise' 218 219 219 220 call pentes_ini (q(1,1,iq),wg,massem,pbarug,pbarvg,0) 220 221 222 CASE(30) 221 223 c ---------------------------------------------------------------- 222 224 c Schema de Prather 223 225 c ---------------------------------------------------------------- 224 else if (iadv(iq).eq.30) then225 226 stop 'advtrac : schema non parallelise' 226 227 c Pas de temps adaptatif 227 call adaptdt(iadv (iq),dtbon,n,pbarug,massem)228 call adaptdt(iadv,dtbon,n,pbarug,massem) 228 229 if (n.GT.1) then 229 230 write(*,*) 'WARNING horizontal dt=',dtbon,'dtvr=', … … 232 233 call prather(q(1,1,iq),wg,massem,pbarug,pbarvg, 233 234 s n,dtbon) 235 CASE(11,16,17,18) 234 236 c ---------------------------------------------------------------- 235 237 c Schemas PPM Lin et Rood 236 238 c ---------------------------------------------------------------- 237 else if (iadv(iq).eq.11.OR.(iadv(iq).GE.16.AND.238 s iadv(iq).LE.18)) then239 239 240 240 stop 'advtrac : schema non parallelise' … … 242 242 c Test sur le flux horizontal 243 243 c Pas de temps adaptatif 244 call adaptdt(iadv (iq),dtbon,n,pbarug,massem)244 call adaptdt(iadv,dtbon,n,pbarug,massem) 245 245 if (n.GT.1) then 246 246 write(*,*) 'WARNING horizontal dt=',dtbon,'dtvr=', … … 273 273 c VL (version PPM) horiz. et PPM vert. 274 274 c--------------------------------------------------------------------- 275 if (iadv(iq).eq.11) then 275 SELECT CASE(iadv) 276 CASE(11) 276 277 c Ss-prg PPM3d de Lin 277 278 call ppm3d(1,qppm(1,1,iq), … … 281 282 s fill,dum,220.) 282 283 284 CASE(16) 283 285 c---------------------------------------------------------------------- 284 286 c Monotonic PPM 285 287 c---------------------------------------------------------------------- 286 else if (iadv(iq).eq.16) then287 288 c Ss-prg PPM3d de Lin 288 289 call ppm3d(1,qppm(1,1,iq), … … 293 294 c--------------------------------------------------------------------- 294 295 296 CASE(17) 295 297 c--------------------------------------------------------------------- 296 298 c Semi Monotonic PPM 297 299 c--------------------------------------------------------------------- 298 else if (iadv(iq).eq.17) then299 300 c Ss-prg PPM3d de Lin 300 301 call ppm3d(1,qppm(1,1,iq), … … 305 306 c--------------------------------------------------------------------- 306 307 308 CASE(18) 307 309 c--------------------------------------------------------------------- 308 310 c Positive Definite PPM 309 311 c--------------------------------------------------------------------- 310 else if (iadv(iq).eq.18) then311 312 c Ss-prg PPM3d de Lin 312 313 call ppm3d(1,qppm(1,1,iq), … … 316 317 s fill,dum,220.) 317 318 c--------------------------------------------------------------------- 318 endif319 END SELECT 319 320 enddo 320 321 c----------------------------------------------------------------- … … 322 323 c----------------------------------------------------------------- 323 324 call interpost(q(1,1,iq),qppm(1,1,iq)) 324 endif325 END SELECT 325 326 c---------------------------------------------------------------------- 326 327 -
LMDZ6/trunk/libf/dyn3dmem/advtrac_mod.F90
r1907 r4050 9 9 USE allocate_field_mod 10 10 USE parallel_lmdz 11 USE infotrac12 11 USE vlspltgen_mod 13 12 IMPLICIT NONE -
LMDZ6/trunk/libf/dyn3dmem/caladvtrac_mod.F90
r3435 r4050 23 23 USE allocate_field_mod 24 24 USE parallel_lmdz 25 USE infotrac 25 USE infotrac, ONLY: nqtot 26 26 USE advtrac_mod, ONLY : advtrac_allocate 27 27 USE groupe_mod -
LMDZ6/trunk/libf/dyn3dmem/call_calfis_mod.F90
r3435 r4050 37 37 USE parallel_lmdz 38 38 USE dimensions_mod 39 USE infotrac 39 USE infotrac, ONLY: nqtot 40 40 IMPLICIT NONE 41 41 TYPE(distrib),POINTER :: d … … 80 80 USE Bands 81 81 USE vampir 82 USE infotrac 82 USE infotrac, ONLY: nqtot 83 83 USE control_mod 84 84 USE write_field_loc -
LMDZ6/trunk/libf/dyn3dmem/check_isotopes_loc.F
r4038 r4050 1 1 subroutine check_isotopes(q,ijb,ije,err_msg) 2 USE infotrac 2 USE infotrac, ONLY: nqtot, nqo, niso, ntraciso, ntraceurs_zone, 3 & ok_isotopes, ok_isotrac, use_iso, 4 & iqiso, indnum_fn_num, index_trac, tnat 3 5 USE parallel_lmdz 4 6 implicit none -
LMDZ6/trunk/libf/dyn3dmem/dynetat0_loc.F90
r4046 r4050 7 7 !------------------------------------------------------------------------------- 8 8 USE parallel_lmdz 9 USE infotrac 9 USE infotrac, ONLY: nqtot, tracers, iqiso, iso_indnum, tnat, alpha_ideal, ok_isotopes, maxlen 10 10 USE netcdf, ONLY: NF90_OPEN, NF90_INQUIRE_DIMENSION, NF90_INQ_VARID, & 11 11 NF90_NOWRITE, NF90_CLOSE, NF90_INQUIRE_VARIABLE, NF90_GET_VAR, NF90_NoErr 12 12 USE control_mod, ONLY: planet_type 13 USE strings_mod, ONLY: maxlen14 13 USE assert_eq_m, ONLY: assert_eq 15 14 USE comvert_mod, ONLY: pa,preff … … 42 41 CHARACTER(LEN=maxlen) :: msg, var, modname 43 42 INTEGER, PARAMETER :: length=100 44 INTEGER :: iq, fID, vID, idecal, ierr 43 INTEGER :: iq, fID, vID, idecal, ierr, iqParent, iName, iZone, iPhase 45 44 REAL :: time, tab_cntrl(length) !--- RUN PARAMS TABLE 46 45 REAL, ALLOCATABLE :: vcov_glo(:,:),masse_glo(:,:), ps_glo(:) … … 174 173 !--- CRisi: for isotops, theoretical initialization using very simplified 175 174 ! Rayleigh distillation las. 176 IF(ok_isotopes.AND.iso_num(iq)>0) THEN 177 IF(zone_num(iq)==0) q(:,:,iq)=q(:,:,iqpere(iq))*tnat(iso_num(iq)) & 178 & *(q(:,:,iqpere(iq))/30.e-3)**(alpha_ideal(iso_num(iq))-1) 179 IF(zone_num(iq)==1) q(:,:,iq)=q(:,:,iqiso(iso_indnum(iq),phase_num(iq))) 175 iName = tracers(iq)%iso_iName 176 iZone = tracers(iq)%iso_iZone 177 iPhase= tracers(iq)%iso_iPhase 178 iqParent = tracers(iq)%iqParent 179 IF(ok_isotopes .AND. iName>0) THEN 180 IF(iZone==0) q(:,:,iq) = q(:,:,iqParent)*tnat(iName) & 181 & *(q(:,:,iqParent)/30.e-3)**(alpha_ideal(iName)-1.) 182 IF(iZone==1) q(:,:,iq) = q(:,:,iqiso(iso_indnum(iq),iPhase)) 180 183 END IF 181 184 END DO -
LMDZ6/trunk/libf/dyn3dmem/dynredem_loc.F90
r4046 r4050 9 9 USE parallel_lmdz 10 10 USE mod_hallo 11 USE infotrac 11 USE infotrac, ONLY: nqtot, tracers, maxlen 12 12 USE netcdf, ONLY: NF90_CREATE, NF90_DEF_DIM, NF90_INQ_VARID, NF90_GLOBAL, & 13 13 NF90_CLOSE, NF90_PUT_ATT, NF90_UNLIMITED, NF90_CLOBBER, & 14 14 NF90_64BIT_OFFSET 15 15 USE dynredem_mod, ONLY: cre_var, put_var, err, modname, fil 16 USE strings_mod, ONLY: maxlen17 16 USE comvert_mod, ONLY: ap,bp,aps,bps,presnivs,pseudoalt,pa,preff, & 18 17 nivsig,nivsigs … … 175 174 USE parallel_lmdz 176 175 USE mod_hallo 177 USE infotrac 176 USE infotrac, ONLY: nqtot, tracers, type_trac, maxlen 178 177 USE control_mod 179 178 USE netcdf, ONLY: NF90_OPEN, NF90_NOWRITE, NF90_GET_VAR, NF90_INQ_VARID, & -
LMDZ6/trunk/libf/dyn3dmem/gcm.F90
r3579 r4050 9 9 USE mod_const_mpi, ONLY: init_const_mpi 10 10 USE parallel_lmdz 11 USE infotrac 11 USE infotrac, ONLY: nqtot, infotrac_init 12 12 !#ifdef CPP_PHYS 13 13 ! USE mod_interface_dyn_phys, ONLY: init_interface_dyn_phys -
LMDZ6/trunk/libf/dyn3dmem/groupe_mod.F90
r1907 r4050 10 10 USE allocate_field_mod 11 11 USE parallel_lmdz 12 USE infotrac12 ! USE infotrac 13 13 USE advtrac_mod, ONLY : advtrac_allocate 14 14 IMPLICIT NONE -
LMDZ6/trunk/libf/dyn3dmem/iniacademic_loc.F90
r3976 r4050 7 7 use exner_hyb_m, only: exner_hyb 8 8 use exner_milieu_m, only: exner_milieu 9 USE infotrac, ONLY: nqtot, niso_possibles,ok_isotopes,iqpere,ok_iso_verif,tnat,alpha_ideal, &10 & iqiso,phase_num,iso_indnum,iso_num,zone_num9 USE infotrac, ONLY: nqtot, niso_possibles, ok_isotopes, ok_iso_verif, tnat, alpha_ideal, & 10 iqiso, tracers, iso_indnum 11 11 USE control_mod, ONLY: day_step,planet_type 12 12 USE parallel_lmdz, ONLY: ijb_u, ije_u, ijb_v, ije_v … … 67 67 real tetastrat ! potential temperature in the stratosphere, in K 68 68 real tetajl(jjp1,llm) 69 INTEGER i,j,l,lsup,ij 69 INTEGER i,j,l,lsup,ij, iq, iName, iZone, iPhase, iqParent 70 70 71 71 REAL teta0,ttp,delt_y,delt_z,eps ! Constantes pour profil de T … … 282 282 ! Earth: first two tracers will be water 283 283 284 do i =1,nqtot285 if (i == 1) q(ijb_u:ije_u,:,i)=1.e-10286 if ( i == 2) q(ijb_u:ije_u,:,i)=1.e-15287 if ( i.gt.2) q(ijb_u:ije_u,:,i)=0.284 do iq=1,nqtot 285 q(ijb_u:ije_u,:,iq)=0. 286 if (tracers(iq)%name == 'H2Ov') q(ijb_u:ije_u,:,iq)=1.e-10 287 if (tracers(iq)%name == 'H2Ol') q(ijb_u:ije_u,:,iq)=1.e-15 288 288 289 289 ! CRisi: init des isotopes 290 290 ! distill de Rayleigh très simplifiée 291 if (ok_isotopes) then 292 if ((iso_num(i).gt.0).and.(zone_num(i).eq.0)) then 293 q(ijb_u:ije_u,:,i)=q(ijb_u:ije_u,:,iqpere(i)) & 294 & *tnat(iso_num(i)) & 295 & *(q(ijb_u:ije_u,:,iqpere(i))/30.e-3) & 296 & **(alpha_ideal(iso_num(i))-1) 297 endif 298 if ((iso_num(i).gt.0).and.(zone_num(i).eq.1)) then 299 q(ijb_u:ije_u,:,i)=q(ijb_u:ije_u,:,iqiso(iso_indnum(i),phase_num(i))) 300 endif 291 iName = tracers(iq)%iso_iName 292 iZone = tracers(iq)%iso_iZone 293 iPhase= tracers(iq)%iso_iPhase 294 iqParent = tracers(iq)%iqParent 295 if (ok_isotopes .AND. iName > 0) then 296 if (iZone == 0) q(ijb_u:ije_u,:,iq) = q(ijb_u:ije_u,:,iqParent)*tnat(iName) & 297 *(q(ijb_u:ije_u,:,iqParent)/30.e-3)**(alpha_ideal(iName)-1) 298 if (iZone == 1) q(ijb_u:ije_u,:,iq) = q(ijb_u:ije_u,:,iqiso(iso_indnum(iq),iPhase)) 301 299 endif !if (ok_isotopes) then 302 300 -
LMDZ6/trunk/libf/dyn3dmem/initdynav_loc.F
r4046 r4050 11 11 use Write_field 12 12 use misc_mod 13 USE infotrac13 ! USE infotrac 14 14 use com_io_dyn_mod, only : histaveid,histvaveid,histuaveid, & 15 15 & dynhistave_file,dynhistvave_file,dynhistuave_file -
LMDZ6/trunk/libf/dyn3dmem/inithist_loc.F
r4046 r4050 11 11 use Write_field 12 12 use misc_mod 13 USE infotrac14 13 use com_io_dyn_mod, only : histid,histvid,histuid, & 15 14 & dynhist_file,dynhistv_file,dynhistu_file -
LMDZ6/trunk/libf/dyn3dmem/vlsplt_loc.F
r3800 r4050 14 14 c -------------------------------------------------------------------- 15 15 USE parallel_lmdz 16 USE infotrac, ONLY : nqtot, nqfils,nqdesc,iqfils, ! CRisi &16 USE infotrac, ONLY : nqtot,tracers, ! CRisi & 17 17 & qperemin,masseqmin,ratiomin ! MVals et CRisi 18 18 IMPLICIT NONE … … 330 330 ! Il faut faire ça avant d'avoir mis à jour q et masse 331 331 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 335 333 ! attention: comme Ratio est utilisé comme q dans l'appel 336 334 ! recursif, il doit contenir à lui seul tous les indices de tous 337 335 ! les descendants! 338 iq2=iqfils(ifils,iq)339 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 340 336 iq2=tracers(iq)%iqDescen(ifils) 337 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 338 DO l=1,llm 341 339 DO ij=ijb,ije 342 ! On a besoin de q et masse seulement entre ijb et ije. On ne343 ! les calcule donc que de ijb à ije344 !MVals: veiller a ce qu'on n'ait pas de denominateur nul345 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 2020347 Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)348 else349 Ratio(ij,l,iq2)=ratiomin350 endif340 ! 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 351 349 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 351 c$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 360 357 ! end CRisi 361 358 … … 383 380 ! On calcule q entre ijb+1 et ije -> on fait pareil pour ratio 384 381 ! 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) 389 384 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 390 385 DO l=1,llm 391 386 DO ij=ijb+1,ije 392 387 q(ij,l,iq2)=q(ij,l,iq)*Ratio(ij,l,iq2) 393 388 enddo 394 389 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 393 c$OMP END DO NOWAIT 394 enddo 401 395 402 396 !write(*,*) 'vlsplt 399: iq,ijb_x=',iq,ijb_x … … 422 416 c -------------------------------------------------------------------- 423 417 USE parallel_lmdz 424 USE infotrac, ONLY : nqtot, nqfils,nqdesc,iqfils, ! CRisi &418 USE infotrac, ONLY : nqtot,tracers, ! CRisi & 425 419 & qperemin,masseqmin,ratiomin ! MVals et CRisi 426 420 USE comconst_mod, ONLY: pi … … 732 726 ! CRisi: appel récursif de l'advection sur les fils. 733 727 ! Il faut faire ça avant d'avoir mis à jour q et masse 734 !write(*,*) 'vly 689: iq,nq fils(iq)=',iq,nqfils(iq)728 !write(*,*) 'vly 689: iq,nqDesc(iq)=',iq,tracers(iq)%nqDescen 735 729 736 730 ijb=ij_begin-2*iip1 … … 743 737 if (pole_sud) ijem=ij_end 744 738 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) 749 741 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 750 751 752 742 DO l=1,llm 743 ! modif des bornes: CRisi 16 nov 2020 744 ! d'abord masse avec bornes corrigées 753 745 DO ij=ijbm,ijem 754 755 masse(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),masseqmin)756 enddo !DO ij=ijbm,ijem746 !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 757 749 758 750 ! ensuite Ratio avec anciennes bornes 759 DO ij=ijb,ije760 761 if (q(ij,l,iq).gt.qperemin) then ! modif 13 nov 2020762 Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)763 else764 Ratio(ij,l,iq2)=ratiomin765 endif751 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 766 758 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 760 c$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 776 767 ! end CRisi 777 768 … … 862 853 ! if (pole_sud) ije=ij_end 863 854 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) 867 857 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 868 858 DO l=1,llm 869 859 DO ij=ijb,ije 870 860 q(ij,l,iq2)=q(ij,l,iq)*Ratio(ij,l,iq2) 871 861 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 863 c$OMP END DO NOWAIT 864 enddo 876 865 877 866 … … 895 884 USE parallel_lmdz 896 885 USE vlz_mod 897 USE infotrac, ONLY : nqtot, nqfils,nqdesc,iqfils, ! CRisi &886 USE infotrac, ONLY : nqtot,tracers, ! CRisi & 898 887 & qperemin,masseqmin,ratiomin ! MVals et CRisi 899 888 … … 1159 1148 ! CRisi: appel récursif de l'advection sur les fils. 1160 1149 ! 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) 1153 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 1154 DO l=1,llm 1168 1155 DO ij=ijb,ije 1169 1156 !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) then1172 Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)1173 else1174 Ratio(ij,l,iq2)=ratiomin1175 endif1176 !wq(ij,l,iq2)=wq(ij,l,iq) ! correction bug le 15mai20151177 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) 1178 1165 enddo 1179 1180 c$OMP END DO NOWAIT 1181 enddo !do ifils=1,nqdesc(iq)1166 enddo 1167 c$OMP END DO NOWAIT 1168 enddo 1182 1169 c$OMP BARRIER 1183 1170 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 1189 1175 ! end CRisi 1190 1176 … … 1207 1193 1208 1194 ! 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) 1212 1197 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 1213 1198 DO l=1,llm 1214 1199 DO ij=ijb,ije 1215 1200 q(ij,l,iq2)=q(ij,l,iq)*Ratio(ij,l,iq2) 1216 1201 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 1203 c$OMP END DO NOWAIT 1204 enddo 1221 1205 1222 1206 RETURN -
LMDZ6/trunk/libf/dyn3dmem/vlspltgen_loc.F
r2603 r4050 2 2 ! $Header$ 3 3 ! 4 SUBROUTINE vlspltgen_loc( q, iadv,pente_max,masse,w,pbaru,pbarv,4 SUBROUTINE vlspltgen_loc( q,pente_max,masse,w,pbaru,pbarv, 5 5 & pdt, p,pk,teta ) 6 6 … … 28 28 USE VAMPIR 29 29 ! CRisi: on rajoute variables utiles d'infotrac 30 USE infotrac, ONLY : nqtot,nqperes,nqdesc,nqfils,iqfils, 31 & ok_iso_verif 30 USE infotrac, ONLY : nqtot,nqperes, tracers,ok_iso_verif 32 31 USE vlspltgen_mod 33 32 USE comconst_mod, ONLY: cpp … … 41 40 c Arguments: 42 41 c ---------- 43 INTEGER iadv(nqtot)44 42 REAL masse(ijb_u:ije_u,llm),pente_max 45 43 REAL pbaru( ijb_u:ije_u,llm ),pbarv( ijb_v:ije_v,llm) … … 200 198 ! DO iq=1,nqtot 201 199 DO iq=1,nqperes ! CRisi: on ne boucle que sur les pères= ceux qui sont transportés directement par l'air 202 !write(*,*) 'vlspltgen 192: iq,iadv=',iq, iadv(iq)200 !write(*,*) 'vlspltgen 192: iq,iadv=',iq,tracers(iq)%iadv 203 201 #ifdef DEBUG_IO 204 202 CALL WriteField_u('zq',zq(:,:,iq)) 205 203 CALL WriteField_u('zm',zm(:,:,iq)) 206 204 #endif 207 if(iadv(iq) == 0) then 208 209 cycle 210 211 else if (iadv(iq)==10) then 212 205 SELECT CASE(tracers(iq)%iadv) 206 CASE(0); CYCLE 207 CASE(10) 213 208 #ifdef _ADV_HALO 214 209 ! CRisi: on ajoute les nombres de fils et tableaux des fils … … 229 224 call Register_Hallo_u(zm(:,:,iq),llm,1,1,1,1,MyRequest1) 230 225 ! CRisi 231 do ifils=1, nqdesc(iq)232 iq2= iqfils(ifils,iq)226 do ifils=1,tracers(iq)%nqDescen 227 iq2=tracers(iq)%iqDescen(ifils) 233 228 call Register_Hallo_u(zq(:,:,iq2),llm,2,2,2,2,MyRequest1) 234 229 call Register_Hallo_u(zm(:,:,iq2),llm,1,1,1,1,MyRequest1) … … 238 233 call VTe(VTHallo) 239 234 c$OMP END MASTER 240 else if (iadv(iq)==14) then 241 235 CASE(14) 242 236 #ifdef _ADV_HALO 243 237 call vlxqs_loc(zq,pente_max,zm,mu, … … 256 250 call Register_Hallo_u(zq(:,:,iq),llm,2,2,2,2,MyRequest1) 257 251 call Register_Hallo_u(zm(:,:,iq),llm,1,1,1,1,MyRequest1) 258 do ifils=1, nqdesc(iq)259 iq2= iqfils(ifils,iq)252 do ifils=1,tracers(iq)%nqDescen 253 iq2=tracers(iq)%iqDescen(ifils) 260 254 call Register_Hallo_u(zq(:,:,iq2),llm,2,2,2,2,MyRequest1) 261 255 call Register_Hallo_u(zm(:,:,iq2),llm,1,1,1,1,MyRequest1) … … 265 259 call VTe(VTHallo) 266 260 c$OMP END MASTER 267 else 268 261 CASE DEFAULT 269 262 stop 'vlspltgen_p : schema non parallelise' 270 263 271 endif264 END SELECT 272 265 273 266 enddo !DO iq=1,nqperes … … 298 291 !write(*,*) 'vlspltgen 279: iq=',iq 299 292 300 if(iadv(iq) == 0) then 301 302 cycle 303 304 else if (iadv(iq)==10) then 305 293 SELECT CASE(tracers(iq)%iadv) 294 CASE(0); CYCLE 295 CASE(10) 306 296 #ifdef _ADV_HALLO 307 297 call vlx_loc(zq,pente_max,zm,mu, 308 298 & ij_begin+2*iip1,ij_end-2*iip1,iq) 309 299 #endif 310 else if (iadv(iq)==14) then300 CASE(14) 311 301 #ifdef _ADV_HALLO 312 302 call vlxqs_loc(zq,pente_max,zm,mu, 313 303 & qsat,ij_begin+2*iip1,ij_end-2*iip1,iq) 314 304 #endif 315 else 316 305 CASE DEFAULT 317 306 stop 'vlspltgen_p : schema non parallelise' 318 307 319 endif308 END SELECT 320 309 321 310 enddo … … 355 344 #endif 356 345 357 if(iadv(iq) == 0) then 358 359 cycle 360 361 else if (iadv(iq)==10) then 362 363 call vly_loc(zq,pente_max,zm,mv,iq) 364 365 else if (iadv(iq)==14) then 366 367 call vlyqs_loc(zq,pente_max,zm,mv, 368 & qsat,iq) 369 370 else 371 346 SELECT CASE(tracers(iq)%iadv) 347 CASE(0); CYCLE 348 CASE(10); call vly_loc(zq,pente_max,zm,mv,iq) 349 CASE(14); call vlyqs_loc(zq,pente_max,zm,mv,qsat,iq) 350 CASE DEFAULT 372 351 stop 'vlspltgen_p : schema non parallelise' 373 374 endif 352 END SELECT 375 353 376 354 enddo … … 386 364 CALL WriteField_u('zm',zm(:,:,iq)) 387 365 #endif 388 if(iadv(iq) == 0) then 389 390 cycle 391 392 else if (iadv(iq)==10 .or. iadv(iq)==14 ) then 393 366 SELECT CASE(tracers(iq)%iadv) 367 CASE(0); CYCLE 368 CASE(10,14) 394 369 c$OMP BARRIER 395 370 #ifdef _ADV_HALLO … … 411 386 call Register_Hallo_u(zm(:,:,iq),llm,1,1,1,1,MyRequest2) 412 387 ! CRisi 413 do ifils=1, nqdesc(iq)414 iq2= iqfils(ifils,iq)388 do ifils=1,tracers(iq)%nqDescen 389 iq2=tracers(iq)%iqDescen(ifils) 415 390 call Register_Hallo_u(zq(:,:,iq2),llm,2,2,2,2,MyRequest2) 416 391 call Register_Hallo_u(zm(:,:,iq2),llm,1,1,1,1,MyRequest2) … … 420 395 c$OMP END MASTER 421 396 c$OMP BARRIER 422 else 423 397 CASE DEFAULT 424 398 stop 'vlspltgen_p : schema non parallelise' 425 399 426 endif400 END SELECT 427 401 428 402 enddo … … 448 422 !write(*,*) 'vlspltgen 409: iq=',iq 449 423 450 if(iadv(iq) == 0) then 451 452 cycle 453 454 else if (iadv(iq)==10 .or. iadv(iq)==14 ) then 424 SELECT CASE(tracers(iq)%iadv) 425 CASE(0); CYCLE 426 CASE(10,14) 455 427 c$OMP BARRIER 456 428 … … 461 433 462 434 c$OMP BARRIER 463 else 464 435 CASE DEFAULT 465 436 stop 'vlspltgen_p : schema non parallelise' 466 467 endif 437 END SELECT 468 438 469 439 enddo … … 498 468 CALL WriteField_u('zm',zm(:,:,iq)) 499 469 #endif 500 if(iadv(iq) == 0) then 501 502 cycle 503 504 else if (iadv(iq)==10) then 505 506 call vly_loc(zq,pente_max,zm,mv,iq) 507 508 else if (iadv(iq)==14) then 509 510 call vlyqs_loc(zq,pente_max,zm,mv, 511 & qsat,iq) 512 513 else 514 515 stop 'vlspltgen_p : schema non parallelise' 516 517 endif 470 SELECT CASE(tracers(iq)%iadv) 471 CASE(0); CYCLE 472 CASE(10); call vly_loc(zq,pente_max,zm,mv, iq) 473 CASE(14); call vlyqs_loc(zq,pente_max,zm,mv,qsat,iq) 474 CASE DEFAULT; stop 'vlspltgen_p : schema non parallelise' 475 END SELECT 518 476 519 477 enddo !do iq=1,nqperes … … 529 487 CALL WriteField_u('zm',zm(:,:,iq)) 530 488 #endif 531 if(iadv(iq) == 0) then 532 533 cycle 534 535 else if (iadv(iq)==10) then 536 537 call vlx_loc(zq,pente_max,zm,mu, 489 SELECT CASE(tracers(iq)%iadv) 490 CASE(0); CYCLE 491 CASE(10); call vlx_loc(zq,pente_max,zm,mu, 538 492 & ij_begin,ij_end,iq) 539 540 else if (iadv(iq)==14) then 541 542 call vlxqs_loc(zq,pente_max,zm,mu, 493 CASE(14); call vlxqs_loc(zq,pente_max,zm,mu, 543 494 & qsat, ij_begin,ij_end,iq) 544 545 else 546 547 stop 'vlspltgen_p : schema non parallelise' 548 549 endif 495 CASE DEFAULT; stop 'vlspltgen_p : schema non parallelise' 496 END SELECT 550 497 551 498 enddo !do iq=1,nqperes -
LMDZ6/trunk/libf/dyn3dmem/vlspltqs_loc.F
r3800 r4050 12 12 c -------------------------------------------------------------------- 13 13 USE parallel_lmdz 14 USE infotrac, ONLY : nqtot, nqfils,nqdesc,iqfils, ! CRisi &14 USE infotrac, ONLY : nqtot,tracers, ! CRisi & 15 15 & qperemin,masseqmin,ratiomin ! MVals et CRisi 16 16 IMPLICIT NONE … … 337 337 ! CRisi: appel récursif de l'advection sur les fils. 338 338 ! Il faut faire ça avant d'avoir mis à jour q et masse 339 !write(*,*) 'vlspltqs 336: iq,ijb_x,nqfils(iq)=', 340 ! & iq,ijb_x,nqfils(iq) 341 342 if (nqfils(iq).gt.0) then 343 do ifils=1,nqdesc(iq) 344 iq2=iqfils(ifils,iq) 339 !write(*,*) 'vlspltqs 336: iq,ijb_x,iqDescen(iq)=', 340 ! & iq,ijb_x,tracers(iq)%iqDescen 341 342 do ifils=1,tracers(iq)%nqDescen 343 iq2=tracers(iq)%iqDescen(ifils) 345 344 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 346 345 DO l=1,llm 347 346 DO ij=ijb,ije 348 !MVals: veiller a ce qu'on n'ait pas de denominateur nul349 masse(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),masseqmin)350 if (q(ij,l,iq).gt.qperemin) then ! modif 13 nov 2020351 Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)352 else353 Ratio(ij,l,iq2)=ratiomin354 endif347 !MVals: veiller a ce qu'on n'ait pas de denominateur nul 348 masse(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),masseqmin) 349 if (q(ij,l,iq).gt.qperemin) then ! modif 13 nov 2020 350 Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq) 351 else 352 Ratio(ij,l,iq2)=ratiomin 353 endif 355 354 enddo 356 enddo 357 c$OMP END DO NOWAIT 358 enddo !do ifils=1,nqfils(iq) 359 do ifils=1,nqfils(iq) 360 iq2=iqfils(ifils,iq) 361 !write(*,*) 'vlxqs 349: on appelle vlx pour iq2=',iq2 362 call vlx_loc(Ratio,pente_max,masse,u_mq,ijb_x,ije_x,iq2) 363 enddo !do ifils=1,nqfils(iq) 364 endif !if (nqfils(iq).gt.0) then 355 enddo 356 c$OMP END DO NOWAIT 357 enddo 358 do ifils=1,tracers(iq)%nqDescen 359 iq2=tracers(iq)%iqDescen(ifils) 360 !write(*,*) 'vlxqs 349: on appelle vlx pour iq2=',iq2 361 call vlx_loc(Ratio,pente_max,masse,u_mq,ijb_x,ije_x,iq2) 362 enddo 365 363 ! end CRisi 366 364 … … 389 387 390 388 ! retablir les fils en rapport de melange par rapport a l'air: 391 if (nqfils(iq).gt.0) then 392 do ifils=1,nqdesc(iq) 393 iq2=iqfils(ifils,iq) 389 do ifils=1,tracers(iq)%nqDescen 390 iq2=tracers(iq)%iqDescen(ifils) 394 391 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 395 392 DO l=1,llm 396 393 DO ij=ijb+1,ije 397 394 q(ij,l,iq2)=q(ij,l,iq)*Ratio(ij,l,iq2) 398 395 enddo 399 396 DO ij=ijb+iip1-1,ije,iip1 400 397 q(ij-iim,l,iq2)=q(ij,l,iq2) 401 398 enddo ! DO ij=ijb+iip1-1,ije,iip1 402 enddo 403 c$OMP END DO NOWAIT 404 enddo !do ifils=1,nqdesc(iq) 405 endif !if (nqfils(iq).gt.0) then 399 enddo 400 c$OMP END DO NOWAIT 401 enddo 406 402 407 403 !write(*,*) 'vlspltqs 399: iq,ijb_x=',iq,ijb_x … … 426 422 c -------------------------------------------------------------------- 427 423 USE parallel_lmdz 428 USE infotrac, ONLY : nqtot, nqfils,nqdesc,iqfils, ! CRisi &424 USE infotrac, ONLY : nqtot,tracers, ! CRisi & 429 425 & qperemin,masseqmin,ratiomin ! MVals et CRisi 430 426 USE comconst_mod, ONLY: pi … … 733 729 ! CRisi: appel récursif de l'advection sur les fils. 734 730 ! Il faut faire ça avant d'avoir mis à jour q et masse 735 !write(*,*) 'vlyqs 689: iq, nqfils(iq)=',iq,nqfils(iq)731 !write(*,*) 'vlyqs 689: iq,iqDescen(iq)=',iq,tracers(iq)%iqDescen 736 732 737 733 ijb=ij_begin-2*iip1 … … 747 743 !write(lunout,*) 'ij_begin,ij_end=',ij_begin,ij_end 748 744 !write(lunout,*) 'pole_nord,pole_sud=',pole_nord,pole_sud 749 if (nqfils(iq).gt.0) then 750 do ifils=1,nqdesc(iq) 751 iq2=iqfils(ifils,iq) 745 do ifils=1,tracers(iq)%nqDescen 746 iq2=tracers(iq)%iqDescen(ifils) 752 747 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 753 748 DO l=1,llm 754 749 ! modif des bornes: CRisi 16 nov 2020 755 750 ! d'abord masse avec bornes corrigées 756 751 DO ij=ijbm,ijem 757 !MVals: veiller a ce qu'on n'ait pas de denominateur nul758 masse(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),masseqmin)752 !MVals: veiller a ce qu'on n'ait pas de denominateur nul 753 masse(ij,l,iq2)=max(masse(ij,l,iq)*q(ij,l,iq),masseqmin) 759 754 enddo !DO ij=ijbm,ijem 760 755 761 756 ! ensuite Ratio avec anciennes bornes 762 757 DO ij=ijb,ije 763 !MVals: veiller a ce qu'on n'ait pas de denominateur nul764 !write(lunout,*) 'ij,l,q(ij,l,iq)=',ij,l,q(ij,l,iq)765 if (q(ij,l,iq).gt.qperemin) then ! modif 13 nov 2020766 Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq)767 else768 Ratio(ij,l,iq2)=ratiomin769 endif758 !MVals: veiller a ce qu'on n'ait pas de denominateur nul 759 !write(lunout,*) 'ij,l,q(ij,l,iq)=',ij,l,q(ij,l,iq) 760 if (q(ij,l,iq).gt.qperemin) then ! modif 13 nov 2020 761 Ratio(ij,l,iq2)=q(ij,l,iq2)/q(ij,l,iq) 762 else 763 Ratio(ij,l,iq2)=ratiomin 764 endif 770 765 enddo !DO ij=ijbm,ijem 771 enddo !DO l=1,llm 772 c$OMP END DO NOWAIT 773 enddo !do ifils=1,nqdesc(iq) 774 do ifils=1,nqfils(iq) 775 iq2=iqfils(ifils,iq) 776 !write(lunout,*) 'vly: appel recursiv vly iq2=',iq2 777 call vly_loc(Ratio,pente_max,masse,qbyv,iq2) 778 enddo !do ifils=1,nqfils(iq) 779 endif !if (nqfils(iq).gt.0) then 766 enddo !DO l=1,llm 767 c$OMP END DO NOWAIT 768 enddo 769 do ifils=1,tracers(iq)%nqDescen 770 iq2=tracers(iq)%iqDescen(ifils) 771 !write(lunout,*) 'vly: appel recursiv vly iq2=',iq2 772 call vly_loc(Ratio,pente_max,masse,qbyv,iq2) 773 enddo 780 774 781 775 … … 856 850 ! if (pole_sud) ije=ij_end-iip1 857 851 858 if (nqfils(iq).gt.0) then 859 do ifils=1,nqdesc(iq) 860 iq2=iqfils(ifils,iq) 852 do ifils=1,tracers(iq)%nqDescen 853 iq2=tracers(iq)%iqDescen(ifils) 861 854 c$OMP DO SCHEDULE(STATIC,OMP_CHUNK) 862 855 DO l=1,llm 863 856 DO ij=ijb,ije 864 857 q(ij,l,iq2)=q(ij,l,iq)*Ratio(ij,l,iq2) 865 858 enddo 866 enddo 867 c$OMP END DO NOWAIT 868 enddo !do ifils=1,nqdesc(iq) 869 endif !if (nqfils(iq).gt.0) then 859 enddo 860 c$OMP END DO NOWAIT 861 enddo 870 862 871 863 -
LMDZ6/trunk/libf/dyn3dmem/vlz_mod.F90
r2281 r4050 5 5 REAL,POINTER,SAVE :: dzqw(:,:) 6 6 REAL,POINTER,SAVE :: adzqw(:,:) 7 ! CRisi: pour les traceurs: 8 !REAL,POINTER,SAVE :: masseq(:,:,:) 7 ! CRisi: pour les traceurs: 9 8 REAL,POINTER,SAVE :: Ratio(:,:,:) 10 9 … … 25 24 CALL allocate_u(dzqw,llm,d) 26 25 CALL allocate_u(adzqw,llm,d) 27 if (nqdesc_tot.gt.0) then 28 !CALL allocate_u(masseq,llm,nqtot,d) 29 CALL allocate_u(Ratio,llm,nqtot,d) 30 endif !if (nqdesc_tot.gt.0) then 26 IF(ANY(tracers(:)%nqDescen > 0)) CALL allocate_u(Ratio,llm,nqtot,d) 31 27 32 28 END SUBROUTINE vlz_allocate … … 44 40 CALL switch_u(dzqw,distrib_vanleer,dist) 45 41 CALL switch_u(adzqw,distrib_vanleer,dist) 46 ! CRisi: 47 if (nqdesc_tot.gt.0) then 48 !CALL switch_u(masseq,distrib_vanleer,dist) 49 CALL switch_u(Ratio,distrib_vanleer,dist) 50 endif !if (nqdesc_tot.gt.0) then 42 IF(ANY(tracers(:)%nqDescen > 0)) CALL switch_u(Ratio,distrib_vanleer,dist) 51 43 52 44 END SUBROUTINE vlz_switch_vanleer
Note: See TracChangeset
for help on using the changeset viewer.