Changeset 4056 for LMDZ6/trunk/libf/phylmd/Dust
- Timestamp:
- Jan 12, 2022, 10:54:09 PM (3 years ago)
- Location:
- LMDZ6/trunk/libf/phylmd/Dust
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
LMDZ6/trunk/libf/phylmd/Dust/phys_output_write_spl_mod.F90
r3805 r4056 381 381 USE pbl_surface_mod, ONLY: snow 382 382 USE indice_sol_mod, ONLY: nbsrf 383 USE infotrac, ONLY: nqtot, n qo, nbtr, type_trac383 USE infotrac, ONLY: nqtot, nbtr, type_trac 384 384 USE geometry_mod, ONLY: cell_area 385 385 USE surface_data, ONLY: type_ocean, version_ocean, ok_veget, landice_opt … … 430 430 INTEGER, PARAMETER :: jjmp1=jjm+1-1/jjm 431 431 INTEGER :: itau_w 432 INTEGER :: i, iinit, iinitend=1, iff, iq, nsrf, k, ll, naero432 INTEGER :: i, iinit, iinitend=1, iff, iq, itr, nsrf, k, ll, naero 433 433 REAL, DIMENSION (klon) :: zx_tmp_fi2d 434 434 REAL, DIMENSION (klon,klev) :: zx_tmp_fi3d, zpt_conv … … 1610 1610 #endif 1611 1611 !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 1612 IF (nqtot.GE.nqo+1) THEN 1613 !AS: type_trac = 'lmdz' par defaut dans libf/dyn3d/conf_gcm.F90 1614 !Changé par inca, repr(obus), coag(ulation), co2i(nteractif), PAS par SPLA 1615 !Cet "if" est donc inutile : IF (type_trac == 'lmdz' .OR. type_trac == 'repr') THEN 1616 DO iq=nqo+1,nqtot 1617 CALL histwrite_phy(o_trac(iq-nqo), tr_seri(:,:,iq-nqo)) 1618 CALL histwrite_phy(o_dtr_vdf(iq-nqo),d_tr_cl(:,:,iq-nqo)) 1619 CALL histwrite_phy(o_dtr_the(iq-nqo),d_tr_th(:,:,iq-nqo)) 1620 CALL histwrite_phy(o_dtr_con(iq-nqo),d_tr_cv(:,:,iq-nqo)) 1621 CALL histwrite_phy(o_dtr_lessi_impa(iq-nqo),d_tr_lessi_impa(:,:,iq-nqo)) 1622 CALL histwrite_phy(o_dtr_lessi_nucl(iq-nqo),d_tr_lessi_nucl(:,:,iq-nqo)) 1623 CALL histwrite_phy(o_dtr_insc(iq-nqo),d_tr_insc(:,:,iq-nqo)) 1624 CALL histwrite_phy(o_dtr_bcscav(iq-nqo),d_tr_bcscav(:,:,iq-nqo)) 1625 CALL histwrite_phy(o_dtr_evapls(iq-nqo),d_tr_evapls(:,:,iq-nqo)) 1626 CALL histwrite_phy(o_dtr_ls(iq-nqo),d_tr_ls(:,:,iq-nqo)) 1627 ! CALL histwrite_phy(o_dtr_dyn(iq-nqo),d_tr_dyn(:,:,iq-nqo)) 1628 ! CALL histwrite_phy(o_dtr_cl(iq-nqo),d_tr_cl(:,:,iq-nqo)) 1629 CALL histwrite_phy(o_dtr_trsp(iq-nqo),d_tr_trsp(:,:,iq-nqo)) 1630 CALL histwrite_phy(o_dtr_sscav(iq-nqo),d_tr_sscav(:,:,iq-nqo)) 1631 CALL histwrite_phy(o_dtr_sat(iq-nqo),d_tr_sat(:,:,iq-nqo)) 1632 CALL histwrite_phy(o_dtr_uscav(iq-nqo),d_tr_uscav(:,:,iq-nqo)) 1612 itr = 0 1613 DO iq = 1, nqtot 1614 IF(tracers(iq)%isH2Ofamily) CYCLE 1615 itr = itr+1 1616 CALL histwrite_phy(o_trac(itr), tr_seri(:,:,itr)) 1617 CALL histwrite_phy(o_dtr_vdf(itr),d_tr_cl(:,:,itr)) 1618 CALL histwrite_phy(o_dtr_the(itr),d_tr_th(:,:,itr)) 1619 CALL histwrite_phy(o_dtr_con(itr),d_tr_cv(:,:,itr)) 1620 CALL histwrite_phy(o_dtr_lessi_impa(itr),d_tr_lessi_impa(:,:,itr)) 1621 CALL histwrite_phy(o_dtr_lessi_nucl(itr),d_tr_lessi_nucl(:,:,itr)) 1622 CALL histwrite_phy(o_dtr_insc(itr),d_tr_insc(:,:,itr)) 1623 CALL histwrite_phy(o_dtr_bcscav(itr),d_tr_bcscav(:,:,itr)) 1624 CALL histwrite_phy(o_dtr_evapls(itr),d_tr_evapls(:,:,itr)) 1625 CALL histwrite_phy(o_dtr_ls(itr),d_tr_ls(:,:,itr)) 1626 ! CALL histwrite_phy(o_dtr_dyn(itr),d_tr_dyn(:,:,itr)) 1627 ! CALL histwrite_phy(o_dtr_cl(itr),d_tr_cl(:,:,itr)) 1628 CALL histwrite_phy(o_dtr_trsp(itr),d_tr_trsp(:,:,itr)) 1629 CALL histwrite_phy(o_dtr_sscav(itr),d_tr_sscav(:,:,itr)) 1630 CALL histwrite_phy(o_dtr_sat(itr),d_tr_sat(:,:,itr)) 1631 CALL histwrite_phy(o_dtr_uscav(itr),d_tr_uscav(:,:,itr)) 1633 1632 zx_tmp_fi2d=0. 1634 1633 IF (vars_defined) THEN 1635 1634 DO k=1,klev 1636 zx_tmp_fi2d(:)=zx_tmp_fi2d(:)+zmasse(:,k)*tr_seri(:,k,i q-nqo)1635 zx_tmp_fi2d(:)=zx_tmp_fi2d(:)+zmasse(:,k)*tr_seri(:,k,itr) 1637 1636 ENDDO 1638 1637 ENDIF 1639 CALL histwrite_phy(o_trac_cum(i q-nqo), zx_tmp_fi2d)1638 CALL histwrite_phy(o_trac_cum(itr), zx_tmp_fi2d) 1640 1639 ENDDO 1641 !ENDIF1642 ENDIF1643 1640 1644 1641 IF (.NOT.vars_defined) THEN -
LMDZ6/trunk/libf/phylmd/Dust/phytracr_spl_mod.F90
r4046 r4056 1104 1104 REAL, intent(in) :: rlon(klon) ! longitudes pour chaque point 1105 1105 ! 1106 INTEGER i, k, i t, j, ig1106 INTEGER i, k, iq, itr, j, ig 1107 1107 ! 1108 1108 ! DEFINITION OF DIAGNOSTIC VARIABLES … … 1260 1260 1261 1261 #ifdef IOPHYS_DUST 1262 do it=1,nbtr 1263 write(str2,'(i2.2)') it 1264 call iophys_ecrit('TRA'//str2,klev,'SOURCE','',tr_seri(:,:,it)) 1262 itr = 0 1263 DO iq = 1, nqtot 1264 IF(tracers(iq)%isH2Ofamily) CYCLE 1265 itr = itr+1 1266 write(str2,'(i2.2)') itr 1267 call iophys_ecrit('TRA'//str2,klev,'SOURCE','',tr_seri(:,:,itr)) 1265 1268 enddo 1266 1269 #endif … … 1414 1417 id_codu=-1 1415 1418 id_scdu=-1 1416 !print *,nbtr 1417 do it=1,nbtr 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 1426 enddo 1427 ! check consistency with dust emission scheme: 1428 if (ok_chimeredust) then 1419 itr = 0 1420 do iq=1,nqtot 1421 IF(tracers(iq)%isH2Ofamily) CYCLE 1422 itr = itr+1 1423 print *, itr, TRIM(tracers(iq)%name) 1424 SELECT CASE(tracers(iq)%name) 1425 CASE('PREC'); id_prec=itr 1426 CASE('FINE'); id_fine=itr 1427 CASE('COSS'); id_coss=itr 1428 CASE('CODU'); id_codu=itr 1429 CASE('SCDU'); id_scdu=itr 1430 END SELECT 1431 enddo 1432 ! check consistency with dust emission scheme: 1433 if (ok_chimeredust) then 1429 1434 if (.not.( id_scdu>0 .and. id_codu>0 .and. id_fine>0)) then 1430 1435 call abort_gcm('phytracr_mod', 'pb in ok_chimdust 0',1) 1431 1436 endif 1432 else1437 else 1433 1438 if (id_scdu>0) then 1434 1439 call abort_gcm('phytracr_mod', 'pb in ok_chimdust 1 SCDU',1) … … 1560 1565 ! JE before put in zero 1561 1566 IF (lminmax) THEN 1562 DO it =1,nbtr1563 CALL checknanqfi(tr_seri(:,:,it ),qmin,qmax,'nan init phytracr')1564 ENDDO 1565 DO it =1,nbtr1566 CALL minmaxqfi2(tr_seri(:,:,it ),qmin,qmax,'minmax init phytracr')1567 DO itr=1,nbtr 1568 CALL checknanqfi(tr_seri(:,:,itr),qmin,qmax,'nan init phytracr') 1569 ENDDO 1570 DO itr=1,nbtr 1571 CALL minmaxqfi2(tr_seri(:,:,itr),qmin,qmax,'minmax init phytracr') 1567 1572 ENDDO 1568 1573 CALL minmaxsource(source_tr,qmin,qmax,'maxsource init phytracr') -
LMDZ6/trunk/libf/phylmd/Dust/splaeropt_5wv_rrtm.F90
r4046 r4056 9 9 USE DIMPHY 10 10 USE aero_mod 11 USE infotrac_phy 11 USE infotrac_phy, ONLY: nqtot, nbtr, tracers 12 12 USE phys_local_var_mod, ONLY: od550aer,od865aer,ec550aer,od550lt1aer 13 13 ! … … 34 34 LOGICAL :: soluble 35 35 36 INTEGER :: i, k, m, i tr, irh, aerindex36 INTEGER :: i, k, m, iq, itr, irh, aerindex 37 37 INTEGER :: spsol, spinsol, la 38 38 INTEGER :: RH_num(klon,klev) … … 112 112 ENDDO 113 113 114 DO itr=1,nbtr !--loop over tracers 115 SELECT CASE(tracers(itr+nqo)%name) 114 itr = 0 115 DO iq = 1, nqtot 116 IF(tracers(iq)%isH2Ofamily) CYCLE 117 itr = itr+1 118 SELECT CASE(tracers(iq)%name) 116 119 CASE('PREC'); CYCLE !--precursor 117 120 CASE('FINE'); soluble=.TRUE.; spsol=1; aerindex=1 !--fine mode accumulation mode … … 119 122 CASE('CODU'); soluble=.FALSE.; spsol=1; aerindex=3 !--coarse mode dust 120 123 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(i tr+nqo)%name,1)124 CASE DEFAULT; CALL abort_physic(modname,'I cannot do aerosol optics for '//tracers(iq)%name,1) 122 125 END SELECT 123 126 -
LMDZ6/trunk/libf/phylmd/Dust/splaeropt_6bands_rrtm.F90
r4046 r4056 8 8 USE dimphy 9 9 USE aero_mod 10 USE infotrac_phy 10 USE infotrac_phy, ONLY: nqtot, nbtr, tracers 11 11 USE phys_local_var_mod, ONLY: abs550aer 12 12 … … 35 35 ! 36 36 LOGICAL :: soluble 37 INTEGER :: i, k, irh, i tr, inu37 INTEGER :: i, k, irh, iq, itr, inu 38 38 INTEGER :: aerindex, spsol, spinsol 39 39 INTEGER :: RH_num(klon,klev) … … 165 165 cg_ae(:,:,:,:)=0. 166 166 167 DO itr=1,nbtr !--loop over tracers 168 SELECT CASE(tracers(itr+nqo)%name) 167 itr = 0 168 DO iq = 1, nqtot 169 IF(tracers(iq)%isH2Ofamily) CYCLE 170 itr = itr+1 171 SELECT CASE(tracers(iq)%name) 169 172 CASE('PREC'); CYCLE !--precursor 170 173 CASE('FINE'); soluble=.TRUE.; spsol=1; aerindex=1 !--fine mode accumulation mode … … 172 175 CASE('CODU'); soluble=.FALSE.; spsol=1; aerindex=3 !--coarse mode dust 173 176 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(i tr+nqo)%name,1)177 CASE DEFAULT; CALL abort_physic(modname,'I cannot do aerosol optics for '//tracers(iq)%name,1) 175 178 END SELECT 176 179 -
LMDZ6/trunk/libf/phylmd/Dust/splaeropt_lw_rrtm.F90
r4046 r4056 10 10 USE dimphy 11 11 USE aero_mod 12 USE infotrac_phy 12 USE infotrac_phy, ONLY: nqtot, nbtr, tracers 13 13 USE phys_state_var_mod, ONLY : tau_aero_lw_rrtm 14 14 USE YOERAD, ONLY : NLW … … 30 30 INTEGER, PARAMETER :: naero=naero_soluble+naero_insoluble 31 31 ! 32 INTEGER inu, itr, spinsol32 INTEGER inu, itr, iq, spinsol 33 33 CHARACTER*20 modname 34 34 ! … … 54 54 tau_aero_lw_rrtm = 0.0 55 55 ! 56 DO itr=1,nbtr 57 SELECT CASE(tracers(itr+nqo)%name) 58 CASE('PREC','FINE''COSS'); CYCLE !--precursor or fine/coarde accumulation mode 56 57 itr = 0 58 DO iq = 1, nqtot 59 IF(tracers(iq)%isH2Ofamily) CYCLE 60 itr = itr+1 61 SELECT CASE(tracers(iq)%name) 62 CASE('PREC','FINE','COSS'); CYCLE !--precursor or fine/coarde accumulation mode 59 63 CASE('CODU'); spinsol=1 !--coarse mode dust 60 64 CASE('SCDU'); spinsol=2 !--super coarse mode dust 61 CASE DEFAULT; CALL abort_physic(modname,'I cannot do aerosol optics for '//tracers(i tr+nqo)%name,1)65 CASE DEFAULT; CALL abort_physic(modname,'I cannot do aerosol optics for '//tracers(iq)%name,1) 62 66 END SELECT 63 67 ! -
LMDZ6/trunk/libf/phylmd/Dust/splaerosol_optic_rrtm.F90
r4046 r4056 13 13 USE dimphy 14 14 USE aero_mod 15 USE infotrac_phy 15 USE infotrac_phy, ONLY: nbtr, nqtot, tracers 16 16 USE YOMCST, ONLY: RD, RG 17 17 … … 40 40 REAL, DIMENSION(klon,klev,nwave,naero_tot), INTENT(OUT) :: tau3d_aero 41 41 42 INTEGER i, k, i tr42 INTEGER i, k, iq, itr 43 43 REAL, DIMENSION(klon,klev) :: zdm, zdh 44 44 REAL zrho, pdel … … 50 50 mass_solu_aero_pi(:,:) = 0.0 51 51 ! 52 DO itr=1,nbtr 53 IF (tracers(itr+nqo)%name=='FINE') THEN 52 itr = 0 53 DO iq = 1, nqtot 54 IF(tracers(iq)%isH2Ofamily) CYCLE 55 itr = itr+1 56 IF(tracers(iq)%name/='FINE') THEN 54 57 mass_solu_aero(:,:) = tr_seri(:,:,itr) 55 58 mass_solu_aero_pi(:,:) = tr_seri(:,:,itr)
Note: See TracChangeset
for help on using the changeset viewer.