diff --git a/src/MNH/ch_aer_init_soa.f90 b/src/MNH/ch_aer_init_soa.f90 index d67ef880ab81b7119ba0ae74ab8826e688491c0b..0dbc529a95bd07abd996b37f90dfa681ef299cf7 100644 --- a/src/MNH/ch_aer_init_soa.f90 +++ b/src/MNH/ch_aer_init_soa.f90 @@ -43,7 +43,7 @@ END MODULE MODI_CH_AER_INIT_SOA !! !! MODIFICATIONS !! ------------- -!! none +!! 24/24/14 M. Leriche add ReLACS3 !! !! EXTERNAL !! -------- @@ -82,10 +82,12 @@ DO JN=1, SIZE(CNAMES) IF (TRIM(CNAMES(JN)) .EQ. "ALKA") CCH_SCHEME = "RELACS" IF (TRIM(CNAMES(JN)) .EQ. "HC3") CCH_SCHEME = "RACM" IF (TRIM(CNAMES(JN)) .EQ. "URG1") CCH_SCHEME = "RELACS2" - IF (TRIM(CNAMES(JN)) .EQ. "UR21") CCH_SCHEME = "CACM" + IF (TRIM(CNAMES(JN)) .EQ. "GLY") CCH_SCHEME = "RELACS3" + IF (TRIM(CNAMES(JN)) .EQ. "UR29") CCH_SCHEME = "CACM" ENDDO IF (((TRIM(CORGANIC)=="MPMPO").OR.(TRIM(CORGANIC)=="PUN")).AND.& - ((CCH_SCHEME == "RELACS2" .OR. CCH_SCHEME == "CACM"))) THEN + ((CCH_SCHEME == "RELACS2" .OR. CCH_SCHEME == "CACM" & + .OR. CCH_SCHEME == "RELACS3"))) THEN NSOA = 10 ELSE NSOA = 0 ! No SOA formation diff --git a/src/MNH/ch_aer_trans.f90 b/src/MNH/ch_aer_trans.f90 index a0f5724dae5fecec7bf666eaf74e39609f330f7d..d8844d117baa87b4a65456a4af08737169242bb2 100644 --- a/src/MNH/ch_aer_trans.f90 +++ b/src/MNH/ch_aer_trans.f90 @@ -14,8 +14,8 @@ !! INTERFACE !! -SUBROUTINE CH_AER_TRANS(KDIR, PM, PSIG0, PRG0, PN0, PRHOP0, PAERO,& - PCONC, PCTOTG, PCTOTA, PCCTOT,PFRAC,PMI,PMASK,GSCHEME) +SUBROUTINE CH_AER_TRANS(KDIR, PM, PSIG0, PRG0, PN0, PRHOP0, PAERO, & + PCONC, PCTOTG, PCTOTA, PCCTOT,PFRAC,PMI,PMASK,HSCHEME) IMPLICIT NONE @@ -29,7 +29,7 @@ REAL, DIMENSION(:,:), INTENT(INOUT) :: PAERO REAL, DIMENSION(:,:), INTENT(INOUT) :: PFRAC REAL, DIMENSION(:,:), INTENT(INOUT) :: PMI REAL, DIMENSION(:,:), INTENT(INOUT) :: PMASK -CHARACTER(LEN=10), INTENT(IN) :: GSCHEME +CHARACTER(LEN=10), INTENT(IN) :: HSCHEME END SUBROUTINE CH_AER_TRANS !! @@ -37,10 +37,10 @@ END INTERFACE !! END MODULE MODI_CH_AER_TRANS !! -!! ############################################################ - SUBROUTINE CH_AER_TRANS(KDIR, PM, PSIG0, PRG0, PN0, PRHOP0, PAERO,& - PCONC, PCTOTG, PCTOTA, PCCTOT,PFRAC,PMI,PMASK,GSCHEME) -!! ############################################################ +!! ####################################################################### + SUBROUTINE CH_AER_TRANS(KDIR, PM, PSIG0, PRG0, PN0, PRHOP0, PAERO, & + PCONC, PCTOTG, PCTOTA, PCCTOT,PFRAC,PMI,PMASK,HSCHEME) +!! ####################################################################### !! !! PURPOSE !! ------- @@ -60,6 +60,8 @@ END MODULE MODI_CH_AER_TRANS !! P .Tulet * add biogenics and BC !! P .Tulet * stability of moments !! P .Tulet * add SOA for AER and MPMPO +!! A. Berger * correct the treatment of H2SO4 g +!! M. Leriche * add ReLACS3 !! !! EXTERNAL !! -------- @@ -87,7 +89,7 @@ REAL, DIMENSION(:,:), INTENT(INOUT) :: PAERO REAL, DIMENSION(:,:), INTENT(INOUT) :: PFRAC REAL, DIMENSION(:,:), INTENT(INOUT) :: PMI REAL, DIMENSION(:,:), INTENT(INOUT) :: PMASK -CHARACTER(LEN=10), INTENT(IN) :: GSCHEME +CHARACTER(LEN=10), INTENT(IN) :: HSCHEME ! ! @@ -174,7 +176,7 @@ PAERO(:,:) = MAX(PAERO(:,:), XMNH_TINY) IF (NSOA .EQ. 10) THEN IF (TRIM(CORGANIC) == 'PUN') THEN - IF (GSCHEME == "RELACS2") THEN ! ReLACS2 scheme + IF (HSCHEME == "RELACS2") THEN ! ReLACS2 scheme PCTOTG(:,JP_AER_SOA1) = PCONC(:,JP_CH_URG1)*XURG1/ZCSTAVOG PFRAC(:,JP_CH_URG1) = 1. PMI(:,JP_AER_SOA1) = PFRAC(:,JP_CH_URG1) * XURG1 @@ -253,7 +255,91 @@ IF (TRIM(CORGANIC) == 'PUN') THEN PFRAC(:,JP_CH_UR7) *XUR7 + & PFRAC(:,JP_CH_UR8) *XUR8 + & PFRAC(:,JP_CH_PAN8) *XPAN8 - ELSE ! CACM scheme +! + ELSE IF (HSCHEME == "RELACS3") THEN !ReLACS3 scheme + PCTOTG(:,JP_AER_SOA1) = PCONC(:,JP_CH_UR21)*XUR21/ZCSTAVOG + & + PCONC(:,JP_CH_UR28)*XUR28/ZCSTAVOG + PFRAC(:,JP_CH_UR21) = PCONC(:,JP_CH_UR21) *XUR21/ZCSTAVOG / PCTOTG(:,JP_AER_SOA1) + PFRAC(:,JP_CH_UR28) = PCONC(:,JP_CH_UR28) *XUR28/ZCSTAVOG / PCTOTG(:,JP_AER_SOA1) + PMI(:,JP_AER_SOA1) = PFRAC(:,JP_CH_UR21) * XUR21 + & + PFRAC(:,JP_CH_UR28) * XUR28 + + PCTOTG(:,JP_AER_SOA2) = PCONC(:,JP_CH_URG2) *XURG2/ZCSTAVOG +& + PCONC(:,JP_CH_RPG2)*XRPG2/ZCSTAVOG +& + PCONC(:,JP_CH_RP18)*XRP18/ZCSTAVOG + PFRAC(:,JP_CH_URG2) = PCONC(:,JP_CH_URG2) *XURG2/ZCSTAVOG / PCTOTG(:,JP_AER_SOA2) + PFRAC(:,JP_CH_RPG2) = PCONC(:,JP_CH_RPG2) *XRPG2/ZCSTAVOG / PCTOTG(:,JP_AER_SOA2) + PFRAC(:,JP_CH_RP18) = PCONC(:,JP_CH_RP18) *XRP18/ZCSTAVOG / PCTOTG(:,JP_AER_SOA2) + PMI(:,JP_AER_SOA2) = PFRAC(:,JP_CH_URG2) * XURG2 + & + PFRAC(:,JP_CH_RPG2) * XRPG2 + & + PFRAC(:,JP_CH_RP18) * XRP18 + + + PCTOTG(:,JP_AER_SOA3) = PCONC(:,JP_CH_RPG3)*XRPG3/ZCSTAVOG + PFRAC(:,JP_CH_RPG3) = 1. + PMI(:,JP_AER_SOA3) = PFRAC(:,JP_CH_RPG3) * XRPG3 + + PCTOTG(:,JP_AER_SOA4) = PCONC(:,JP_CH_URG4)*XURG4/ZCSTAVOG + PFRAC(:,JP_CH_URG4) = 1. + PMI(:,JP_AER_SOA4) = PFRAC(:,JP_CH_URG4) * XURG4 + + PCTOTG(:,JP_AER_SOA5) = PCONC(:,JP_CH_UR17) *XUR17/ZCSTAVOG +& + PCONC(:,JP_CH_RPR3)*XRPR3/ZCSTAVOG +& + PCONC(:,JP_CH_AP7) *XAP7/ZCSTAVOG + PFRAC(:,JP_CH_UR17) = PCONC(:,JP_CH_UR17) *XUR17/ZCSTAVOG / PCTOTG(:,JP_AER_SOA5) + PFRAC(:,JP_CH_RPR3) = PCONC(:,JP_CH_RPR3) *XRPR3/ZCSTAVOG / PCTOTG(:,JP_AER_SOA5) + PFRAC(:,JP_CH_AP7) = PCONC(:,JP_CH_AP7) *XAP7/ZCSTAVOG / PCTOTG(:,JP_AER_SOA5) + PMI(:,JP_AER_SOA5) = PFRAC(:,JP_CH_UR17) *XUR17 + & + PFRAC(:,JP_CH_RPR3) *XRPR3 + & + PFRAC(:,JP_CH_AP7) *XAP7 + + PCTOTG(:,JP_AER_SOA6) = PCONC(:,JP_CH_URG6) *XURG6/ZCSTAVOG +& + PCONC(:,JP_CH_UR22) *XUR22/ZCSTAVOG + PFRAC(:,JP_CH_URG6) = PCONC(:,JP_CH_URG6) *XURG6/ZCSTAVOG / PCTOTG(:,JP_AER_SOA6) + PFRAC(:,JP_CH_UR22) = PCONC(:,JP_CH_UR22)*XUR22/ZCSTAVOG / PCTOTG(:,JP_AER_SOA6) + PMI(:,JP_AER_SOA6) = PFRAC(:,JP_CH_URG6) *XURG6 + & + PFRAC(:,JP_CH_UR22) *XUR22 + + PCTOTG(:,JP_AER_SOA7) = PCONC(:,JP_CH_URG7) *XURG7/ZCSTAVOG +& + PCONC(:,JP_CH_RPR4)*XRPR4/ZCSTAVOG +& + PCONC(:,JP_CH_RPR7)*XRPR7/ZCSTAVOG +& + PCONC(:,JP_CH_RPG7)*XRPG7/ZCSTAVOG + + PFRAC(:,JP_CH_URG7) = PCONC(:,JP_CH_URG7) *XURG7/ZCSTAVOG / PCTOTG(:,JP_AER_SOA7) + PFRAC(:,JP_CH_RPR4) = PCONC(:,JP_CH_RPR4) *XRPR4/ZCSTAVOG / PCTOTG(:,JP_AER_SOA7) + PFRAC(:,JP_CH_RPR7) = PCONC(:,JP_CH_RPR7) *XRPR7/ZCSTAVOG / PCTOTG(:,JP_AER_SOA7) + PFRAC(:,JP_CH_RPG7) = PCONC(:,JP_CH_RPG7) *XRPG7/ZCSTAVOG / PCTOTG(:,JP_AER_SOA7) + PMI(:,JP_AER_SOA7) = PFRAC(:,JP_CH_URG7) * XURG7 + & + PFRAC(:,JP_CH_RPR4) * XRPR4 + & + PFRAC(:,JP_CH_RPR7) * XRPR7 + & + PFRAC(:,JP_CH_RPG7)* XRPG7 + + PCTOTG(:,JP_AER_SOA8) = PCONC(:,JP_CH_URG8) *XURG8/ZCSTAVOG + PFRAC(:,JP_CH_URG8) = 1. + PMI(:,JP_AER_SOA8) = PFRAC(:,JP_CH_URG8) *XURG8 + + PCTOTG(:,JP_AER_SOA9) = PCONC(:,JP_CH_URG9) *XURG9/ZCSTAVOG +& + PCONC(:,JP_CH_UR26) *XUR26/ZCSTAVOG + PFRAC(:,JP_CH_URG9) = PCONC(:,JP_CH_URG9) *XURG9/ZCSTAVOG / PCTOTG(:,JP_AER_SOA9) + PFRAC(:,JP_CH_UR26) = PCONC(:,JP_CH_UR26) *XUR26/ZCSTAVOG / PCTOTG(:,JP_AER_SOA9) + PMI(:,JP_AER_SOA9) = PFRAC(:,JP_CH_URG9)*XURG9 + & + PFRAC(:,JP_CH_UR26)*XUR26 + + + PCTOTG(:,JP_AER_SOA10) = PCONC(:,JP_CH_URG10)*XURG10/ZCSTAVOG +& + PCONC(:,JP_CH_UR7) *XUR7/ZCSTAVOG +& + PCONC(:,JP_CH_UR8) *XUR8/ZCSTAVOG +& + PCONC(:,JP_CH_PAN8) *XPAN8/ZCSTAVOG + PFRAC(:,JP_CH_URG10)= PCONC(:,JP_CH_URG10)*XURG10/ZCSTAVOG / PCTOTG(:,JP_AER_SOA10) + PFRAC(:,JP_CH_UR7) = PCONC(:,JP_CH_UR7) *XUR7/ZCSTAVOG / PCTOTG(:,JP_AER_SOA10) + PFRAC(:,JP_CH_UR8) = PCONC(:,JP_CH_UR8) *XUR8/ZCSTAVOG / PCTOTG(:,JP_AER_SOA10) + PFRAC(:,JP_CH_PAN8) = PCONC(:,JP_CH_PAN8) *XPAN8/ZCSTAVOG / PCTOTG(:,JP_AER_SOA10) + PMI(:,JP_AER_SOA10) = PFRAC(:,JP_CH_URG10)*XURG10 + & + PFRAC(:,JP_CH_UR7) *XUR7 + & + PFRAC(:,JP_CH_UR8) *XUR8 + & + PFRAC(:,JP_CH_PAN8) *XPAN8 +! + ELSE ! CACM scheme PCTOTG(:,JP_AER_SOA1) = PCONC(:,JP_CH_UR21)*XUR21/ZCSTAVOG + & PCONC(:,JP_CH_UR28)*XUR28/ZCSTAVOG PFRAC(:,JP_CH_UR21) = PCONC(:,JP_CH_UR21) *XUR21/ZCSTAVOG / PCTOTG(:,JP_AER_SOA1) @@ -386,10 +472,10 @@ IF (TRIM(CORGANIC) == 'PUN') THEN PFRAC(:,JP_CH_AP8) *XAP8 + & PFRAC(:,JP_CH_PAN8) *XPAN8 - END IF + END IF END IF IF (TRIM(CORGANIC) == 'MPMPO') THEN - IF (GSCHEME == "RELACS2") THEN ! ReLACS2 scheme + IF (HSCHEME == "RELACS2") THEN ! ReLACS2 scheme PCTOTG(:,JP_AER_SOA1) = PCONC(:,JP_CH_URG6)*XURG6/ZCSTAVOG PFRAC(:,JP_CH_URG6) = 1. PMI(:,JP_AER_SOA1) = PFRAC(:,JP_CH_URG6) * XURG6 @@ -454,10 +540,77 @@ IF (TRIM(CORGANIC) == 'MPMPO') THEN PFRAC(:,JP_CH_UR17) = PCONC(:,JP_CH_UR17) *XUR17/ZCSTAVOG / PCTOTG(:,JP_AER_SOA10) PMI(:,JP_AER_SOA10) = PFRAC(:,JP_CH_UR7)*XUR7 + & PFRAC(:,JP_CH_UR17)*XUR17 +! + ELSE IF (HSCHEME == "RELACS3") THEN ! ReLACS3 scheme + PCTOTG(:,JP_AER_SOA1) = PCONC(:,JP_CH_URG6)*XURG6/ZCSTAVOG + PFRAC(:,JP_CH_URG6) = 1. + PMI(:,JP_AER_SOA1) = PFRAC(:,JP_CH_URG6) * XURG6 + PCTOTG(:,JP_AER_SOA2) = PCONC(:,JP_CH_URG7) *XURG7/ZCSTAVOG +& + PCONC(:,JP_CH_RPG7)*XRPG7/ZCSTAVOG +& + PCONC(:,JP_CH_RPR7)*XRPR7/ZCSTAVOG + PFRAC(:,JP_CH_URG7) = PCONC(:,JP_CH_URG7) *XURG7/ZCSTAVOG / PCTOTG(:,JP_AER_SOA2) + PFRAC(:,JP_CH_RPG7) = PCONC(:,JP_CH_RPG7) *XRPG7/ZCSTAVOG / PCTOTG(:,JP_AER_SOA2) + PFRAC(:,JP_CH_RPR7) = PCONC(:,JP_CH_RPR7) *XRPR7/ZCSTAVOG / PCTOTG(:,JP_AER_SOA2) + PMI(:,JP_AER_SOA2) = PFRAC(:,JP_CH_URG7) * XURG7 + & + PFRAC(:,JP_CH_RPG7) * XRPG7 + & + PFRAC(:,JP_CH_RPR7) * XRPR7 - ELSE ! CACM scheme + PCTOTG(:,JP_AER_SOA3) = PCONC(:,JP_CH_URG8)*XURG8/ZCSTAVOG + PFRAC(:,JP_CH_URG8) = 1. + PMI(:,JP_AER_SOA3) = PFRAC(:,JP_CH_URG8) * XURG8 + + PCTOTG(:,JP_AER_SOA4) = PCONC(:,JP_CH_URG9)*XURG9/ZCSTAVOG + PFRAC(:,JP_CH_URG9) = PCONC(:,JP_CH_URG9) *XURG9/ZCSTAVOG / PCTOTG(:,JP_AER_SOA4) + PMI(:,JP_AER_SOA4) = PFRAC(:,JP_CH_URG9) * XURG9 + PCTOTG(:,JP_AER_SOA5) = PCONC(:,JP_CH_URG10)*XURG10/ZCSTAVOG +& + PCONC(:,JP_CH_AP7)* XAP7/ZCSTAVOG + PFRAC(:,JP_CH_URG10) = PCONC(:,JP_CH_URG10) * XURG10/ZCSTAVOG / PCTOTG(:,JP_AER_SOA5) + PFRAC(:,JP_CH_AP7) = PCONC(:,JP_CH_AP7) * XAP7/ZCSTAVOG / PCTOTG(:,JP_AER_SOA5) + PMI(:,JP_AER_SOA5) = PFRAC(:,JP_CH_URG10) * XURG10 + & + PFRAC(:,JP_CH_AP7) * XAP7 + + PCTOTG(:,JP_AER_SOA6) = PCONC(:,JP_CH_UR21) * XUR21/ZCSTAVOG + & + PCONC(:,JP_CH_UR28) * XUR28/ZCSTAVOG + PFRAC(:,JP_CH_UR21) = PCONC(:,JP_CH_UR21) * XUR21/ZCSTAVOG / PCTOTG(:,JP_AER_SOA6) + PFRAC(:,JP_CH_UR28) = PCONC(:,JP_CH_UR28) * XUR28/ZCSTAVOG / PCTOTG(:,JP_AER_SOA6) + PMI(:,JP_AER_SOA6) = PFRAC(:,JP_CH_UR21) * XUR21 + & + PFRAC(:,JP_CH_UR28) * XUR28 + + PCTOTG(:,JP_AER_SOA7) = PCONC(:,JP_CH_URG2) * XURG2/ZCSTAVOG +& + PCONC(:,JP_CH_RPG2)* XRPG2/ZCSTAVOG +& + PCONC(:,JP_CH_UR26)* XUR26/ZCSTAVOG +& + PCONC(:,JP_CH_RP18)* XRP18/ZCSTAVOG + + PFRAC(:,JP_CH_URG2) = PCONC(:,JP_CH_URG2) * XURG2/ZCSTAVOG / PCTOTG(:,JP_AER_SOA7) + PFRAC(:,JP_CH_UR26) = PCONC(:,JP_CH_UR26) * XUR26/ZCSTAVOG / PCTOTG(:,JP_AER_SOA7) + PFRAC(:,JP_CH_RPG2) = PCONC(:,JP_CH_RPG2) * XRPG2/ZCSTAVOG / PCTOTG(:,JP_AER_SOA7) + PFRAC(:,JP_CH_RP18) = PCONC(:,JP_CH_RP18) * XRP18/ZCSTAVOG / PCTOTG(:,JP_AER_SOA7) + PMI(:,JP_AER_SOA7) = PFRAC(:,JP_CH_URG2)* XURG2 + & + PFRAC(:,JP_CH_UR26)* XUR26 + & + PFRAC(:,JP_CH_RPG2)* XRPG2 + & + PFRAC(:,JP_CH_RP18)* XRP18 + + PCTOTG(:,JP_AER_SOA8) = PCONC(:,JP_CH_RPG3) *XRPG3/ZCSTAVOG + PFRAC(:,JP_CH_RPG3) = PCONC(:,JP_CH_RPG3) *XRPG3/ZCSTAVOG / PCTOTG(:,JP_AER_SOA8) + PMI(:,JP_AER_SOA8) = PFRAC(:,JP_CH_RPG3) *XRPG3 + + PCTOTG(:,JP_AER_SOA9) = PCONC(:,JP_CH_URG4) *XURG4/ZCSTAVOG + & + PCONC(:,JP_CH_UR8)* XUR8/ZCSTAVOG + PFRAC(:,JP_CH_URG4) = PCONC(:,JP_CH_URG4) * XURG4/ZCSTAVOG / PCTOTG(:,JP_AER_SOA9) + PFRAC(:,JP_CH_UR8) = PCONC(:,JP_CH_UR8) * XUR8/ZCSTAVOG / PCTOTG(:,JP_AER_SOA9) + PMI(:,JP_AER_SOA9) = PFRAC(:,JP_CH_URG4)*XURG4 + & + PFRAC(:,JP_CH_UR8)*XUR8 + + PCTOTG(:,JP_AER_SOA10) = PCONC(:,JP_CH_UR7)*XUR7/ZCSTAVOG +& + PCONC(:,JP_CH_UR17) *XUR17/ZCSTAVOG + PFRAC(:,JP_CH_UR7)= PCONC(:,JP_CH_UR7)*XUR7/ZCSTAVOG / PCTOTG(:,JP_AER_SOA10) + PFRAC(:,JP_CH_UR17) = PCONC(:,JP_CH_UR17) *XUR17/ZCSTAVOG / PCTOTG(:,JP_AER_SOA10) + PMI(:,JP_AER_SOA10) = PFRAC(:,JP_CH_UR7)*XUR7 + & + PFRAC(:,JP_CH_UR17)*XUR17 +! + ELSE ! CACM scheme PCTOTG(:,JP_AER_SOA1) = PCONC(:,JP_CH_AP1) *XAP1/ZCSTAVOG +& PCONC(:,JP_CH_AP6) *XAP6/ZCSTAVOG +& PCONC(:,JP_CH_UR31)*XUR31/ZCSTAVOG @@ -749,6 +902,8 @@ ELSE !* 2.n transfer aerosol mass from aerosol to gas variables ! ! gas phase species +! PCTOTG is zero for H2SO4 <-> all H2SO4 is in AP phase + PCONC(:,JP_CH_H2SO4) = PCTOTG(:,JP_AER_SO4g) *ZCSTAVOG / XH2SO4 PCONC(:,JP_CH_HNO3) = PCTOTG(:,JP_AER_NO3g) *ZCSTAVOG / XHNO3 PCONC(:,JP_CH_NH3) = PCTOTG(:,JP_AER_NH3g) *ZCSTAVOG / XNH3 ! @@ -809,7 +964,7 @@ IF (NSOA .EQ. 10) THEN PAERO(:,JP_CH_SOA10j) = PCTOTA(:,JP_AER_SOA10,2)*ZCSTAVOG / PMI(:,JP_AER_SOA10) IF (TRIM(CORGANIC) == 'PUN') THEN - IF (GSCHEME == "RELACS2") THEN ! ReLACS2 scheme + IF (HSCHEME == "RELACS2") THEN ! ReLACS2 scheme PCONC(:,JP_CH_URG1) = PFRAC(:,JP_CH_URG1) * PCTOTG(:,JP_AER_SOA1) * ZCSTAVOG / XURG1 PCONC(:,JP_CH_URG2) = PFRAC(:,JP_CH_URG2) * PCTOTG(:,JP_AER_SOA2) * ZCSTAVOG / XURG2 @@ -842,7 +997,42 @@ IF (TRIM(CORGANIC) == 'PUN') THEN PCONC(:,JP_CH_UR7) = PFRAC(:,JP_CH_UR7) * PCTOTG(:,JP_AER_SOA10) * ZCSTAVOG / XUR7 PCONC(:,JP_CH_UR8) = PFRAC(:,JP_CH_UR8) * PCTOTG(:,JP_AER_SOA10) * ZCSTAVOG / XUR8 PCONC(:,JP_CH_PAN8) = PFRAC(:,JP_CH_PAN8) * PCTOTG(:,JP_AER_SOA10) * ZCSTAVOG / XPAN8 +! + ELSE IF (HSCHEME == "RELACS3") THEN ! ReLACS3 scheme + PCONC(:,JP_CH_UR21) = PFRAC(:,JP_CH_UR21) * PCTOTG(:,JP_AER_SOA1) * ZCSTAVOG / XUR21 + PCONC(:,JP_CH_UR28) = PFRAC(:,JP_CH_UR28) * PCTOTG(:,JP_AER_SOA1) * ZCSTAVOG / XUR28 + + PCONC(:,JP_CH_URG2) = PFRAC(:,JP_CH_URG2) * PCTOTG(:,JP_AER_SOA2) * ZCSTAVOG / XURG2 + PCONC(:,JP_CH_RPG2) = PFRAC(:,JP_CH_RPG2) * PCTOTG(:,JP_AER_SOA2) * ZCSTAVOG / XRPG2 + PCONC(:,JP_CH_RP18) = PFRAC(:,JP_CH_RP18) * PCTOTG(:,JP_AER_SOA2) * ZCSTAVOG / XRP18 + + PCONC(:,JP_CH_RPG3) = PFRAC(:,JP_CH_RPG3) * PCTOTG(:,JP_AER_SOA3) * ZCSTAVOG / XRPG3 + + PCONC(:,JP_CH_URG4) = PFRAC(:,JP_CH_URG4) * PCTOTG(:,JP_AER_SOA4) * ZCSTAVOG / XURG4 + PCONC(:,JP_CH_UR17) = PFRAC(:,JP_CH_UR17) * PCTOTG(:,JP_AER_SOA5) * ZCSTAVOG / XUR17 + + PCONC(:,JP_CH_RPR3) = PFRAC(:,JP_CH_RPR3) * PCTOTG(:,JP_AER_SOA5) * ZCSTAVOG / XRPR3 + PCONC(:,JP_CH_AP7) = PFRAC(:,JP_CH_AP7) * PCTOTG(:,JP_AER_SOA5) * ZCSTAVOG / XAP7 + + PCONC(:,JP_CH_UR22) = PFRAC(:,JP_CH_UR22) * PCTOTG(:,JP_AER_SOA6) * ZCSTAVOG / XUR22 + PCONC(:,JP_CH_URG6) = PFRAC(:,JP_CH_URG6) * PCTOTG(:,JP_AER_SOA6) * ZCSTAVOG / XURG6 + + PCONC(:,JP_CH_URG7) = PFRAC(:,JP_CH_URG7) * PCTOTG(:,JP_AER_SOA7) * ZCSTAVOG / XURG7 + PCONC(:,JP_CH_RPG7) = PFRAC(:,JP_CH_RPG7) * PCTOTG(:,JP_AER_SOA7) * ZCSTAVOG / XRPG7 + PCONC(:,JP_CH_RPR4) = PFRAC(:,JP_CH_RPR4) * PCTOTG(:,JP_AER_SOA7) * ZCSTAVOG / XRPR4 + PCONC(:,JP_CH_RPR7) = PFRAC(:,JP_CH_RPR7) * PCTOTG(:,JP_AER_SOA7) * ZCSTAVOG / XRPR7 + + PCONC(:,JP_CH_URG8) = PFRAC(:,JP_CH_URG8) * PCTOTG(:,JP_AER_SOA8) * ZCSTAVOG / XURG8 + + PCONC(:,JP_CH_URG9) = PFRAC(:,JP_CH_URG9) * PCTOTG(:,JP_AER_SOA9) * ZCSTAVOG / XURG9 + PCONC(:,JP_CH_UR26) = PFRAC(:,JP_CH_UR26) * PCTOTG(:,JP_AER_SOA9) * ZCSTAVOG / XUR26 + + PCONC(:,JP_CH_URG10) = PFRAC(:,JP_CH_URG10)* PCTOTG(:,JP_AER_SOA10) * ZCSTAVOG / XURG10 + PCONC(:,JP_CH_UR7) = PFRAC(:,JP_CH_UR7) * PCTOTG(:,JP_AER_SOA10) * ZCSTAVOG / XUR7 + PCONC(:,JP_CH_UR8) = PFRAC(:,JP_CH_UR8) * PCTOTG(:,JP_AER_SOA10) * ZCSTAVOG / XUR8 + PCONC(:,JP_CH_PAN8) = PFRAC(:,JP_CH_PAN8) * PCTOTG(:,JP_AER_SOA10) * ZCSTAVOG / XPAN8 +! ELSE ! CACM scheme PCONC(:,JP_CH_UR21) = PFRAC(:,JP_CH_UR21) * PCTOTG(:,JP_AER_SOA1) * ZCSTAVOG / XUR21 PCONC(:,JP_CH_UR28) = PFRAC(:,JP_CH_UR28) * PCTOTG(:,JP_AER_SOA1) * ZCSTAVOG / XUR28 @@ -895,9 +1085,10 @@ IF (TRIM(CORGANIC) == 'PUN') THEN PCONC(:,JP_CH_PAN8) = PFRAC(:,JP_CH_PAN8) * PCTOTG(:,JP_AER_SOA10) * ZCSTAVOG / XPAN8 END IF END IF +! IF (TRIM(CORGANIC) == 'MPMPO') THEN - IF (GSCHEME == "RELACS2") THEN ! ReLACS2 scheme + IF (HSCHEME == "RELACS2") THEN ! ReLACS2 scheme PCONC(:,JP_CH_URG6) = PFRAC(:,JP_CH_URG6) * PCTOTG(:,JP_AER_SOA1) * ZCSTAVOG / XURG6 PCONC(:,JP_CH_URG7) = PFRAC(:,JP_CH_URG7) * PCTOTG(:,JP_AER_SOA2) * ZCSTAVOG / XURG7 PCONC(:,JP_CH_RPR7) = PFRAC(:,JP_CH_RPR7) * PCTOTG(:,JP_AER_SOA2) * ZCSTAVOG / XRPR7 @@ -924,6 +1115,36 @@ IF (TRIM(CORGANIC) == 'MPMPO') THEN PCONC(:,JP_CH_UR7) = PFRAC(:,JP_CH_UR7)* PCTOTG(:,JP_AER_SOA10) * ZCSTAVOG / XUR7 PCONC(:,JP_CH_UR17) = PFRAC(:,JP_CH_UR17) * PCTOTG(:,JP_AER_SOA10) * ZCSTAVOG / XUR17 +! + ELSE IF (HSCHEME == "RELACS3") THEN ! ReLACS3 scheme + PCONC(:,JP_CH_URG6) = PFRAC(:,JP_CH_URG6) * PCTOTG(:,JP_AER_SOA1) * ZCSTAVOG / XURG6 + PCONC(:,JP_CH_URG7) = PFRAC(:,JP_CH_URG7) * PCTOTG(:,JP_AER_SOA2) * ZCSTAVOG / XURG7 + PCONC(:,JP_CH_RPR7) = PFRAC(:,JP_CH_RPR7) * PCTOTG(:,JP_AER_SOA2) * ZCSTAVOG / XRPR7 + PCONC(:,JP_CH_RPG7) = PFRAC(:,JP_CH_RPG7) * PCTOTG(:,JP_AER_SOA2) * ZCSTAVOG / XRPG7 + + PCONC(:,JP_CH_URG8) = PFRAC(:,JP_CH_URG8) * PCTOTG(:,JP_AER_SOA3) * ZCSTAVOG / XURG8 + + PCONC(:,JP_CH_URG9) = PFRAC(:,JP_CH_URG9) * PCTOTG(:,JP_AER_SOA4) * ZCSTAVOG / XURG9 + + PCONC(:,JP_CH_URG10) = PFRAC(:,JP_CH_URG10) * PCTOTG(:,JP_AER_SOA5) * ZCSTAVOG / XURG10 + PCONC(:,JP_CH_AP7) = PFRAC(:,JP_CH_AP7) * PCTOTG(:,JP_AER_SOA5) * ZCSTAVOG / XAP7 + + PCONC(:,JP_CH_UR21) = PFRAC(:,JP_CH_UR21) * PCTOTG(:,JP_AER_SOA6) * ZCSTAVOG / XUR21 + PCONC(:,JP_CH_UR28) = PFRAC(:,JP_CH_UR28) * PCTOTG(:,JP_AER_SOA6) * ZCSTAVOG / XUR28 + + PCONC(:,JP_CH_URG2) = PFRAC(:,JP_CH_URG2) * PCTOTG(:,JP_AER_SOA7) * ZCSTAVOG / XURG2 + PCONC(:,JP_CH_RPG2) = PFRAC(:,JP_CH_RPG2) * PCTOTG(:,JP_AER_SOA7) * ZCSTAVOG / XRPG2 + PCONC(:,JP_CH_RP18) = PFRAC(:,JP_CH_RP18) * PCTOTG(:,JP_AER_SOA7) * ZCSTAVOG / XRP18 + PCONC(:,JP_CH_UR26) = PFRAC(:,JP_CH_UR26) * PCTOTG(:,JP_AER_SOA7) * ZCSTAVOG / XUR26 + + PCONC(:,JP_CH_RPG3) = PFRAC(:,JP_CH_RPG3) * PCTOTG(:,JP_AER_SOA8) * ZCSTAVOG / XRPG3 + + PCONC(:,JP_CH_URG4) = PFRAC(:,JP_CH_URG4) * PCTOTG(:,JP_AER_SOA9) * ZCSTAVOG / XURG4 + PCONC(:,JP_CH_UR8) = PFRAC(:,JP_CH_UR8) * PCTOTG(:,JP_AER_SOA9) * ZCSTAVOG / XUR8 + + PCONC(:,JP_CH_UR7) = PFRAC(:,JP_CH_UR7)* PCTOTG(:,JP_AER_SOA10) * ZCSTAVOG / XUR7 + PCONC(:,JP_CH_UR17) = PFRAC(:,JP_CH_UR17) * PCTOTG(:,JP_AER_SOA10) * ZCSTAVOG / XUR17 +! ELSE ! CACM scheme PCONC(:,JP_CH_UR31) = PFRAC(:,JP_CH_UR31) * PCTOTG(:,JP_AER_SOA1) * ZCSTAVOG / XUR31 PCONC(:,JP_CH_AP1) = PFRAC(:,JP_CH_AP1) * PCTOTG(:,JP_AER_SOA1) * ZCSTAVOG / XAP1 @@ -988,7 +1209,7 @@ DO JN=1,JPMODE PRG0(:,JN)=PM(:,NM3(JN))**(2./3.) & / (PM(:,NM0(JN))**(0.5)*PM(:,NM6(JN))**(1./6.)) ! -!attention, le xsig0 représente en réalité ln(sigma) +!attention, le xsig0 represente en realite ln(sigma) ! PSIG0(:,JN)=1./3.*sqrt(-log(PM(:,NM3(JN))**2/(PM(:,NM0(JN))*PM(:,NM6(JN))))) ENDDO diff --git a/src/MNH/ch_aqueous_check.f90 b/src/MNH/ch_aqueous_check.f90 index 4046fd2c8b90c8f98cb008847faf14e4d763fb1d..9a59b93853f0d6dcf44f25dd47d72fc3060f65db 100644 --- a/src/MNH/ch_aqueous_check.f90 +++ b/src/MNH/ch_aqueous_check.f90 @@ -7,8 +7,8 @@ ! ############################ ! INTERFACE - SUBROUTINE CH_AQUEOUS_CHECK (PTSTEP, PRHODREF, PRHODJ,PRRS, PRSVS, & - KRRL, KRR, KEQAQ, PRTMIN_AQ, OUSECHIC ) + SUBROUTINE CH_AQUEOUS_CHECK (PTSTEP, PRHODREF, PRHODJ,PRRS, PRSVS, KRRL, & + KRR, KEQ, KEQAQ, HNAMES, PRTMIN_AQ, OUSECHIC ) ! REAL, INTENT(IN) :: PTSTEP ! Timestep REAL, INTENT(IN) :: PRTMIN_AQ ! LWC threshold liq. chem. @@ -20,17 +20,19 @@ REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRSVS ! S.V. source ! INTEGER, INTENT(IN) :: KRRL ! Number of liq. variables INTEGER, INTENT(IN) :: KRR ! Number of water variables +INTEGER, INTENT(IN) :: KEQ ! Number of chem. spec. INTEGER, INTENT(IN) :: KEQAQ ! Number of liq. chem. spec. +CHARACTER(LEN=32), DIMENSION(:), INTENT(IN) :: HNAMES LOGICAL, INTENT(IN) :: OUSECHIC ! flag for ice chem. ! END SUBROUTINE CH_AQUEOUS_CHECK END INTERFACE END MODULE MODI_CH_AQUEOUS_CHECK ! -! #################################################################### - SUBROUTINE CH_AQUEOUS_CHECK (PTSTEP, PRHODREF, PRHODJ,PRRS, PRSVS, & - KRRL, KRR, KEQAQ, PRTMIN_AQ, OUSECHIC ) -! #################################################################### +! ########################################################################### + SUBROUTINE CH_AQUEOUS_CHECK (PTSTEP, PRHODREF, PRHODJ,PRRS, PRSVS, KRRL, & + KRR, KEQ, KEQAQ, HNAMES, PRTMIN_AQ, OUSECHIC ) +! ########################################################################### ! !!**** * - Check the coherence between the mixing ratio of water and the !! concentrations of aqueous species @@ -67,6 +69,7 @@ END MODULE MODI_CH_AQUEOUS_CHECK !! Original 08/11/07 !! 21/11/07 (M. Leriche) correct threshold for aqueous phase chemistry !! 20/09/10 (M. Leriche) add ice phase chemical species +!! 04/11/13 (M. Leriche) add transfer back to the gas phase if evaporation !! !------------------------------------------------------------------------------- ! @@ -75,7 +78,8 @@ END MODULE MODI_CH_AQUEOUS_CHECK ! USE MODD_PARAMETERS,ONLY: JPHEXT, &! number of horizontal External points JPVEXT ! number of vertical External points -USE MODD_NSV, ONLY : NSV_CHACBEG, NSV_CHACEND, NSV_CHICBEG, NSV_CHICEND +USE MODD_NSV, ONLY : NSV_CHACBEG, NSV_CHACEND, NSV_CHICBEG, NSV_CHICEND, & + NSV_CHGSBEG ! IMPLICIT NONE ! @@ -92,27 +96,37 @@ REAL, DIMENSION(:,:,:,:), INTENT(INOUT) :: PRSVS ! S.V. source ! INTEGER, INTENT(IN) :: KRRL ! Number of liq. variables INTEGER, INTENT(IN) :: KRR ! Number of water variables +INTEGER, INTENT(IN) :: KEQ ! Number of chem. spec. INTEGER, INTENT(IN) :: KEQAQ ! Number of liq. chem. spec. +CHARACTER(LEN=32), DIMENSION(:), INTENT(IN) :: HNAMES LOGICAL, INTENT(IN) :: OUSECHIC ! flag for ice chem. ! !* 0.2 Declarations of local variables : ! INTEGER :: JRR ! Loop index for the moist variables -INTEGER :: JSV ! Loop index for the aqueous/ice concentrations +INTEGER :: JSV, JSV2 ! Loop index for the aqueous/ice concentrations ! +INTEGER :: INOCLOUD ! Case number no cloud water +INTEGER :: INORAIN ! Case number no rainwater INTEGER :: IWATER ! Case number aqueous species INTEGER :: IICE ! Case number ice phase species +LOGICAL, DIMENSION(SIZE(PRRS,1),SIZE(PRRS,2),SIZE(PRRS,3)) & + :: GNOCLOUD ! where to compute +LOGICAL, DIMENSION(SIZE(PRRS,1),SIZE(PRRS,2),SIZE(PRRS,3)) & + :: GNORAIN ! where to compute LOGICAL, DIMENSION(SIZE(PRRS,1),SIZE(PRRS,2),SIZE(PRRS,3)) & :: GWATER ! where to compute LOGICAL, DIMENSION(SIZE(PRRS,1),SIZE(PRRS,2),SIZE(PRRS,3)) & :: GICE ! where to compute REAL, DIMENSION(SIZE(PRRS,1),SIZE(PRRS,2),SIZE(PRRS,3),SIZE(PRRS,4)) & :: ZRRS -REAL, DIMENSION(:), ALLOCATABLE :: ZWORK ! work array +REAL, DIMENSION(:), ALLOCATABLE :: ZWORK, ZWORK2 ! work array INTEGER, DIMENSION(3) :: ISV_BEG, ISV_END ! REAL :: ZRTMIN_AQ ! +INTEGER , DIMENSION(SIZE(GNOCLOUD)) :: I1NC,I2NC,I3NC ! Used to replace the COUNT +INTEGER , DIMENSION(SIZE(GNORAIN)) :: I1NR,I2NR,I3NR ! Used to replace the COUNT INTEGER , DIMENSION(SIZE(GWATER)) :: I1W,I2W,I3W ! Used to replace the COUNT INTEGER , DIMENSION(SIZE(GICE)) :: I1I,I2I,I3I INTEGER :: JL ! and PACK intrinsics @@ -152,7 +166,71 @@ ELSE ISV_END(3) = NSV_CHACEND END IF ! -!* 3. FILTER OUT THE AQUEOUS SPECIES WHEN MICROPHYSICS<ZRTMIN_AQ +!* 3. TRANSFER BACK TO THE GAS PHASE IF EVAPORATION +! --------------------------------------------- +! +GNOCLOUD(:,:,:)=.FALSE. +WHERE(ZRRS(:,:,:,2)<=(ZRTMIN_AQ*1.e3/PRHODREF(:,:,:))) !cloud + GNOCLOUD(:,:,:)=.TRUE. +ENd WHERE +INOCLOUD = COUNTJV( GNOCLOUD(:,:,:),I1NC(:),I2NC(:),I3NC(:)) +IF (INOCLOUD >=1 ) THEN + ALLOCATE(ZWORK(INOCLOUD)) + ZWORK(:) = 0. + ALLOCATE(ZWORK2(INOCLOUD)) + ZWORK2(:) = 0. + DO JSV = 1, KEQ-KEQAQ ! gas phase species + DO JL = 1, INOCLOUD + ZWORK(JL) = PRSVS(I1NC(JL),I2NC(JL),I3NC(JL),NSV_CHGSBEG-1+JSV) + ENDDO + DO JSV2 = KEQ-KEQAQ + 1, KEQ - KEQAQ/2 !cloud + DO JL = 1, INOCLOUD + ZWORK2(JL) = MAX(PRSVS(I1NC(JL),I2NC(JL),I3NC(JL),NSV_CHGSBEG-1+JSV2),0.) + ENDDO + IF ((TRIM(HNAMES(JSV))) == (TRIM(HNAMES(JSV2)(4:32))).AND.(ANY(ZWORK2(:)>0))) THEN +! print*,'evaporation of cloud for chemistry' + ZWORK(:) = ZWORK(:) + ZWORK2(:) + ENDIF + END DO + PRSVS(:,:,:,NSV_CHGSBEG-1+JSV) = UNPACK( ZWORK(:),MASK=GNOCLOUD(:,:,:), & + FIELD=PRSVS(:,:,:,NSV_CHGSBEG-1+JSV) ) + END DO + DEALLOCATE(ZWORK) + DEALLOCATE(ZWORK2) +END IF +IF( KRRL==2 ) THEN +GNORAIN(:,:,:)=.FALSE. +WHERE(ZRRS(:,:,:,3)<=(ZRTMIN_AQ*1.e3/PRHODREF(:,:,:))) !rain + GNORAIN(:,:,:)=.TRUE. +ENd WHERE +INORAIN = COUNTJV( GNORAIN(:,:,:),I1NR(:),I2NR(:),I3NR(:)) +IF (INORAIN >=1 ) THEN + ALLOCATE(ZWORK(INORAIN)) + ZWORK(:) = 0. + ALLOCATE(ZWORK2(INORAIN)) + ZWORK2(:) = 0. + DO JSV = 1, KEQ-KEQAQ ! gas phase species + DO JL = 1, INORAIN + ZWORK(JL) = PRSVS(I1NR(JL),I2NR(JL),I3NR(JL),NSV_CHGSBEG-1+JSV) + ENDDO + DO JSV2 = KEQ-KEQAQ/2 + 1, KEQ !rain + DO JL = 1, INORAIN + ZWORK2(JL) = MAX(PRSVS(I1NR(JL),I2NR(JL),I3NR(JL),NSV_CHGSBEG-1+JSV2),0.) + ENDDO + IF ((TRIM(HNAMES(JSV))) == (TRIM(HNAMES(JSV2)(4:32))).AND.(ANY(ZWORK2(:)>0.))) THEN +! print*,'evaporation of rain for chemistry' + ZWORK(:) = ZWORK(:) + ZWORK2(:) + ENDIF + END DO + PRSVS(:,:,:,NSV_CHGSBEG-1+JSV) = UNPACK( ZWORK(:),MASK=GNORAIN(:,:,:), & + FIELD=PRSVS(:,:,:,NSV_CHGSBEG-1+JSV) ) + END DO + DEALLOCATE(ZWORK) + DEALLOCATE(ZWORK2) +END IF +END IF +! +!* 4. FILTER OUT THE AQUEOUS SPECIES WHEN MICROPHYSICS<ZRTMIN_AQ ! -------------------------------------------------------- ! DO JRR = 2, KRRL+1 @@ -180,7 +258,7 @@ DO JRR = 2, KRRL+1 END DO ! ! -!* 4. FILTER OUT THE ICE PHASE SPECIES WHEN MICROPHYSICS<ZRTMIN_AQ +!* 5. FILTER OUT THE ICE PHASE SPECIES WHEN MICROPHYSICS<ZRTMIN_AQ ! ------------------------------------------------------------ ! IF (OUSECHIC) THEN diff --git a/src/MNH/ch_model0d.f90 b/src/MNH/ch_model0d.f90 index 663e22a45f0dc1ed5617d49812cef2855341975e..70c665dc3ddf6893f1c13341cbe8be639bbb5597 100644 --- a/src/MNH/ch_model0d.f90 +++ b/src/MNH/ch_model0d.f90 @@ -45,6 +45,7 @@ !! (for liquid phase chemistry) !! 21/09/04 (P. Tulet) update for MASDEV44 bug2 !! 21/03/06 (P. Tulet) update for MASDEV46 and add ORILAM aerosol scheme +!! 24/24/14 (M. Leriche) add ReLACS3 !! !! EXTERNAL !! -------- @@ -219,7 +220,8 @@ IF (LORILAM) THEN IF (TRIM(CNAMES(JN)) .EQ. "ALKA") CCH_SCHEME = "RELACS" IF (TRIM(CNAMES(JN)) .EQ. "HC3") CCH_SCHEME = "RACM" IF (TRIM(CNAMES(JN)) .EQ. "URG1") CCH_SCHEME = "RELACS2" - IF (TRIM(CNAMES(JN)) .EQ. "UR21") CCH_SCHEME = "CACM" + IF (TRIM(CNAMES(JN)) .EQ. "GLY") CCH_SCHEME = "RELACS3" + IF (TRIM(CNAMES(JN)) .EQ. "UR29") CCH_SCHEME = "CACM" ENDDO diff --git a/src/MNH/ch_monitorn.f90 b/src/MNH/ch_monitorn.f90 index a84faf597dca687a48dc3df170cf9d2da8d54fd1..2083e145fcc2d104bf0aaa02cda2666ea57306b7 100644 --- a/src/MNH/ch_monitorn.f90 +++ b/src/MNH/ch_monitorn.f90 @@ -102,6 +102,10 @@ END MODULE MODI_CH_MONITOR_n !! 30/07/07 (JP Pinty) add Rosenbrock solver !! 26/03/08 (M Leriche) add microphysical transfert from collision/coalescence !! 10/11/08 (M Leriche) add microphysical transfert from rain sedimentation +!! 24/04/14 (M Leriche) Bugs in orilam transfert zsvt in xrsvs +!! + supress line transfer H2SO4 from AP to gas phase +!! imply transfer H2SO4 AP in aqueous phase if aq.chem. +!! 04/2014 (C.Lac) Remove GCENTER with FIT temporal scheme !! !! EXTERNAL !! -------- @@ -540,10 +544,6 @@ IF (LORILAM) THEN END DO ZSVT(:,:,:,NSV_CHEMBEG:NSV_CHEMEND) = MAX(ZSVT(:,:,:,NSV_CHEMBEG:NSV_CHEMEND), XMNH_TINY) ZSVT(:,:,:,NSV_AERBEG:NSV_AEREND) = MAX(ZSVT(:,:,:,NSV_AERBEG:NSV_AEREND), XMNH_TINY) - - DO JSV = 1, SIZE(XSVT,4) - XRSVS(:,:,:,JSV) = ZSVT(:,:,:,JSV) * XRHODJ(:,:,:) / PTSTEP - END DO ! END IF ! @@ -640,7 +640,7 @@ ISTCOUNT = ISTCOUNT + 1 !* 3. MICROPHYSICS TERM FOR AEROSOL AND AQUEOUS CHEMISTRY ! --------------------------------------------------- ! -!* 3.1 sedimentation term for aerosols tendency (XSEDA) +!* 3.1 sedimentation term and wet deposition for aerosols tendency (XSEDA) ! IF (LORILAM) THEN XSEDA(:,:,:,:) = 0. @@ -680,6 +680,10 @@ IF (LORILAM) THEN XSEDA(IIB:IIE,IJB:IJE,IKB:IKE,:)) ENDIF +! Update aerosol tendency before aerosol solver + DO JSV = 1, SIZE(XSVT,4) + XRSVS(:,:,:,JSV) = ZSVT(:,:,:,JSV) * XRHODJ(:,:,:) / PTSTEP + END DO ENDIF ! !* 3.2 check where aqueous concentration>0 + micropÄ¥ysics term @@ -689,8 +693,8 @@ IF (LUSECHAQ.AND.(NRRL>=2) ) THEN DO JRR = 2, 3 ZRT_VOL(:,:,:,JRR) = XRT(:,:,:,JRR)*XRHODREF(:,:,:)/1.e3 END DO - CALL CH_AQUEOUS_CHECK (PTSTEP, XRHODREF, XRHODJ, XRRS, XRSVS, & - NRRL, NRR, NEQAQ, XRTMIN_AQ, LUSECHIC ) + CALL CH_AQUEOUS_CHECK (PTSTEP, XRHODREF, XRHODJ, XRRS, XRSVS, NRRL, & + NRR, NEQ, NEQAQ, CNAMES, XRTMIN_AQ, LUSECHIC ) IF (MAXVAL(ZRT_VOL(:,:,:,2))>XRTMIN_AQ) THEN SELECT CASE ( CCLOUD ) CASE ('KESS') @@ -769,8 +773,8 @@ IF (LUSECHAQ.AND.(NRRL>=2) ) THEN END SELECT END IF ELSE IF (LUSECHAQ.AND.(NRRL==1) ) THEN - CALL CH_AQUEOUS_CHECK (PTSTEP, XRHODREF, XRHODJ, XRRS, XRSVS, & - NRRL, NRR, NEQAQ, XRTMIN_AQ, LUSECHIC ) + CALL CH_AQUEOUS_CHECK (PTSTEP, XRHODREF, XRHODJ, XRRS, XRSVS, NRRL, & + NRR, NEQ, NEQAQ, CNAMES, XRTMIN_AQ, LUSECHIC ) END IF ! !------------------------------------------------------------------------------- @@ -818,7 +822,7 @@ DO JL=1,ISVECNMASK ZSIG0(JM+1,:) = LOG(XSIG3D(JI,JJ,JK,:)) ZRG0(JM+1,:) = XRG3D(JI,JJ,JK,:) ZN0(JM+1,:) = XN3D(JI,JJ,JK,:) - IF (NSOA > 0) ZSOLORG(JM+1,:) = XSOLORG(JI,JJ,JK,:) + IF (NSOA > 0) ZSOLORG(JM+1,:) = XSOLORG(JI,JJ,JK,:) ENDDO DO JN = 1, NSV_AER !Vectorization: @@ -969,7 +973,9 @@ DO JL=1,ISVECNMASK ZPRESSURE, ZTEMP, ZRC, ZFRAC, ZMI,CCH_SCHEME) END IF ! transfer non-volatile species from aerosol to gas-phase variables - ZCHEM(:,JP_CH_H2SO4) = ZAERO(:,JP_CH_SO4i) + ZAERO(:,JP_CH_SO4j) +! this line seems to be useless and transfer all H2SO4 from AP to cloud +! droplets is LUSECHAQ and LORILAM set to true +! ZCHEM(:,JP_CH_H2SO4) = ZAERO(:,JP_CH_SO4i) + ZAERO(:,JP_CH_SO4j) END IF ! !* 4.5 solve chemical system for the timestep of the monitor @@ -1114,7 +1120,7 @@ DO JSV = 1, NEQ ! ! remove the negative values ! - XRSVS(:,:,:,NSV_CHEMBEG+JSV-1) = MAX( 0., XRSVS(:,:,:,NSV_CHEMBEG+JSV-1) ) + XRSVS(:,:,:,NSV_CHEMBEG+JSV-1) = MAX(0., XRSVS(:,:,:,NSV_CHEMBEG+JSV-1) ) ! ! compute the new total mass ! diff --git a/src/MNH/ch_nnares.f90 b/src/MNH/ch_nnares.f90 index 826842568c509a760f2835186665ceb03ad401e3..a0c9d8fe7ed6fc8b82d4405d1840f09353fddaa2 100644 --- a/src/MNH/ch_nnares.f90 +++ b/src/MNH/ch_nnares.f90 @@ -70,7 +70,6 @@ END MODULE MODI_CH_NNARES !! EXTERNAL !! ------- !! -!USE MODD_CH_M9 USE MODD_CH_AEROSOL !! !! IMPLICIT ARGUMENTS diff --git a/src/MNH/ch_solve_ph.f90 b/src/MNH/ch_solve_ph.f90 index 8e30c89d1a26eb53d2869480ce3d0f466e1add53..0c0c430f7d6555f06215d73d8bf9ea3397db9af4 100644 --- a/src/MNH/ch_solve_ph.f90 +++ b/src/MNH/ch_solve_ph.f90 @@ -151,7 +151,8 @@ SELECT CASE (KRR) IF (TRIM(CNAMES(JJ))=='WC_SO2') C2(:) = PCONC(:,JI)/(ZFACT(:)) IF (TRIM(CNAMES(JJ))=='WC_ORA1') C3(:)= PCONC(:,JI)/(ZFACT(:)) IF (TRIM(CNAMES(JJ))=='WC_HNO3') C4(:)= C4(:)+PCONC(:,JI)/(ZFACT(:)) - IF (TRIM(CNAMES(JJ))=='WC_SULF') C4(:)= C4(:)+2.*PCONC(:,JI)/(ZFACT(:)) + IF ((TRIM(CNAMES(JJ))=='WC_SULF') .OR. (TRIM(CNAMES(JJ))=='WC_H2SO4')) & + C4(:)= C4(:)+2.*PCONC(:,JI)/(ZFACT(:)) IF (CNAMES(JJ)(1:4)=='WC_A') SOM(:) = SOM(:) + PCONC(:,JI)/(ZFACT(:)) IF (CNAMES(JJ)(1:4)=='WC_B') SOM(:) = SOM(:) + 2.*PCONC(:,JI)/(ZFACT(:)) END DO @@ -163,7 +164,8 @@ SELECT CASE (KRR) IF (TRIM(CNAMES(JJ))=='WR_SO2') C2(:) = PCONC(:,JI)/(ZFACT(:)) IF (TRIM(CNAMES(JJ))=='WR_ORA1') C3(:)= PCONC(:,JI)/(ZFACT(:)) IF (TRIM(CNAMES(JJ))=='WR_HNO3') C4(:)= C4(:)+PCONC(:,JI)/(ZFACT(:)) - IF (TRIM(CNAMES(JJ))=='WR_SULF') C4(:)= C4(:)+2.*PCONC(:,JI)/(ZFACT(:)) + IF ((TRIM(CNAMES(JJ))=='WR_SULF') .OR. (TRIM(CNAMES(JJ))=='WR_H2SO4')) & + C4(:)= C4(:)+2.*PCONC(:,JI)/(ZFACT(:)) IF (CNAMES(JJ)(1:4)=='WR_A') SOM(:) = SOM(:) + PCONC(:,JI)/(ZFACT(:)) IF (CNAMES(JJ)(1:4)=='WR_B') SOM(:) = SOM(:) + 2.*PCONC(:,JI)/(ZFACT(:)) END DO diff --git a/src/MNH/modd_ch_aerosol.f90 b/src/MNH/modd_ch_aerosol.f90 index b2c2a113c96070aea3e31267fdcee369600fa11f..c6ff57f2edeff8de23f595ffae0f3c987e2724a1 100644 --- a/src/MNH/modd_ch_aerosol.f90 +++ b/src/MNH/modd_ch_aerosol.f90 @@ -159,6 +159,7 @@ REAL, SAVE, DIMENSION(:), ALLOCATABLE :: XFAC ! conversion factor um3/m3 -> u ! Molar mass of each aerosols parents (in kg/mol) REAL, PARAMETER :: XHNO3=63.01287 +REAL, PARAMETER :: XH2SO4=98.079 REAL, PARAMETER :: XNH3 =17.03061 REAL, PARAMETER :: XURG1=88. REAL, PARAMETER :: XURG2=1.76981E+02 diff --git a/src/MNH/modd_ch_m9.f90 b/src/MNH/modd_ch_m9.f90 deleted file mode 100644 index 25264b0e72c0a324f5ca85d5f9fa4106d6229f2f..0000000000000000000000000000000000000000 --- a/src/MNH/modd_ch_m9.f90 +++ /dev/null @@ -1,66 +0,0 @@ -!MNH_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier -!MNH_LIC This is part of the Meso-NH software governed by the CeCILL-C licence -!MNH_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!MNH_LIC for details. version 1. -!----------------------------------------------------------------- -!--------------- special set of characters for RCS information -!----------------------------------------------------------------- -! $Source$ $Revision$ -! MASDEV4_7 modd 2006/06/27 14:05:00 -!----------------------------------------------------------------- -!! ################# - MODULE MODD_CH_M9 -!! ################# -!! -!! This code is the MESONH interface to constant and variables defined in module -!! MODD_CH_M9_SCHEME that is proper to one chemical scheme. This interface should -!! reduce the source dependances and then improve the compilation time. -!! -!!*** *MODD_CH_M9* -!! -!! PURPOSE -!! ------- -! definition of variables and constant for the chemical core system -!! -!!** METHOD -!! ------ -!! The constants NEQ and NREAC are duplicated here in order to avoid -!! decouple the CCS from the other modules of MNHC. -!! -!! BEWARE : you must call the procedure 'CH_INIT_SCHEME' before using any -!! variables from this module. -!! -!! REFERENCE -!! --------- -!! none -!! -!! AUTHOR -!! ------ -!! Didier Gazen (LA) -!! -!! MODIFICATIONS -!! ------------- -!! Original 19/10/03 -!! -!!---------------------------------------------------------------------- -!! DECLARATIONS -!! ------------ -IMPLICIT NONE -! -INTEGER :: NEQ ! number of prognostic chemical species -INTEGER :: NREAC ! number of chemical reactions -INTEGER :: NMETEOVARS ! number of meteorological variables -INTEGER :: NNONZEROTERMS ! number of non-zero terms returned by CH_TERMS -! -CHARACTER(LEN=32), DIMENSION(:), POINTER :: CNAMES=>NULL() ! names of the species -CHARACTER(LEN=32), DIMENSION(:), POINTER :: CREACS=>NULL() ! the reaction rate names -CHARACTER(LEN=256), DIMENSION(:), POINTER :: CFULLREACS=>NULL() ! the full reactions -! -TYPE METEOTRANSTYPE ! variables from the meteorological part - REAL, DIMENSION(20) :: XMETEOVAR ! the meteorological variables - CHARACTER(LEN=32), DIMENSION(20) :: CMETEOVAR ! their names -END TYPE METEOTRANSTYPE -! -END MODULE MODD_CH_M9 -! -!======================================================================== diff --git a/src/SURFEX/build_emisstabn.F90 b/src/SURFEX/build_emisstabn.F90 index 4b689a9dd21a61825dad04aedc9874a61ffcebf5..bb27f042f0dc7d4bff80d86743a2a7ada636c3e6 100644 --- a/src/SURFEX/build_emisstabn.F90 +++ b/src/SURFEX/build_emisstabn.F90 @@ -1,7 +1,3 @@ -!SURFEX_LIC Copyright 1994-2014 Meteo-France -!SURFEX_LIC This is part of the SURFEX software governed by the CeCILL-C licence -!SURFEX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!SURFEX_LIC for details. version 1. ! ######### SUBROUTINE BUILD_EMISSTAB_n(HPROGRAM,KCH,HEMIS_GR_NAME, KNBTIMES,& KEMIS_GR_TIME,KOFFNDX,TPEMISS,KSIZE,KLUOUT, KVERB,PRHODREF) @@ -26,6 +22,7 @@ !! D.Gazen 01/12/03 change emissions handling for surf. externalization!! !! P.Tulet 01/01/04 change conversion for externalization (flux unit is !! molec./m2/s) +!! M.Leriche 04/14 apply conversion factor if lead = f !! !! EXTERNAL !! -------- @@ -146,7 +143,7 @@ DO JSPEC=1,SIZE(TPEMISS) ! loop on offline emission species TPEMISS(JSPEC)%LREAD = .FALSE. ! to prevent future reading ALLOCATE(TPEMISS(JSPEC)%XEMISDATA(KSIZE,INBTS)) ! Read file for emission data - YRECFM='EMIS_'//TRIM(TPEMISS(JSPEC)%CNAME) + YRECFM='E_'//TRIM(TPEMISS(JSPEC)%CNAME) CALL READ_SURF(HPROGRAM,YRECFM,TPEMISS(JSPEC)%XEMISDATA(:,:),IRESP) ! ! Correction : Replace 999. with 0. value in the Emission FLUX @@ -158,11 +155,11 @@ DO JSPEC=1,SIZE(TPEMISS) ! loop on offline emission species TPEMISS(JSPEC)%XEMISDATA(:,:) = 0. END WHERE DO ITIME=1,INBTS - ! XCONVERSION HAS BEEN ALREADY APPLY IN CH_EMISSION_FLUXN - !TPEMISS(JSPEC)%XEMISDATA(:,ITIME) = TPEMISS(JSPEC)%XEMISDATA(:,ITIME) * XCONVERSION(:) - TPEMISS(JSPEC)%XEMISDATA(:,ITIME) = TPEMISS(JSPEC)%XEMISDATA(:,ITIME) + ! XCONVERSION IS APPLIED IN CH_EMISSION_FLUXN ONLY FOR LREAD = T + TPEMISS(JSPEC)%XEMISDATA(:,ITIME) = TPEMISS(JSPEC)%XEMISDATA(:,ITIME) * XCONVERSION(:) + !TPEMISS(JSPEC)%XEMISDATA(:,ITIME) = TPEMISS(JSPEC)%XEMISDATA(:,ITIME) END DO - ELSE + ELSE ! Read window size is smaller than number of emission times TPEMISS(JSPEC)%NWS = IWS_DEFAULT TPEMISS(JSPEC)%NDX = IWS_DEFAULT diff --git a/src/SURFEX/build_pronoslistn.F90 b/src/SURFEX/build_pronoslistn.F90 index 5fbabb06572560a9b34774a642a4be16fcddd3ad..e4f2dee32062e5e82add0248e496bff92ee5c1c4 100644 --- a/src/SURFEX/build_pronoslistn.F90 +++ b/src/SURFEX/build_pronoslistn.F90 @@ -1,7 +1,3 @@ -!SURFEX_LIC Copyright 1994-2014 Meteo-France -!SURFEX_LIC This is part of the SURFEX software governed by the CeCILL-C licence -!SURFEX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!SURFEX_LIC for details. version 1. ! ######### SUBROUTINE BUILD_PRONOSLIST_n(KEMIS_NBR,HEMIS_NAME,TPPRONOS,KCH,KLUOUT,KVERB) !! ####################################################################### @@ -50,7 +46,7 @@ IMPLICIT NONE !* 0.1 declaration of arguments ! INTEGER, INTENT(IN) :: KEMIS_NBR ! number of emitted species - CHARACTER(LEN=6), DIMENSION(KEMIS_NBR), INTENT(IN) :: HEMIS_NAME ! name of emitted species + CHARACTER(LEN=12), DIMENSION(KEMIS_NBR), INTENT(IN) :: HEMIS_NAME ! name of emitted species TYPE(PRONOSVAR_T), POINTER :: TPPRONOS INTEGER, INTENT(IN) :: KCH ! logical unit of input chemistry file INTEGER, INTENT(IN) :: KLUOUT ! output listing channel diff --git a/src/SURFEX/ch_conversion_factor.F90 b/src/SURFEX/ch_conversion_factor.F90 index dddca19be1e454ee4cd397d97f36d099562debb2..8efe473c64c3f83a2d2dc4e0cd70be96b306ca5c 100644 --- a/src/SURFEX/ch_conversion_factor.F90 +++ b/src/SURFEX/ch_conversion_factor.F90 @@ -1,7 +1,3 @@ -!SURFEX_LIC Copyright 1994-2014 Meteo-France -!SURFEX_LIC This is part of the SURFEX software governed by the CeCILL-C licence -!SURFEX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!SURFEX_LIC for details. version 1. ! ######### SUBROUTINE CH_CONVERSION_FACTOR(HCONVERSION,PRHOA) ! ####################################### @@ -25,6 +21,7 @@ !! ------------- !! Original 11/2011 !! A. Alias 07/2013 add MODI_ABOR1_SFX +!! M. Leriche 04/2014 correct conversion factor !!----------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -54,13 +51,11 @@ IF (LHOOK) CALL DR_HOOK('CH_CONVERSION_FACTOR',0,ZHOOK_HANDLE) XCONVERSION(:) = 1. SELECT CASE (HCONVERSION) CASE ('MIX') ! flux given ppp*m/s, conversion to molec/m2/s - ! where 1 molecule/cm2/s = (224.14/6.022136E23) ppp*m/s XCONVERSION(:) = XAVOGADRO * PRHOA(:) / XMD CASE ('CON') ! flux given in molecules/cm2/s, conversion to molec/m2/s XCONVERSION(:) = 1E4 CASE ('MOL') ! flux given in microMol/m2/day, conversion to molec/m2/s - ! where 1 microMol/m2/day = (22.414/86.400)*1E-12 ppp*m/s - XCONVERSION(:) = (22.414/86.400)*1E-12 * XAVOGADRO * PRHOA(:) / XMD + XCONVERSION(:) = 1E-6 * XAVOGADRO / 86400. CASE DEFAULT CALL ABOR1_SFX('CH_BUILDEMISSN: UNKNOWN CONVERSION FACTOR') END SELECT diff --git a/src/SURFEX/ch_emission_fluxn.F90 b/src/SURFEX/ch_emission_fluxn.F90 index 6548ae9e691ec4e83ac5b335c14fc96fb0b49b10..6d9b29a129e9bfff6d42f04abf1499c3fa437e82 100644 --- a/src/SURFEX/ch_emission_fluxn.F90 +++ b/src/SURFEX/ch_emission_fluxn.F90 @@ -1,7 +1,3 @@ -!SURFEX_LIC Copyright 1994-2014 Meteo-France -!SURFEX_LIC This is part of the SURFEX software governed by the CeCILL-C licence -!SURFEX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!SURFEX_LIC for details. version 1. ! ######### SUBROUTINE CH_EMISSION_FLUX_n(HPROGRAM,PSIMTIME,PSFSV, PRHOA, PTSTEP, KNBTS_MAX) ! ###################################################################### @@ -201,7 +197,7 @@ DO JI=1,SIZE(TSEMISS) IF (IVERB >= 6) WRITE(ILUOUT,*) 'INIT des I/O DONE.' LIOINIT=.TRUE. END IF - YRECFM='EMIS_'//TRIM(TSEMISS(JI)%CNAME) + YRECFM='E_'//TRIM(TSEMISS(JI)%CNAME) IF (IVERB >= 6)& WRITE (ILUOUT,*) 'READ emission :',TRIM(YRECFM),& ', SIZE(ZWORK)=',SIZE(ZWORK,1),INBTS diff --git a/src/SURFEX/ch_init_emissionn.F90 b/src/SURFEX/ch_init_emissionn.F90 index b07f0e1e1f0450ef919381e75fe5f35afd092042..7522578f6e9b855fe439e06e77dbd990d3934ec0 100644 --- a/src/SURFEX/ch_init_emissionn.F90 +++ b/src/SURFEX/ch_init_emissionn.F90 @@ -1,7 +1,3 @@ -!SURFEX_LIC Copyright 1994-2014 Meteo-France -!SURFEX_LIC This is part of the SURFEX software governed by the CeCILL-C licence -!SURFEX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!SURFEX_LIC for details. version 1. ! ######### SUBROUTINE CH_INIT_EMISSION_n(HPROGRAM,KLU,KCH,PRHOA) ! ####################################### @@ -62,7 +58,7 @@ INTEGER :: JSPEC ! Loop index for cover data INTEGER :: IIND1,IIND2 ! Indices counter ! CHARACTER(LEN=40) :: YSPEC_NAME ! species name - CHARACTER(LEN=6), DIMENSION(:),ALLOCATABLE :: YEMIS_NAME ! species name + CHARACTER(LEN=12), DIMENSION(:),ALLOCATABLE :: YEMIS_NAME ! offline emitted species name INTEGER,DIMENSION(:),ALLOCATABLE :: INBTIMES! number of emission times array INTEGER,DIMENSION(:),ALLOCATABLE :: ITIMES ! emission times for a species INTEGER,DIMENSION(:),ALLOCATABLE :: IOFFNDX ! index array of offline emission species @@ -183,7 +179,7 @@ IF (INBOFF > 0) THEN CALL BUILD_EMISSTAB_n(HPROGRAM,KCH,CEMIS_NAME,INBTIMES,NEMIS_TIME,& IOFFNDX,TSEMISS,KLU,ILUOUT,IVERB,PRHOA) DO JSPEC = 1,INBOFF ! Loop on the number of species - YEMIS_NAME(JSPEC) = TSEMISS(JSPEC)%CNAME(1:6) + YEMIS_NAME(JSPEC) = TSEMISS(JSPEC)%CNAME(1:12) END DO CALL BUILD_PRONOSLIST_n(SIZE(TSEMISS),YEMIS_NAME,TSPRONOSLIST,KCH,ILUOUT,IVERB) DEALLOCATE(YEMIS_NAME) diff --git a/src/SURFEX/ch_init_snapn.F90 b/src/SURFEX/ch_init_snapn.F90 index 912531b65a220a85366c779e44c17f47ef152b29..88293df3546bc2a7993a011ca047d4c853a7f7e2 100644 --- a/src/SURFEX/ch_init_snapn.F90 +++ b/src/SURFEX/ch_init_snapn.F90 @@ -1,7 +1,3 @@ -!SURFEX_LIC Copyright 1994-2014 Meteo-France -!SURFEX_LIC This is part of the SURFEX software governed by the CeCILL-C licence -!SURFEX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!SURFEX_LIC for details. version 1. ! ######### SUBROUTINE CH_INIT_SNAP_n(HPROGRAM,KLU,HINIT,KCH,PRHOA) ! ####################################### @@ -24,7 +20,6 @@ !! MODIFICATIONS !! ------------- !! Original 11/2011 -!! J.Escobar 11/2013 : ajout use MODI_CH_OPEN_INPUTB !!----------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -128,7 +123,7 @@ DO JSPEC = 1,NEMIS_NBR ! Loop on the number of species CALL ABOR1_SFX('CH_INIT_SNAPN: PROBLEM WHEN READING NAME OF EMITTED CHEMICAL SPECIES') END IF WRITE(ILUOUT,*) ' Emission ',JSPEC,' : ',TRIM(YSPEC_NAME) - CEMIS_NAME(JSPEC) = YSPEC_NAME + CEMIS_NAME(JSPEC) = YSPEC_NAME(1:12) ! ! Read the potential emission of species for each snap DO JSNAP=1,NEMIS_SNAP @@ -137,11 +132,11 @@ DO JSPEC = 1,NEMIS_NBR ! Loop on the number of species END DO ! ! Read the temporal profiles of all snaps - YRECFM = "EMIS_"//TRIM(CEMIS_NAME(JSPEC))//"_M" + YRECFM = "E_"//TRIM(CEMIS_NAME(JSPEC))//"_M" CALL READ_SURF(HPROGRAM,YRECFM,XSNAP_MONTHLY(:,:,JSPEC),IRESP,YCOMMENT,HDIR='-') - YRECFM = "EMIS_"//TRIM(CEMIS_NAME(JSPEC))//"_D" + YRECFM = "E_"//TRIM(CEMIS_NAME(JSPEC))//"_D" CALL READ_SURF(HPROGRAM,YRECFM,XSNAP_DAILY(:,:,JSPEC),IRESP,YCOMMENT,HDIR='-') - YRECFM = "EMIS_"//TRIM(CEMIS_NAME(JSPEC))//"_H" + YRECFM = "E_"//TRIM(CEMIS_NAME(JSPEC))//"_H" CALL READ_SURF(HPROGRAM,YRECFM,XSNAP_HOURLY(:,:,JSPEC),IRESP,YCOMMENT,HDIR='-') END DO ! diff --git a/src/SURFEX/modd_ch_snapn.F90 b/src/SURFEX/modd_ch_snapn.F90 index 6cf7ab568170c7462937a36bf8a4a3bbf92cc84c..c50d97b0c6c4110243b2b0598ed84f17293b2529 100644 --- a/src/SURFEX/modd_ch_snapn.F90 +++ b/src/SURFEX/modd_ch_snapn.F90 @@ -1,7 +1,3 @@ -!SURFEX_LIC Copyright 1994-2014 Meteo-France -!SURFEX_LIC This is part of the SURFEX software governed by the CeCILL-C licence -!SURFEX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!SURFEX_LIC for details. version 1. ! ########################### MODULE MODD_CH_SNAP_n ! ########################### @@ -55,7 +51,7 @@ TYPE CH_EMIS_SNAP_t ! ! 'LEGAL' : LEGAL time ! ! - CHARACTER(LEN=6), DIMENSION(:), POINTER :: CEMIS_NAME + CHARACTER(LEN=12), DIMENSION(:), POINTER :: CEMIS_NAME ! ! name of the chemical fields (emitted species) CHARACTER(LEN=40), DIMENSION(:), POINTER :: CEMIS_COMMENT ! ! comment on the chemical fields (emitted species) @@ -94,7 +90,7 @@ INTEGER, POINTER :: NEMIS_NBR=>NULL() !$OMP THREADPRIVATE(CSNAP_TIME_REF) CHARACTER(LEN=40), DIMENSION(:), POINTER :: CEMIS_COMMENT=>NULL() !$OMP THREADPRIVATE(CEMIS_COMMENT) - CHARACTER(LEN=6), DIMENSION(:), POINTER :: CEMIS_NAME=>NULL() + CHARACTER(LEN=12), DIMENSION(:), POINTER :: CEMIS_NAME=>NULL() !$OMP THREADPRIVATE(CEMIS_NAME) REAL, DIMENSION(:,:), POINTER:: XEMIS_FIELDS=>NULL() !$OMP THREADPRIVATE(XEMIS_FIELDS) diff --git a/src/SURFEX/pgd_chemistry_snap.F90 b/src/SURFEX/pgd_chemistry_snap.F90 index 25b8a883b912e9ef59a2535f174f9636a7bf21dc..2474b70d153e62f101567f71209ba8226b5d46c4 100644 --- a/src/SURFEX/pgd_chemistry_snap.F90 +++ b/src/SURFEX/pgd_chemistry_snap.F90 @@ -1,7 +1,3 @@ -!SURFEX_LIC Copyright 1994-2014 Meteo-France -!SURFEX_LIC This is part of the SURFEX software governed by the CeCILL-C licence -!SURFEX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!SURFEX_LIC for details. version 1. ! ######### SUBROUTINE PGD_CHEMISTRY_SNAP(HPROGRAM,OCH_EMIS) ! ############################################################## @@ -90,7 +86,7 @@ INTEGER :: JSNAP ! loop counter on SNAP categories ! ------------------------ ! REAL(KIND=JPRB) :: ZHOOK_HANDLE - CHARACTER(LEN=6), DIMENSION(JPEMISMAX_S):: CEMIS_NAME + CHARACTER(LEN=12), DIMENSION(JPEMISMAX_S):: CEMIS_NAME CHARACTER(LEN=40), DIMENSION(JPEMISMAX_S):: CEMIS_COMMENT CHARACTER(LEN=28), DIMENSION(JPEMISMAX_S):: CSNAP_MONTHLY_FILE CHARACTER(LEN=28), DIMENSION(JPEMISMAX_S):: CSNAP_DAILY_FILE diff --git a/src/SURFEX/write_diag_ch_snapn.F90 b/src/SURFEX/write_diag_ch_snapn.F90 index 114ea309fe2ab3105705330b04cc06de11580d95..a434db7eadbba903128d64da48b2481be4bcc6c7 100644 --- a/src/SURFEX/write_diag_ch_snapn.F90 +++ b/src/SURFEX/write_diag_ch_snapn.F90 @@ -1,7 +1,3 @@ -!SURFEX_LIC Copyright 1994-2014 Meteo-France -!SURFEX_LIC This is part of the SURFEX software governed by the CeCILL-C licence -!SURFEX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!SURFEX_LIC for details. version 1. ! ######### SUBROUTINE WRITE_DIAG_CH_SNAP_n(HPROGRAM) ! ################################# @@ -54,7 +50,7 @@ IMPLICIT NONE ! INTEGER :: IRESP ! IRESP : return-code if a problem appears - CHARACTER(LEN=12) :: YRECFM ! Name of the article to be read + CHARACTER(LEN=16) :: YRECFM ! Name of the article to be read CHARACTER(LEN=100):: YCOMMENT ! Comment string ! INTEGER :: JSPEC @@ -74,7 +70,7 @@ IF (LHOOK) CALL DR_HOOK('WRITE_DIAG_CH_SNAP_n',0,ZHOOK_HANDLE) IF (LEMIS_FIELDS) THEN ! DO JSPEC=1,NEMIS_NBR - YRECFM = "EMIS_"//TRIM(CEMIS_NAME(JSPEC)) + YRECFM = "E_"//TRIM(CEMIS_NAME(JSPEC)) YCOMMENT = "Emission data at time t (ppm*m/s)" CALL WRITE_SURF(HPROGRAM,YRECFM,XEMIS_FIELDS(:,JSPEC),IRESP,HCOMMENT=YCOMMENT) END DO diff --git a/src/SURFEX/writesurf_snapn.F90 b/src/SURFEX/writesurf_snapn.F90 index 777e0b2eaccab143483584cddb24eaeb06fa9281..aec6cc6abf2957e6f3329ab796d7f69f85d899cb 100644 --- a/src/SURFEX/writesurf_snapn.F90 +++ b/src/SURFEX/writesurf_snapn.F90 @@ -1,7 +1,3 @@ -!SURFEX_LIC Copyright 1994-2014 Meteo-France -!SURFEX_LIC This is part of the SURFEX software governed by the CeCILL-C licence -!SURFEX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt -!SURFEX_LIC for details. version 1. ! ######### SUBROUTINE WRITESURF_SNAP_n(HPROGRAM) ! ####################################################################### @@ -60,11 +56,11 @@ DO JSPEC=1,NEMIS_NBR CALL WRITE_SURF(HPROGRAM,YRECFM,CEMIS_NAME(JSPEC),IRESP,YCOMMENT) ! ! Writes the temporal profiles of all snaps - YRECFM = "EMIS_"//TRIM(CEMIS_NAME(JSPEC))//"_M" + YRECFM = "E_"//TRIM(CEMIS_NAME(JSPEC))//"_M" CALL WRITE_SURF(HPROGRAM,YRECFM,XSNAP_MONTHLY(:,:,JSPEC),IRESP,YCOMMENT,HDIR='-') - YRECFM = "EMIS_"//TRIM(CEMIS_NAME(JSPEC))//"_D" + YRECFM = "E_"//TRIM(CEMIS_NAME(JSPEC))//"_D" CALL WRITE_SURF(HPROGRAM,YRECFM,XSNAP_DAILY(:,:,JSPEC),IRESP,YCOMMENT,HDIR='-') - YRECFM = "EMIS_"//TRIM(CEMIS_NAME(JSPEC))//"_H" + YRECFM = "E_"//TRIM(CEMIS_NAME(JSPEC))//"_H" CALL WRITE_SURF(HPROGRAM,YRECFM,XSNAP_HOURLY(:,:,JSPEC),IRESP,YCOMMENT,HDIR='-') ! Writes the potential emission of species for each snap DO JSNAP=1,NEMIS_SNAP