Maud 29/04/2014 : correction bug emissions chimiques
authorGaelle Tanguy <gaelle.tanguy@meteo.fr>
Tue, 29 Apr 2014 09:41:37 +0000 (09:41 +0000)
committerPhilippe WAUTELET <philippe.wautelet@aero.obs-mip.fr>
Thu, 19 May 2016 14:44:49 +0000 (16:44 +0200)
19 files changed:
src/MNH/ch_aer_init_soa.f90
src/MNH/ch_aer_trans.f90
src/MNH/ch_aqueous_check.f90
src/MNH/ch_model0d.f90
src/MNH/ch_monitorn.f90
src/MNH/ch_nnares.f90
src/MNH/ch_solve_ph.f90
src/MNH/modd_ch_aerosol.f90
src/MNH/modd_ch_m9.f90 [deleted file]
src/SURFEX/build_emisstabn.F90
src/SURFEX/build_pronoslistn.F90
src/SURFEX/ch_conversion_factor.F90
src/SURFEX/ch_emission_fluxn.F90
src/SURFEX/ch_init_emissionn.F90
src/SURFEX/ch_init_snapn.F90
src/SURFEX/modd_ch_snapn.F90
src/SURFEX/pgd_chemistry_snap.F90
src/SURFEX/write_diag_ch_snapn.F90
src/SURFEX/writesurf_snapn.F90

index d67ef88..0dbc529 100644 (file)
@@ -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
index a0f5724..d8844d1 100644 (file)
@@ -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
index 4046fd2..9a59b93 100644 (file)
@@ -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
index 663e22a..70c665d 100644 (file)
@@ -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
 
 
index a84faf5..2083e14 100644 (file)
@@ -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
 !
index 8268425..a0c9d8f 100644 (file)
@@ -70,7 +70,6 @@ END MODULE MODI_CH_NNARES
 !!   EXTERNAL
 !!   -------
 !!
-!USE MODD_CH_M9
 USE MODD_CH_AEROSOL
 !!
 !!   IMPLICIT ARGUMENTS
index 8e30c89..0c0c430 100644 (file)
@@ -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
index b2c2a11..c6ff57f 100644 (file)
@@ -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 (file)
index 25264b0..0000000
+++ /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
-!
-!========================================================================
index 4b689a9..bb27f04 100644 (file)
@@ -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
index 5fbabb0..e4f2dee 100644 (file)
@@ -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
index dddca19..8efe473 100644 (file)
@@ -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
index 6548ae9..6d9b29a 100644 (file)
@@ -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 
index b07f0e1..7522578 100644 (file)
@@ -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)
index 912531b..88293df 100644 (file)
@@ -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
 !
index 6cf7ab5..c50d97b 100644 (file)
@@ -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)
index 25b8a88..2474b70 100644 (file)
@@ -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
index 114ea30..a434db7 100644 (file)
@@ -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
index 777e0b2..aec6cc6 100644 (file)
@@ -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