Changeset 4727 for LMDZ6/branches/LMDZ_ECRad/libf/phylmd/phytrac_mod.F90
- Timestamp:
- Oct 19, 2023, 4:02:57 PM (9 months ago)
- Location:
- LMDZ6/branches/LMDZ_ECRad
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/branches/LMDZ_ECRad
- Property svn:mergeinfo changed
-
LMDZ6/branches/LMDZ_ECRad/libf/phylmd/phytrac_mod.F90
r4482 r4727 42 42 REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: d_tr_lessi_impa ! Td du lessivage par impaction 43 43 REAL,DIMENSION(:,:,:),ALLOCATABLE,SAVE :: d_tr_lessi_nucl ! Td du lessivage par nucleation 44 REAL,DIMENSION(:,:),ALLOCATABLE,SAVE 45 REAL,DIMENSION(:,:),ALLOCATABLE,SAVE 46 REAL,DIMENSION(:,:),ALLOCATABLE,SAVE 44 REAL,DIMENSION(:,:),ALLOCATABLE,SAVE :: qPrls !jyg: concentration tra dans pluie LS a la surf. 45 REAL,DIMENSION(:,:),ALLOCATABLE,SAVE :: d_tr_dry ! Td depot sec/traceur (1st layer),ALLOCATABLE,SAVE jyg 46 REAL,DIMENSION(:,:),ALLOCATABLE,SAVE :: flux_tr_dry ! depot sec/traceur (surface),ALLOCATABLE,SAVE jyg 47 47 48 48 !$OMP THREADPRIVATE(qPa,qMel,qTrdi,dtrcvMA,d_tr_th,d_tr_lessi_impa,d_tr_lessi_nucl) … … 51 51 !$OMP THREADPRIVATE(d_tr_cl,d_tr_dry,flux_tr_dry,d_tr_dec,d_tr_cv) 52 52 53 54 53 CONTAINS 55 54 56 55 SUBROUTINE phytrac_init() 56 57 57 USE dimphy 58 58 USE infotrac_phy, ONLY: nbtr, type_trac 59 59 USE tracco2i_mod, ONLY: tracco2i_init 60 60 61 IMPLICIT NONE 61 62 62 ALLOCATE(d_tr_cl(klon,klev,nbtr),d_tr_dry(klon,nbtr)) 63 ALLOCATE(flux_tr_dry(klon,nbtr),d_tr_dec(klon,klev,nbtr),d_tr_cv(klon,klev,nbtr)) 64 ALLOCATE(d_tr_insc(klon,klev,nbtr),d_tr_bcscav(klon,klev,nbtr)) 65 ALLOCATE(d_tr_evapls(klon,klev,nbtr),d_tr_ls(klon,klev,nbtr)) 66 ALLOCATE(qPrls(klon,nbtr),d_tr_trsp(klon,klev,nbtr)) 67 ALLOCATE(d_tr_sscav(klon,klev,nbtr),d_tr_sat(klon,klev,nbtr)) 68 ALLOCATE(d_tr_uscav(klon,klev,nbtr),qPr(klon,klev,nbtr),qDi(klon,klev,nbtr)) 69 ALLOCATE(qPa(klon,klev,nbtr),qMel(klon,klev,nbtr)) 70 ALLOCATE(qTrdi(klon,klev,nbtr),dtrcvMA(klon,klev,nbtr)) 71 ALLOCATE(d_tr_th(klon,klev,nbtr)) 72 ALLOCATE(d_tr_lessi_impa(klon,klev,nbtr),d_tr_lessi_nucl(klon,klev,nbtr)) 73 74 63 ALLOCATE(d_tr_cl(klon,klev,nbtr),d_tr_dry(klon,nbtr)) 64 ALLOCATE(flux_tr_dry(klon,nbtr),d_tr_dec(klon,klev,nbtr),d_tr_cv(klon,klev,nbtr)) 65 ALLOCATE(d_tr_insc(klon,klev,nbtr),d_tr_bcscav(klon,klev,nbtr)) 66 ALLOCATE(d_tr_evapls(klon,klev,nbtr),d_tr_ls(klon,klev,nbtr)) 67 ALLOCATE(qPrls(klon,nbtr),d_tr_trsp(klon,klev,nbtr)) 68 ALLOCATE(d_tr_sscav(klon,klev,nbtr),d_tr_sat(klon,klev,nbtr)) 69 ALLOCATE(d_tr_uscav(klon,klev,nbtr),qPr(klon,klev,nbtr),qDi(klon,klev,nbtr)) 70 ALLOCATE(qPa(klon,klev,nbtr),qMel(klon,klev,nbtr)) 71 ALLOCATE(qTrdi(klon,klev,nbtr),dtrcvMA(klon,klev,nbtr)) 72 ALLOCATE(d_tr_th(klon,klev,nbtr)) 73 ALLOCATE(d_tr_lessi_impa(klon,klev,nbtr),d_tr_lessi_nucl(klon,klev,nbtr)) 75 74 76 75 !=============================================================================== … … 79 78 !=============================================================================== 80 79 ! -- CO2 interactif -- 81 IF (ANY(type_trac == ['co2i','inco'])) CALL tracco2i_init()80 IF (ANY(type_trac == ['co2i','inco'])) CALL tracco2i_init() 82 81 83 82 ! -- type_trac == 'co2i' ! PC … … 136 135 USE print_control_mod, ONLY: lunout 137 136 USE aero_mod, ONLY : naero_grp 137 USE lmdz_thermcell_dq, ONLY : thermcell_dq 138 138 139 139 USE tracco2i_mod … … 147 147 USE phys_local_var_mod, ONLY: budg_dep_dry_part, budg_dep_wet_part 148 148 USE infotrac_phy, ONLY: nbtr_sulgas, id_OCS_strat, id_SO2_strat, id_H2SO4_strat 149 USE strataer_nuc_mod, ONLY : tracstrataer_init 149 150 USE aerophys 150 151 #endif … … 242 243 REAL,DIMENSION(klon,klev),INTENT(IN) :: clw 243 244 ! RomP <<< 244 245 245 ! 246 246 REAL,DIMENSION(klon,klev),INTENT(IN) :: mp … … 251 251 !---------- 252 252 REAL,DIMENSION(klon,klev+1),INTENT(IN) :: fm_therm 253 REAL,DIMENSION(klon,klev),INTENT(IN ) :: entr_therm253 REAL,DIMENSION(klon,klev),INTENT(INOUT) :: entr_therm 254 254 ! 255 255 !Couche limite: … … 374 374 zrho(i,k)=0. 375 375 zdz(i,k)=0. 376 END 377 END 376 ENDDO 377 ENDDO 378 378 379 379 DO it=1, nbtr … … 401 401 zmfdam(i,k,it)=0. 402 402 zmfphi2(i,k,it)=0. 403 END 404 END 405 END 403 ENDDO 404 ENDDO 405 ENDDO 406 406 407 407 DO it=1, nbtr … … 409 409 d_tr_dry(i,it)=0. 410 410 flux_tr_dry(i,it)=0. 411 END 412 END 411 ENDDO 412 ENDDO 413 413 414 414 DO k = 1, klev 415 415 DO i = 1, klon 416 416 delp(i,k) = paprs(i,k)-paprs(i,k+1) 417 END 418 END 417 ENDDO 418 ENDDO 419 419 420 420 IF (debutphy) THEN … … 491 491 492 492 ! Initialize module for specific tracers 493 IF (type_trac == 'inca') THEN493 IF (type_trac == 'inca') THEN 494 494 source(:,:)=init_source(:,:) 495 495 CALL tracinca_init(aerosol,lessivage) 496 ELSE IF (type_trac == 'repr') THEN496 ELSE IF (type_trac == 'repr') THEN 497 497 source(:,:)=0. 498 ELSE IF (type_trac == 'co2i') THEN498 ELSE IF (type_trac == 'co2i') THEN 499 499 source(:,:)=0. 500 500 lessivage = .FALSE. … … 504 504 iflag_vdf_trac= 1 505 505 iflag_con_trac= 1 506 ELSE IF (type_trac == 'inco') THEN506 ELSE IF (type_trac == 'inco') THEN 507 507 source(:,1:nqCO2) = 0. ! from CO2i ModThL 508 508 source(:,nqCO2+1:nbtr)=init_source(:,:) ! from INCA ModThL … … 514 514 iflag_con_trac = 1 ! From CO2i 515 515 #ifdef CPP_StratAer 516 ELSE IF (type_trac == 'coag') THEN516 ELSE IF (type_trac == 'coag') THEN 517 517 source(:,:)=0. 518 DO it= 1, nbtr_sulgas 519 aerosol(it)=.FALSE. 520 IF (it==id_H2SO4_strat) aerosol(it)=.TRUE. 521 ENDDO 522 DO it= nbtr_sulgas+1, nbtr 523 aerosol(it)=.TRUE. 524 ENDDO 518 CALL tracstrataer_init(aerosol,lessivage) ! init aerosols and lessivage param 525 519 #endif 526 ELSE IF (type_trac == 'lmdz') THEN520 ELSE IF (type_trac == 'lmdz') THEN 527 521 CALL traclmdz_init(pctsrf,xlat,xlon,ftsol,tr_seri,t_seri,pplay,sh,pdtphys,aerosol,lessivage) 528 END 522 ENDIF 529 523 530 524 ! … … 539 533 ! 540 534 DO it=1, nbtr 541 IF (type_trac == 'repr') THEN535 IF (type_trac == 'repr') THEN 542 536 flag_cvltr(it)=.FALSE. 543 ELSE IF (type_trac == 'inca') THEN537 ELSE IF (type_trac == 'inca') THEN 544 538 ! IF ((it.EQ.id_Rn222) .OR. ((it.GE.id_SO2) .AND. (it.LE.id_NH3)) ) THEN 545 539 ! !--gas-phase species … … 565 559 !--for now we do not scavenge in cvltr 566 560 flag_cvltr(it)=.FALSE. 567 ELSE IF (type_trac == 'co2i') THEN561 ELSE IF (type_trac == 'co2i') THEN 568 562 !--co2 tracers are not scavenged 569 563 flag_cvltr(it)=.FALSE. 570 ELSE IF (type_trac == 'inco') THEN ! Add ThL564 ELSE IF (type_trac == 'inco') THEN ! Add ThL 571 565 flag_cvltr(it)=.FALSE. 572 566 #ifdef CPP_StratAer 573 ELSE IF (type_trac == 'coag') THEN567 ELSE IF (type_trac == 'coag') THEN 574 568 IF (convscav.and.aerosol(it)) THEN 575 569 flag_cvltr(it)=.TRUE. … … 581 575 ENDIF 582 576 #endif 583 ELSE IF (type_trac == 'lmdz') THEN577 ELSE IF (type_trac == 'lmdz') THEN 584 578 IF (convscav.and.aerosol(it)) THEN 585 579 flag_cvltr(it)=.TRUE. … … 590 584 flag_cvltr(it)=.FALSE. 591 585 ENDIF 592 END 586 ENDIF 593 587 ENDDO 594 588 ! … … 623 617 DO i=1,klon 624 618 zmasse(i,k)=(paprs(i,k)-paprs(i,k+1))/rg 625 END 626 END 619 ENDDO 620 ENDDO 627 621 ! 628 622 IF (id_be .GT. 0) THEN … … 630 624 DO i=1,klon 631 625 sourceBE(i,k)=srcbe(i,k) !RomP -> pour sortie histrac 632 END 633 END 626 ENDDO 627 ENDDO 634 628 ENDIF 635 629 … … 638 632 ! 639 633 !=============================================================================== 640 IF (type_trac == 'inca') THEN634 IF (type_trac == 'inca') THEN 641 635 ! -- CHIMIE INCA config_inca = aero or chem -- 642 636 ! Appel fait en fin de phytrac pour avoir les emissions modifiees par 643 637 ! la couche limite et la convection avant le calcul de la chimie 644 638 645 ELSE IF (type_trac == 'repr') THEN639 ELSE IF (type_trac == 'repr') THEN 646 640 ! -- CHIMIE REPROBUS -- 647 641 CALL tracreprobus(pdtphys, gmtime, debutphy, julien, & … … 650 644 tr_seri) 651 645 652 ELSE IF (type_trac == 'co2i') THEN646 ELSE IF (type_trac == 'co2i') THEN 653 647 ! -- CO2 interactif -- 654 648 ! -- source is updated with FF and BB emissions … … 659 653 xlat, xlon, pphis, pphi, & 660 654 t_seri, pplay, paprs, tr_seri, source) 661 ELSE IF (type_trac == 'inco') THEN ! Add ThL655 ELSE IF (type_trac == 'inco') THEN ! Add ThL 662 656 CALL tracco2i(pdtphys, debutphy, & 663 657 xlat, xlon, pphis, pphi, & … … 665 659 666 660 #ifdef CPP_StratAer 667 ELSE IF (type_trac == 'coag') THEN661 ELSE IF (type_trac == 'coag') THEN 668 662 ! --STRATOSPHERIC AER IN THE STRAT -- 669 663 CALL traccoag(pdtphys, gmtime, debutphy, julien, & … … 672 666 tr_seri) 673 667 #endif 674 ELSE IF (type_trac == 'lmdz') THEN668 ELSE IF (type_trac == 'lmdz') THEN 675 669 ! -- Traitement des traceurs avec traclmdz 676 670 CALL traclmdz(nstep, julien, gmtime, pdtphys, t_seri, paprs, pplay, & … … 678 672 rh, pphi, ustar, wstar, ale_bl, ale_wake, u10m, v10m, & 679 673 tr_seri, source, d_tr_cl,d_tr_dec, zmasse) !RomP 680 END 674 ENDIF 681 675 !====================================================================== 682 676 ! -- Calcul de l'effet de la convection -- … … 738 732 DO i = 1, klon 739 733 tr_seri(i,k,it) = tr_seri(i,k,it) + d_tr_cv(i,k,it) 740 END 741 END 734 ENDDO 735 ENDDO 742 736 743 737 CALL minmaxqfi(tr_seri(:,:,it),0.,1.e33,'convection it = '//TRIM(int2str(it))) 744 738 745 END 739 ENDDO ! nbtr 746 740 747 741 #ifdef CPP_StratAer … … 795 789 ! tr_seri(i,k,it)=MIN(tr_seri(i,k,it),1.e10) 796 790 !#endif 797 END 798 END 799 END 791 ENDDO 792 ENDDO 793 ENDDO 800 794 801 795 IF (iflag_thermals.GT.0.AND.iflag_the_trac>0) THEN … … 811 805 d_tr_th(i,k,it)=pdtphys*d_tr_th(i,k,it) 812 806 tr_seri(i,k,it)=MAX(tr_seri(i,k,it)+d_tr_th(i,k,it),0.) 813 END 814 END 815 816 END 807 ENDDO 808 ENDDO 809 810 ENDDO ! it 817 811 818 812 ENDIF ! Thermiques … … 854 848 DO it=1, nbtr 855 849 ! 856 IF ( pbl_flg(it) /= 0) THEN850 IF (pbl_flg(it) /= 0) THEN 857 851 ! 858 852 CALL cltrac(pdtphys, coefh,t_seri, & … … 929 923 ! Liu (2001) proposed to use 1.5e-3 kg/kg 930 924 931 !jyg<932 !! CALL lsc_scav(pdtphys,it,iflag_lscav,ql_incl,prfl,psfl,rneb,beta_fisrt, &933 925 CALL lsc_scav(pdtphys,it,iflag_lscav,aerosol,ql_incl,prfl,psfl,rneb,beta_fisrt, & 934 !>jyg 935 beta_v1,pplay,paprs,t_seri,tr_seri,d_tr_insc, & 936 d_tr_bcscav,d_tr_evapls,qPrls) 926 beta_v1,pplay,paprs,t_seri,tr_seri,d_tr_insc,d_tr_bcscav,d_tr_evapls,qPrls) 937 927 938 928 !large scale scavenging tendency … … 946 936 ENDIF 947 937 948 END 938 ENDDO !tr 949 939 950 940 #ifdef CPP_StratAer
Note: See TracChangeset
for help on using the changeset viewer.