Changeset 4046 for LMDZ6/trunk/libf/phylmd
- Timestamp:
- Dec 15, 2021, 11:18:49 PM (4 years ago)
- Location:
- LMDZ6/trunk/libf/phylmd
- Files:
-
- 17 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/libf/phylmd/Dust/phytracr_spl_mod.F90
r3977 r4046 1416 1416 !print *,nbtr 1417 1417 do it=1,nbtr 1418 print *, it, tname(it+nqo) 1419 if (tname(it+nqo) == 'PREC' ) then 1420 id_prec=it 1421 endif 1422 if (tname(it+nqo) == 'FINE' ) then 1423 id_fine=it 1424 endif 1425 if (tname(it+nqo) == 'COSS' ) then 1426 id_coss=it 1427 endif 1428 if (tname(it+nqo) == 'CODU' ) then 1429 id_codu=it 1430 endif 1431 if (tname(it+nqo) == 'SCDU' ) then 1432 id_scdu=it 1433 endif 1418 print *, it, tracers(it+nqo)%name 1419 SELECT CASE(tracers(it+nqo)%name) 1420 CASE('PREC'); id_prec=it 1421 CASE('FINE'); id_fine=it 1422 CASE('COSS'); id_coss=it 1423 CASE('CODU'); id_codu=it 1424 CASE('SCDU'); id_scdu=it 1425 END SELECT 1434 1426 enddo 1435 1427 ! check consistency with dust emission scheme: -
LMDZ6/trunk/libf/phylmd/Dust/splaeropt_5wv_rrtm.F90
r2753 r4046 113 113 114 114 DO itr=1,nbtr !--loop over tracers 115 116 IF (tname(itr+nqo)=='PREC') THEN !--fine mode accumulation mode 117 CYCLE 118 ELSE IF (tname(itr+nqo)=='FINE') THEN !--fine mode accumulation mode 119 soluble=.TRUE. 120 spsol=1 121 aerindex=1 122 ELSE IF (tname(itr+nqo)=='COSS') THEN !--coarse mode sea salt 123 soluble=.TRUE. 124 spsol=2 125 aerindex=2 126 ELSE IF (tname(itr+nqo)=='CODU') THEN !--coarse mode dust 127 soluble=.FALSE. 128 spinsol=1 129 aerindex=3 130 ELSE IF (tname(itr+nqo)=='SCDU') THEN !--super coarse mode dust 131 soluble=.FALSE. 132 spinsol=2 133 aerindex=4 134 ELSE 135 CALL abort_physic(modname,'I cannot do aerosol optics for '//tname(itr+nqo),1) 136 ENDIF 115 SELECT CASE(tracers(itr+nqo)%name) 116 CASE('PREC'); CYCLE !--precursor 117 CASE('FINE'); soluble=.TRUE.; spsol=1; aerindex=1 !--fine mode accumulation mode 118 CASE('COSS'); soluble=.TRUE.; spsol=2; aerindex=2 !--coarse mode sea salt 119 CASE('CODU'); soluble=.FALSE.; spsol=1; aerindex=3 !--coarse mode dust 120 CASE('SCDU'); soluble=.FALSE.; spsol=2; aerindex=4 !--super coarse mode dust 121 CASE DEFAULT; CALL abort_physic(modname,'I cannot do aerosol optics for '//tracers(itr+nqo)%name,1) 122 END SELECT 137 123 138 124 DO la=1,las -
LMDZ6/trunk/libf/phylmd/Dust/splaeropt_6bands_rrtm.F90
r3770 r4046 165 165 cg_ae(:,:,:,:)=0. 166 166 167 DO itr=1, nbtr 168 169 IF (tname(itr+nqo)=='PREC') THEN !--precursor 170 CYCLE 171 ELSE IF (tname(itr+nqo)=='FINE') THEN !--fine mode accumulation mode 172 soluble=.TRUE. 173 spsol=1 174 aerindex=1 175 ELSE IF (tname(itr+nqo)=='COSS') THEN !--coarse mode sea salt 176 soluble=.TRUE. 177 spsol=2 178 aerindex=2 179 ELSE IF (tname(itr+nqo)=='CODU') THEN !--coarse mode dust 180 soluble=.FALSE. 181 spinsol=1 182 aerindex=3 183 ELSE IF (tname(itr+nqo)=='SCDU') THEN !--super coarse mode dust 184 soluble=.FALSE. 185 spinsol=2 186 aerindex=4 187 ELSE 188 CALL abort_physic(modname,'I cannot do aerosol optics for '//tname(itr+nqo),1) 189 ENDIF 167 DO itr=1,nbtr !--loop over tracers 168 SELECT CASE(tracers(itr+nqo)%name) 169 CASE('PREC'); CYCLE !--precursor 170 CASE('FINE'); soluble=.TRUE.; spsol=1; aerindex=1 !--fine mode accumulation mode 171 CASE('COSS'); soluble=.TRUE.; spsol=2; aerindex=2 !--coarse mode sea salt 172 CASE('CODU'); soluble=.FALSE.; spsol=1; aerindex=3 !--coarse mode dust 173 CASE('SCDU'); soluble=.FALSE.; spsol=2; aerindex=4 !--super coarse mode dust 174 CASE DEFAULT; CALL abort_physic(modname,'I cannot do aerosol optics for '//tracers(itr+nqo)%name,1) 175 END SELECT 190 176 191 177 IF (soluble) THEN ! For aerosol soluble components -
LMDZ6/trunk/libf/phylmd/Dust/splaeropt_lw_rrtm.F90
r2753 r4046 55 55 ! 56 56 DO itr=1,nbtr 57 ! 58 IF (tname(itr+nqo)=='PREC') THEN !--precursor 59 CYCLE 60 ELSE IF (tname(itr+nqo)=='FINE') THEN !--fine mode accumulation mode 61 CYCLE 62 ELSE IF (tname(itr+nqo)=='COSS') THEN !--coarse mode sea salt 63 CYCLE 64 ELSE IF (tname(itr+nqo)=='CODU') THEN !--coarse mode dust 65 spinsol=1 66 ELSE IF (tname(itr+nqo)=='SCDU') THEN !--super coarse mode dust 67 spinsol=2 68 ELSE 69 CALL abort_physic(modname,'I cannot do aerosol optics for '//tname(itr+nqo),1) 70 ENDIF 57 SELECT CASE(tracers(itr+nqo)%name) 58 CASE('PREC','FINE''COSS'); CYCLE !--precursor or fine/coarde accumulation mode 59 CASE('CODU'); spinsol=1 !--coarse mode dust 60 CASE('SCDU'); spinsol=2 !--super coarse mode dust 61 CASE DEFAULT; CALL abort_physic(modname,'I cannot do aerosol optics for '//tracers(itr+nqo)%name,1) 62 END SELECT 71 63 ! 72 64 DO inu=1,NLW -
LMDZ6/trunk/libf/phylmd/Dust/splaerosol_optic_rrtm.F90
r2753 r4046 51 51 ! 52 52 DO itr=1,nbtr 53 IF (t name(itr+nqo)=='FINE') THEN53 IF (tracers(itr+nqo)%name=='FINE') THEN 54 54 mass_solu_aero(:,:) = tr_seri(:,:,itr) 55 55 mass_solu_aero_pi(:,:) = tr_seri(:,:,itr) -
LMDZ6/trunk/libf/phylmd/cvltr.F90
r2320 r4046 12 12 USE IOIPSL 13 13 USE dimphy 14 USE infotrac_phy, ONLY : nbtr ,tname14 USE infotrac_phy, ONLY : nbtr 15 15 IMPLICIT NONE 16 16 !===================================================================== -
LMDZ6/trunk/libf/phylmd/cvltr_scav.F90
r2320 r4046 13 13 USE IOIPSL 14 14 USE dimphy 15 USE infotrac_phy, ONLY : nbtr ,tname15 USE infotrac_phy, ONLY : nbtr 16 16 IMPLICIT NONE 17 17 !===================================================================== -
LMDZ6/trunk/libf/phylmd/cvltr_spl.F90
r2320 r4046 13 13 USE IOIPSL 14 14 USE dimphy 15 USE infotrac_phy, ONLY : nbtr ,tname15 USE infotrac_phy, ONLY : nbtr 16 16 IMPLICIT NONE 17 17 !===================================================================== -
LMDZ6/trunk/libf/phylmd/dyn1d/1DUTILS.h
r3780 r4046 713 713 !! enddo 714 714 DO iq = 1,nqtot 715 nmq(iq) = trim(t name(iq))715 nmq(iq) = trim(tracers(iq)%name) 716 716 ENDDO 717 717 print*,'in dyn1deta0 ',fichnom,klon,klev,nqtot … … 864 864 !! nmq(4)="tra2" 865 865 DO iq = 1,nqtot 866 nmq(iq) = trim(t name(iq))866 nmq(iq) = trim(tracers(iq)%name) 867 867 ENDDO 868 868 -
LMDZ6/trunk/libf/phylmd/infotrac_phy.F90
r4005 r4046 7 7 ! the dynamics (could be further cleaned) and is initialized using values 8 8 ! provided by the dynamics 9 10 USE readTracFiles_mod, ONLY: trac_type, maxlen, delPhase 9 11 10 12 ! nqtot : total number of tracers and higher order of moment, water vapor and liquid included … … 41 43 !$OMP THREADPRIVATE(nqperes) 42 44 43 ! Name variables 44 INTEGER,PARAMETER :: tname_lenmax=128 45 CHARACTER(len=tname_lenmax), ALLOCATABLE, DIMENSION(:), SAVE :: tname ! tracer short name for restart and diagnostics 46 CHARACTER(len=tname_lenmax+3), ALLOCATABLE, DIMENSION(:), SAVE :: ttext ! tracer long name for diagnostics 47 !$OMP THREADPRIVATE(tname,ttext) 48 49 !! iadv : index of trasport schema for each tracer 50 ! INTEGER, ALLOCATABLE, DIMENSION(:), SAVE :: iadv 45 ! Tracers parameters 46 TYPE(trac_type), TARGET, ALLOCATABLE, SAVE :: tracers(:) 47 !$OMP THREADPRIVATE(tracers) 51 48 52 49 ! niadv : vector keeping the coorspondance between all tracers(nqtot) treated in the … … 107 104 CONTAINS 108 105 109 SUBROUTINE init_infotrac_phy(nqtot_,nqo_,nbtr_,nqtottr_,nqCO2_,t name_,ttext_,type_trac_,&106 SUBROUTINE init_infotrac_phy(nqtot_,nqo_,nbtr_,nqtottr_,nqCO2_,tracers_,type_trac_,& 110 107 niadv_,conv_flg_,pbl_flg_,solsym_,& 111 108 nqfils_,nqdesc_,nqdesc_tot_,iqfils_,iqpere_,& … … 139 136 INTEGER,INTENT(IN) :: id_BIN01_strat_ 140 137 #endif 141 CHARACTER(len=*),INTENT(IN) :: tname_(nqtot_) ! tracer short name for restart and diagnostics 142 CHARACTER(len=*),INTENT(IN) :: ttext_(nqtot_) ! tracer long name for diagnostics 138 TYPE(trac_type), INTENT(IN) :: tracers_(nqtot_) ! tracers descriptors 143 139 CHARACTER(len=*),INTENT(IN) :: type_trac_ 144 140 INTEGER,INTENT(IN) :: niadv_ (nqtot_) ! equivalent dyn / physique … … 179 175 nqCO2=nqCO2_ 180 176 nqtottr=nqtottr_ 177 ALLOCATE(tracers(nqtot)); tracers(:) = tracers_(:) 181 178 #ifdef CPP_StratAer 182 179 nbtr_bin=nbtr_bin_ … … 187 184 id_BIN01_strat=id_BIN01_strat_ 188 185 #endif 189 ALLOCATE(tname(nqtot))190 tname(:) = tname_(:)191 ALLOCATE(ttext(nqtot))192 ttext(:) = ttext_(:)193 186 type_trac = type_trac_ 194 187 ALLOCATE(niadv(nqtot)) -
LMDZ6/trunk/libf/phylmd/iophy.F90
r3488 r4046 811 811 IMPLICIT NONE 812 812 813 CHARACTER(LEN= 20):: nam_var814 INTEGER, DIMENSION(nfiles) :: flag_var813 CHARACTER(LEN=*), INTENT(INOUT) :: nam_var 814 INTEGER, INTENT(INOUT) :: flag_var(nfiles) 815 815 816 816 IF(prt_level>10) WRITE(lunout,*)'Avant getin: nam_var flag_var ',nam_var,flag_var(:) -
LMDZ6/trunk/libf/phylmd/phyetat0.F90
r3956 r4046 23 23 USE geometry_mod, ONLY : longitude_deg, latitude_deg 24 24 USE iostart, ONLY : close_startphy, get_field, get_var, open_startphy 25 USE infotrac_phy, only: nbtr, nqo, type_trac, t name, niadv25 USE infotrac_phy, only: nbtr, nqo, type_trac, tracers, niadv 26 26 USE traclmdz_mod, ONLY : traclmdz_from_restart 27 27 USE carbon_cycle_mod, ONLY : carbon_cycle_tr, carbon_cycle_cpl, co2_send … … 451 451 !! iiq=niadv(it+2) ! jyg 452 452 iiq=niadv(it+nqo) ! jyg 453 found=phyetat0_get(1,trs(:,it),"trs_"// tname(iiq), &454 "Surf trac"//tname(iiq),0.)453 found=phyetat0_get(1,trs(:,it),"trs_"//TRIM(tracers(iiq)%name), & 454 "Surf trac"//TRIM(tracers(iiq)%name),0.) 455 455 ENDDO 456 456 CALL traclmdz_from_restart(trs) -
LMDZ6/trunk/libf/phylmd/phyredem.F90
r4035 r4046 35 35 USE iostart, ONLY: open_restartphy, close_restartphy, enddef_restartphy, put_field, put_var 36 36 USE traclmdz_mod, ONLY : traclmdz_to_restart 37 USE infotrac_phy, ONLY: type_trac, niadv, t name, nbtr, nqo37 USE infotrac_phy, ONLY: type_trac, niadv, tracers, nbtr, nqo 38 38 USE carbon_cycle_mod, ONLY : carbon_cycle_cpl, co2_send 39 39 USE indice_sol_mod, ONLY: nbsrf, is_oce, is_sic, is_ter, is_lic, epsfra … … 329 329 !! iiq=niadv(it+2) ! jyg 330 330 iiq=niadv(it+nqo) ! jyg 331 CALL put_field(pass,"trs_"//t name(iiq), "", trs(:, it))331 CALL put_field(pass,"trs_"//tracers(iiq)%name, "", trs(:, it)) 332 332 END DO 333 333 END IF … … 380 380 IF (pass==1) CALL enddef_restartphy 381 381 IF (pass==2) CALL close_restartphy 382 ENDDO382 ENDDO ! DO pass=1,2 ! pass=1 netcdf definition ; pass=2 netcdf write 383 383 384 384 !$OMP BARRIER -
LMDZ6/trunk/libf/phylmd/phys_output_mod.F90
r3792 r4046 35 35 USE iophy 36 36 USE dimphy 37 USE infotrac_phy, ONLY: nqtot, nqo, niadv, tname, ttext, type_trac 37 USE infotrac_phy, ONLY: nqtot, nqo, niadv, tracers, type_trac 38 USE strings_mod, ONLY: maxlen 38 39 USE ioipsl 39 40 USE phys_cal_mod, only : hour, calend … … 95 96 CHARACTER(LEN=4), DIMENSION(nlevSTD) :: clevSTD 96 97 REAL, DIMENSION(nlevSTD) :: rlevSTD 97 INTEGER :: nsrf, k, iq, iiq, iff, i, j, ilev 98 INTEGER :: nsrf, k, iq, iiq, iff, i, j, ilev, jq 98 99 INTEGER :: naero 99 100 LOGICAL :: ok_veget … … 113 114 LOGICAL, DIMENSION(nfiles) :: phys_out_filekeys 114 115 LOGICAL, DIMENSION(nfiles) :: phys_out_filestations 116 117 CHARACTER(LEN=50) :: outiso 118 CHARACTER(LEN=20) :: unit 119 CHARACTER(LEN=maxlen) :: tnam, lnam, dn 120 INTEGER :: flag(nfiles) 115 121 116 122 !!!!!!!!!! stockage dans une region limitee pour chaque fichier !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! … … 494 500 IF (nqtot>=nqo+1) THEN 495 501 ! 496 DO iq=nqo+1,nqtot 497 iiq=niadv(iq) 498 o_trac(iq-nqo) = ctrl_out((/ 1, 5, 5, 5, 10, 10, 11, 11, 11, 11 /), & 499 tname(iiq),'Tracer '//ttext(iiq), "-", & 500 (/ '', '', '', '', '', '', '', '', '', '' /)) 501 o_dtr_vdf(iq-nqo) = ctrl_out((/ 4, 7, 7, 7, 10, 10, 11, 11, 11, 11 /), & 502 'd'//trim(tname(iq))//'_vdf', & 503 'Tendance tracer '//ttext(iiq), "-" , & 504 (/ '', '', '', '', '', '', '', '', '', '' /)) 505 506 o_dtr_the(iq-nqo) = ctrl_out((/ 5, 7, 7, 7, 10, 10, 11, 11, 11, 11 /), & 507 'd'//trim(tname(iq))//'_the', & 508 'Tendance tracer '//ttext(iiq), "-", & 509 (/ '', '', '', '', '', '', '', '', '', '' /)) 510 511 o_dtr_con(iq-nqo) = ctrl_out((/ 5, 7, 7, 7, 10, 10, 11, 11, 11, 11 /), & 512 'd'//trim(tname(iq))//'_con', & 513 'Tendance tracer '//ttext(iiq), "-", & 514 (/ '', '', '', '', '', '', '', '', '', '' /)) 515 516 o_dtr_lessi_impa(iq-nqo) = ctrl_out((/ 7, 7, 7, 7, 10, 10, 11, 11, 11, 11 /), & 517 'd'//trim(tname(iq))//'_lessi_impa', & 518 'Tendance tracer '//ttext(iiq), "-", & 519 (/ '', '', '', '', '', '', '', '', '', '' /)) 520 521 o_dtr_lessi_nucl(iq-nqo) = ctrl_out((/ 7, 7, 7, 7, 10, 10, 11, 11, 11, 11 /), & 522 'd'//trim(tname(iq))//'_lessi_nucl', & 523 'Tendance tracer '//ttext(iiq), "-", & 524 (/ '', '', '', '', '', '', '', '', '', '' /)) 525 526 o_dtr_insc(iq-nqo) = ctrl_out((/ 7, 7, 7, 7, 10, 10, 11, 11, 11, 11 /), & 527 'd'//trim(tname(iq))//'_insc', & 528 'Tendance tracer '//ttext(iiq), "-", & 529 (/ '', '', '', '', '', '', '', '', '', '' /)) 530 531 o_dtr_bcscav(iq-nqo) = ctrl_out((/ 7, 7, 7, 7, 10, 10, 11, 11, 11, 11 /), & 532 'd'//trim(tname(iq))//'_bcscav', & 533 'Tendance tracer '//ttext(iiq), "-", & 534 (/ '', '', '', '', '', '', '', '', '', '' /)) 535 536 o_dtr_evapls(iq-nqo) = ctrl_out((/ 7, 7, 7, 7, 10, 10, 11, 11, 11, 11 /), & 537 'd'//trim(tname(iq))//'_evapls', & 538 'Tendance tracer '//ttext(iiq), "-", & 539 (/ '', '', '', '', '', '', '', '', '', '' /)) 540 541 o_dtr_ls(iq-nqo) = ctrl_out((/ 7, 7, 7, 7, 10, 10, 11, 11, 11, 11 /), & 542 'd'//trim(tname(iq))//'_ls', & 543 'Tendance tracer '//ttext(iiq), "-", & 544 (/ '', '', '', '', '', '', '', '', '', '' /)) 545 546 o_dtr_trsp(iq-nqo) = ctrl_out((/ 7, 7, 7, 7, 10, 10, 11, 11, 11, 11 /), & 547 'd'//trim(tname(iq))//'_trsp', & 548 'Tendance tracer '//ttext(iiq), "-", & 549 (/ '', '', '', '', '', '', '', '', '', '' /)) 550 551 o_dtr_sscav(iq-nqo) = ctrl_out((/ 7, 7, 7, 7, 10, 10, 11, 11, 11, 11 /), & 552 'd'//trim(tname(iq))//'_sscav', & 553 'Tendance tracer '//ttext(iiq), "-", & 554 (/ '', '', '', '', '', '', '', '', '', '' /)) 555 556 o_dtr_sat(iq-nqo) = ctrl_out((/ 7, 7, 7, 7, 10, 10, 11, 11, 11, 11 /), & 557 'd'//trim(tname(iq))//'_sat', & 558 'Tendance tracer '//ttext(iiq), "-", & 559 (/ '', '', '', '', '', '', '', '', '', '' /)) 560 561 o_dtr_uscav(iq-nqo) = ctrl_out((/ 7, 7, 7, 7, 10, 10, 11, 11, 11, 11 /), & 562 'd'//trim(tname(iq))//'_uscav', & 563 'Tendance tracer '//ttext(iiq), "-", & 564 (/ '', '', '', '', '', '', '', '', '', '' /)) 565 566 o_dtr_dry(iq-nqo) = ctrl_out((/ 7, 7, 7, 7, 10, 10, 11, 11, 11, 11 /), & 567 'cum'//'d'//trim(tname(iq))//'_dry', & 568 'tracer tendency dry deposition'//ttext(iiq), "-", & 569 (/ '', '', '', '', '', '', '', '', '', '' /)) 570 571 o_trac_cum(iq-nqo) = ctrl_out((/ 1, 4, 10, 10, 10, 10, 11, 11, 11, 11 /), & 572 'cum'//tname(iiq),& 573 'Cumulated tracer '//ttext(iiq), "-", & 574 (/ '', '', '', '', '', '', '', '', '', '' /)) 575 ENDDO 576 ENDIF 502 DO iq=nqo+1,nqtot 503 iiq=niadv(iq); jq = iq-nqo 504 dn = 'd'//TRIM(tracers(iiq)%name)//'_' 505 506 flag = [1, 5, 5, 5, 10, 10, 11, 11, 11, 11] 507 lnam = 'Tracer '//TRIM(tracers(iiq)%longName) 508 tnam = TRIM(tracers(iiq)%name); o_trac (jq) = ctrl_out(flag, tnam, lnam, "-", [('',i=1,nfiles)]) 509 flag = [4, 7, 7, 7, 10, 10, 11, 11, 11, 11] 510 lnam = 'Tendance tracer '//TRIM(tracers(iiq)%longName) 511 tnam = TRIM(dn)//'vdf'; o_dtr_vdf (jq) = ctrl_out(flag, tnam, lnam, "-", [('',i=1,nfiles)]) 512 513 flag = [5, 7, 7, 7, 10, 10, 11, 11, 11, 11] 514 tnam = TRIM(dn)//'the'; o_dtr_the (jq) = ctrl_out(flag, tnam, lnam, "-", [('',i=1,nfiles)]) 515 tnam = TRIM(dn)//'con'; o_dtr_con (jq) = ctrl_out(flag, tnam, lnam, "-", [('',i=1,nfiles)]) 516 517 flag = [7, 7, 7, 7, 10, 10, 11, 11, 11, 11] 518 tnam = TRIM(dn)//'lessi_impa'; o_dtr_lessi_impa(jq) = ctrl_out(flag, tnam, lnam, "-", [('',i=1,nfiles)]) 519 tnam = TRIM(dn)//'lessi_nucl'; o_dtr_lessi_nucl(jq) = ctrl_out(flag, tnam, lnam, "-", [('',i=1,nfiles)]) 520 tnam = TRIM(dn)//'insc'; o_dtr_insc (jq) = ctrl_out(flag, tnam, lnam, "-", [('',i=1,nfiles)]) 521 tnam = TRIM(dn)//'bcscav'; o_dtr_bcscav (jq) = ctrl_out(flag, tnam, lnam, "-", [('',i=1,nfiles)]) 522 tnam = TRIM(dn)//'evapls'; o_dtr_evapls (jq) = ctrl_out(flag, tnam, lnam, "-", [('',i=1,nfiles)]) 523 tnam = TRIM(dn)//'ls'; o_dtr_ls (jq) = ctrl_out(flag, tnam, lnam, "-", [('',i=1,nfiles)]) 524 tnam = TRIM(dn)//'trsp'; o_dtr_trsp (jq) = ctrl_out(flag, tnam, lnam, "-", [('',i=1,nfiles)]) 525 tnam = TRIM(dn)//'sscav'; o_dtr_sscav (jq) = ctrl_out(flag, tnam, lnam, "-", [('',i=1,nfiles)]) 526 tnam = TRIM(dn)//'sat'; o_dtr_sat (jq) = ctrl_out(flag, tnam, lnam, "-", [('',i=1,nfiles)]) 527 tnam = TRIM(dn)//'uscav'; o_dtr_uscav (jq) = ctrl_out(flag, tnam, lnam, "-", [('',i=1,nfiles)]) 528 529 lnam = 'tracer tendency dry deposition'//TRIM(tracers(iiq)%longName) 530 tnam = 'cum'//TRIM(dn)//'dry'; o_dtr_dry (jq) = ctrl_out(flag, tnam, lnam, "-", [('',i=1,nfiles)]) 531 532 flag = [1, 4, 10, 10, 10, 10, 11, 11, 11, 11] 533 lnam = 'Cumulated tracer '//TRIM(tracers(iiq)%longName) 534 tnam = 'cum'//TRIM(tracers(iiq)%name); o_trac_cum(jq)= ctrl_out(flag, tnam, lnam, "-", [('',i=1,nfiles)]) 535 ENDDO 536 ENDIF 577 537 578 538 ENDDO ! iff … … 594 554 WRITE(lunout,*)'phys_output_open: ends here' 595 555 ENDIF 556 557 ! DO iq=nqo+1,nqtot 558 ! iiq=niadv(iq) 559 ! dn = 'd'//TRIM(tracers(iiq)%name)//'_' 560 ! WRITE(*,'(a,i1,a,10i3)')'trac(',iiq,')%flag = ',o_trac(iiq)%flag 561 ! WRITE(*,'(a,i1,a)')'trac(',iiq,')%tnam = '//TRIM(o_trac(iiq)%name) 562 ! WRITE(*,'(a,i1,a)')'trac(',iiq,')%lnam = '//TRIM(o_trac(iiq)%description) 563 ! END DO 596 564 597 565 END SUBROUTINE phys_output_open -
LMDZ6/trunk/libf/phylmd/phys_output_var_mod.F90
r3987 r4046 5 5 6 6 USE dimphy 7 USE strings_mod, ONLY: maxlen 7 8 ! Variables outputs pour les ecritures des sorties 8 9 !====================================================================== … … 121 122 122 123 TYPE ctrl_out 123 INTEGER ,DIMENSION(nfiles) :: flag124 CHARACTER(len= 20):: name125 CHARACTER(len= 150):: description126 CHARACTER(len= 20):: unit127 CHARACTER(len= 20),DIMENSION(nfiles) :: type_ecrit124 INTEGER :: flag(nfiles) 125 CHARACTER(len=maxlen) :: name 126 CHARACTER(len=maxlen) :: description 127 CHARACTER(len=maxlen) :: unit 128 CHARACTER(len=maxlen) :: type_ecrit(nfiles) 128 129 END TYPE ctrl_out 129 130 -
LMDZ6/trunk/libf/phylmd/phys_output_write_mod.F90
r3956 r4046 25 25 26 26 USE dimphy, ONLY: klon, klev, klevp1 27 USE infotrac_phy, ONLY: nbtr 27 USE infotrac_phy, ONLY: nbtr, nqtot, nqo, type_trac, tracers, niadv 28 USE strings_mod, ONLY: maxlen 28 29 USE mod_phys_lmdz_para, ONLY: is_north_pole_phy,is_south_pole_phy 29 30 USE mod_grid_phy_lmdz, ONLY : nbp_lon, nbp_lat … … 366 367 USE pbl_surface_mod, ONLY: snow 367 368 USE indice_sol_mod, ONLY: nbsrf 368 USE infotrac_phy, ONLY: nqtot, nqo, type_trac, tname, niadv369 369 USE geometry_mod, ONLY: cell_area, latitude_deg, longitude_deg 370 370 USE surface_data, ONLY: type_ocean, version_ocean, ok_veget, landice_opt … … 441 441 INTEGER ISW 442 442 CHARACTER*1 ch1 443 CHARACTER *20 varname443 CHARACTER(LEN=maxlen) :: varname, dn 444 444 445 445 #ifdef CPP_XIOS … … 454 454 455 455 INTEGER :: nqup 456 456 457 457 458 ! On calcul le nouveau tau: … … 512 513 DO iq=nqo+1, nqtot 513 514 iiq=niadv(iq) 514 varname=trim(tname(iiq)) 515 WRITE (lunout,*) 'XIOS var=', nqo, iq, nqtot, varname 515 dn = 'd'//TRIM(tracers(iiq)%name)//'_' 516 WRITE (lunout,*) 'XIOS var=', nqo, iq, nqtot, tracers(iiq)%name 517 518 unt = "kg kg-1" 519 varname=trim(tracers(iiq)%name) 516 520 CALL xios_add_child(group_handle, child, varname) 517 CALL xios_set_attr(child, name=varname, unit="kg kg-1") 518 varname='d'//trim(tname(iiq))//'_vdf' 521 CALL xios_set_attr(child, name=varname, unit=unt) 522 523 unt = "kg kg-1 s-1" 524 varname=TRIM(dn)//'vdf' 519 525 CALL xios_add_child(group_handle, child, varname) 520 CALL xios_set_attr(child, name=varname, unit= "kg kg-1 s-1")521 varname= 'd'//trim(tname(iiq))//'_the'526 CALL xios_set_attr(child, name=varname, unit=unt) 527 varname=TRIM(dn)//'the' 522 528 CALL xios_add_child(group_handle, child, varname) 523 CALL xios_set_attr(child, name=varname, unit= "kg kg-1 s-1")524 varname= 'd'//trim(tname(iiq))//'_con'529 CALL xios_set_attr(child, name=varname, unit=unt) 530 varname=TRIM(dn)//'con' 525 531 CALL xios_add_child(group_handle, child, varname) 526 CALL xios_set_attr(child, name=varname, unit= "kg kg-1 s-1")527 varname= 'd'//trim(tname(iiq))//'_lessi_impa'532 CALL xios_set_attr(child, name=varname, unit=unt) 533 varname=TRIM(dn)//'lessi_impa' 528 534 CALL xios_add_child(group_handle, child, varname) 529 CALL xios_set_attr(child, name=varname, unit= "kg kg-1 s-1")530 varname= 'd'//trim(tname(iiq))//'_lessi_nucl'535 CALL xios_set_attr(child, name=varname, unit=unt) 536 varname=TRIM(dn)//'lessi_nucl' 531 537 CALL xios_add_child(group_handle, child, varname) 532 CALL xios_set_attr(child, name=varname, unit= "kg kg-1 s-1")533 varname= 'd'//trim(tname(iiq))//'_insc'538 CALL xios_set_attr(child, name=varname, unit=unt) 539 varname=TRIM(dn)//'insc' 534 540 CALL xios_add_child(group_handle, child, varname) 535 CALL xios_set_attr(child, name=varname, unit= "kg kg-1 s-1")536 varname= 'd'//trim(tname(iiq))//'_bcscav'541 CALL xios_set_attr(child, name=varname, unit=unt) 542 varname=TRIM(dn)//'bcscav' 537 543 CALL xios_add_child(group_handle, child, varname) 538 CALL xios_set_attr(child, name=varname, unit= "kg kg-1 s-1")539 varname= 'd'//trim(tname(iiq))//'_evapls'544 CALL xios_set_attr(child, name=varname, unit=unt) 545 varname=TRIM(dn)//'evapls' 540 546 CALL xios_add_child(group_handle, child, varname) 541 CALL xios_set_attr(child, name=varname, unit= "kg kg-1 s-1")542 varname= 'd'//trim(tname(iiq))//'_ls'547 CALL xios_set_attr(child, name=varname, unit=unt) 548 varname=TRIM(dn)//'ls' 543 549 CALL xios_add_child(group_handle, child, varname) 544 CALL xios_set_attr(child, name=varname, unit= "kg kg-1 s-1")545 varname= 'd'//trim(tname(iiq))//'_trsp'550 CALL xios_set_attr(child, name=varname, unit=unt) 551 varname=TRIM(dn)//'trsp' 546 552 CALL xios_add_child(group_handle, child, varname) 547 CALL xios_set_attr(child, name=varname, unit= "kg kg-1 s-1")548 varname= 'd'//trim(tname(iiq))//'_sscav'553 CALL xios_set_attr(child, name=varname, unit=unt) 554 varname=TRIM(dn)//'sscav' 549 555 CALL xios_add_child(group_handle, child, varname) 550 CALL xios_set_attr(child, name=varname, unit= "kg kg-1 s-1")551 varname= 'd'//trim(tname(iiq))//'_sat'556 CALL xios_set_attr(child, name=varname, unit=unt) 557 varname=TRIM(dn)//'sat' 552 558 CALL xios_add_child(group_handle, child, varname) 553 CALL xios_set_attr(child, name=varname, unit= "kg kg-1 s-1")554 varname= 'd'//trim(tname(iiq))//'_uscav'559 CALL xios_set_attr(child, name=varname, unit=unt) 560 varname=TRIM(dn)//'uscav' 555 561 CALL xios_add_child(group_handle, child, varname) 556 CALL xios_set_attr(child, name=varname, unit= "kg kg-1 s-1")562 CALL xios_set_attr(child, name=varname, unit=unt) 557 563 ENDDO 558 564 !On ajoute les variables 2D traceurs par l interface fortran … … 561 567 DO iq=nqo+1, nqtot 562 568 iiq=niadv(iq) 563 varname='cum'//trim(tname(iiq)) 569 570 unt = "kg m-2" 571 varname='cum'//trim(tracers(iiq)%name) 564 572 WRITE (lunout,*) 'XIOS var=', iq, nqtot, varname 565 573 CALL xios_add_child(group_handle, child, varname) 566 CALL xios_set_attr(child, name=varname, unit="kg m-2") 567 varname='cumd'//trim(tname(iiq))//'_dry' 574 CALL xios_set_attr(child, name=varname, unit=unt) 575 576 unt = "kg m-2 s-1" 577 varname='cumd'//trim(tracers(iiq)%name)//'_dry' 568 578 CALL xios_add_child(group_handle, child, varname) 569 CALL xios_set_attr(child, name=varname, unit= "kg m-2 s-1")579 CALL xios_set_attr(child, name=varname, unit=unt) 570 580 ENDDO 571 581 ENDIF … … 573 583 #endif 574 584 #endif 585 575 586 ! ug la boucle qui suit ne sert qu'une fois, pour l'initialisation, sinon il n'y a toujours qu'un seul passage: 576 587 DO iinit=1, iinitend … … 600 611 ENDIf 601 612 CALL histwrite_phy(o_aire, zx_tmp_fi2d) 602 603 613 IF (vars_defined) THEN 604 614 DO i=1, klon -
LMDZ6/trunk/libf/phylmd/traclmdz_mod.F90
r3581 r4046 96 96 USE indice_sol_mod 97 97 USE print_control_mod, ONLY: lunout 98 USE strings_mod, ONLY: strLower 98 99 99 100 ! Input variables … … 175 176 !! iiq=niadv(it+2) ! jyg 176 177 iiq=niadv(it+nqo) ! jyg 177 IF ( tname(iiq) == "RN" ) THEN 178 id_rn=it ! radon 179 ELSE IF ( tname(iiq) == "PB") THEN 180 id_pb=it ! plomb 181 ! RomP >>> profil initial de PB210 182 open (ilesfil2,file='prof.pb210',status='old',iostat=irr2) 183 IF (irr2 == 0) THEN 184 read(ilesfil2,*) kradio2 185 print*,'number of levels for pb210 profile ',kradio2 186 do k=kradio2,1,-1 187 read (ilesfil2,*) plomb(:,k) 188 enddo 189 close(ilesfil2) 190 do k=1,klev 191 do i=1,klon 192 tr_seri(i,k,id_pb)=plomb(i,k) 193 !! print*, 'tr_seri',i,k,tr_seri(i,k,id_pb) 194 enddo 195 enddo 196 ELSE 197 print *, 'Prof.pb210 does not exist: use restart values' 198 ENDIF 199 ! RomP <<< 200 ELSE IF ( tname(iiq) == "Aga" .OR. tname(iiq) == "AGA" ) THEN 201 ! Age of stratospheric air 202 id_aga=it 203 radio(id_aga) = .FALSE. 204 aerosol(id_aga) = .FALSE. 205 pbl_flg(id_aga) = 0 206 207 ! Find the first model layer above 1.5km from the surface 208 IF (klev>=30) THEN 209 lev_1p5km=6 ! NB! This value is for klev=39 210 ELSE IF (klev>=10) THEN 211 lev_1p5km=5 ! NB! This value is for klev=19 212 ELSE 213 lev_1p5km=klev/2 214 END IF 215 ELSE IF ( tname(iiq) == "BE" .OR. tname(iiq) == "Be" .OR. & 216 tname(iiq) == "BE7" .OR. tname(iiq) == "Be7" ) THEN 217 ! Recherche du Beryllium 7 218 id_be=it 219 ALLOCATE( srcbe(klon,klev) ) 220 radio(id_be) = .TRUE. 221 aerosol(id_be) = .TRUE. ! le Be est un aerosol 222 !jyg le 13/03/2013 ; ajout de pplay en argument de init_be 223 !!! CALL init_be(pctsrf,masktr(:,id_be),tautr(id_be),vdeptr(id_be),scavtr(id_be),srcbe) 224 CALL init_be(pctsrf,pplay,masktr(:,id_be),tautr(id_be),vdeptr(id_be),scavtr(id_be),srcbe) 225 WRITE(lunout,*) 'Initialisation srcBe: OK' 226 ! RomP >>> profil initial de Be7 227 open (ilesfil,file='prof.be7',status='old',iostat=irr) 228 IF (irr == 0) THEN 229 read(ilesfil,*) kradio 230 print*,'number of levels for Be7 profile ',kradio 231 do k=kradio,1,-1 232 read (ilesfil,*) beryllium(:,k) 233 enddo 234 close(ilesfil) 235 do k=1,klev 236 do i=1,klon 237 tr_seri(i,k,id_be)=beryllium(i,k) 238 !! print*, 'tr_seri',i,k,tr_seri(i,k,id_be) 239 enddo 240 enddo 241 ELSE 242 print *, 'Prof.Be7 does not exist: use restart values' 243 ENDIF 244 ! RomP <<< 245 ELSE IF (tname(iiq)=="O3" .OR. tname(iiq)=="o3") THEN 246 ! Recherche de l'ozone : parametrization de la chimie par Cariolle 247 id_o3=it 248 CALL alloc_coefoz ! allocate ozone coefficients 249 CALL press_coefoz ! read input pressure levels 250 ELSE IF ( tname(iiq) == "pcsat" .OR. tname(iiq) == "Pcsat" ) THEN 251 id_pcsat=it 252 ELSE IF ( tname(iiq) == "pcocsat" .OR. tname(iiq) == "Pcocsat" ) THEN 253 id_pcocsat=it 254 ELSE IF ( tname(iiq) == "pcq" .OR. tname(iiq) == "Pcq" ) THEN 255 id_pcq=it 256 ELSE IF ( tname(iiq) == "pcs0" .OR. tname(iiq) == "Pcs0" ) THEN 257 id_pcs0=it 258 conv_flg(it)=0 ! No transport by convection for this tracer 259 ELSE IF ( tname(iiq) == "pcos0" .OR. tname(iiq) == "Pcos0" ) THEN 260 id_pcos0=it 261 conv_flg(it)=0 ! No transport by convection for this tracer 262 ELSE IF ( tname(iiq) == "pcq0" .OR. tname(iiq) == "Pcq0" ) THEN 263 id_pcq0=it 264 conv_flg(it)=0 ! No transport by convection for this tracer 265 ELSE 266 WRITE(lunout,*) 'This is an unknown tracer in LMDZ : ', trim(tname(iiq)) 267 END IF 178 print*,'###'//TRIM(tracers(iiq)%name)//'###' 179 print*,'###'//TRIM(strLower(tracers(iiq)%name))//'###' 180 SELECT CASE(strLower(tracers(iiq)%name)) 181 CASE("rn"); id_rn = it ! radon 182 CASE("pb"); id_pb = it ! plomb 183 CASE("aga"); id_aga = it ! Age of stratospheric air 184 CASE("be","be7");id_be = it ! Recherche du Beryllium 7 185 CASE("o3"); id_o3 = it ! Recherche de l'ozone 186 CASE("pcsat"); id_pcsat = it 187 CASE("pcocsat"); id_pcocsat= it 188 CASE("pcq"); id_pcq = it 189 CASE("pcs0"); id_pcs0 = it 190 CASE("pcos0"); id_pcos0 = it 191 CASE("pcq0"); id_pcq0 = it 192 CASE DEFAULT 193 WRITE(lunout,*) 'This is an unknown tracer in LMDZ : ', trim(tracers(iiq)%name) 194 END SELECT 195 196 SELECT CASE(strLower(tracers(iiq)%name)) 197 CASE("pb") !--- RomP >>> profil initial de PB210 198 OPEN(ilesfil2,file='prof.pb210',status='old',iostat=irr2) 199 IF(irr2 == 0) THEN 200 READ(ilesfil2,*) kradio2 201 WRITE(lunout,*)'number of levels for pb210 profile ',kradio2 202 DO k=kradio2,1,-1; READ (ilesfil2,*) plomb(:,k); END DO 203 CLOSE(ilesfil2) 204 tr_seri(:,:,id_pb) = plomb(:,:) 205 ELSE 206 WRITE(lunout,*)'Prof. Pb210 does not exist: use restart values' 207 END IF 208 CASE("aga") 209 radio(id_aga) = .FALSE. 210 aerosol(id_aga) = .FALSE. 211 pbl_flg(id_aga) = 0 212 ! Find the first model layer above 1.5km from the surface 213 IF (klev>=30) THEN 214 lev_1p5km=6 !--- NB: This value is for klev=39 215 ELSE IF (klev>=10) THEN 216 lev_1p5km=5 !--- NB: This value is for klev=19 217 ELSE 218 lev_1p5km=klev/2 219 END IF 220 CASE("be","be7") 221 ALLOCATE( srcbe(klon,klev) ) 222 radio(id_be) = .TRUE. 223 aerosol(id_be) = .TRUE. !--- Le Be est un aerosol 224 CALL init_be(pctsrf,pplay,masktr(:,id_be),tautr(id_be),vdeptr(id_be),scavtr(id_be),srcbe) 225 WRITE(lunout,*) 'Initialisation srcBe: OK' 226 !--- RomP >>> profil initial de Be7 227 OPEN(ilesfil,file='prof.be7',status='old',iostat=irr) 228 IF(irr == 0) THEN 229 READ(ilesfil,*) kradio 230 WRITE(lunout,*)'number of levels for Be7 profile ',kradio 231 DO k=kradio,1,-1; READ(ilesfil,*) beryllium(:,k); END DO 232 CLOSE(ilesfil) 233 tr_seri(:,:,id_be)=beryllium(:,:) 234 ELSE 235 WRITE(lunout,*)'Prof. Be7 does not exist: use restart values' 236 END IF 237 CASE("o3") !--- Parametrisation par la chimie de Cariolle 238 CALL alloc_coefoz !--- Allocate ozone coefficients 239 CALL press_coefoz !--- Read input pressure levels 240 CASE("pcs0","pcos0","pcq0") 241 conv_flg(it)=0 !--- No transport by convection for this tracer 242 END SELECT 268 243 END DO 269 244 … … 309 284 IF (zero) THEN 310 285 ! The tracer was not found in restart file or it was equal zero everywhere. 311 WRITE(lunout,*) "The tracer ",trim(t name(iiq))," will be initialized"286 WRITE(lunout,*) "The tracer ",trim(tracers(iiq)%name)," will be initialized" 312 287 IF (it==id_pcsat .OR. it==id_pcq .OR. & 313 288 it==id_pcs0 .OR. it==id_pcq0) THEN
Note: See TracChangeset
for help on using the changeset viewer.