Skip to content
Snippets Groups Projects
ch_aer_trans.f90 59.7 KiB
Newer Older
  • Learn to ignore specific revisions
  • !ORILAM_LIC Copyright 1994-2014 CNRS, Meteo-France and Universite Paul Sabatier
    !ORILAM_LIC This is part of the ORILAM software governed by the CeCILL-C licence
    !ORILAM_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
    !ORILAM_LIC for details.
    
    !-----------------------------------------------------------------
    !--------------- special set of characters for RCS information
    !-----------------------------------------------------------------
    ! $Source$ $Revision$
    ! MASDEV4_7 chimie 2007/03/02 13:59:36
    !-----------------------------------------------------------------
    !!   ########################
         MODULE MODI_CH_AER_TRANS
    !!   ########################
    !!
    INTERFACE
    !!
    
    SUBROUTINE CH_AER_TRANS(KDIR, PM, PSIG0, PRG0, PN0, PRHOP0, PAERO,     &
                      PCONC, PCTOTG, PCTOTA, PCCTOT,PFRAC,PMI,PMASK,HSCHEME)
    
    
    
    IMPLICIT NONE
    INTEGER,                  INTENT(IN)    :: KDIR    ! KDIR = 0 gas -> aero
                                                       ! KDIR = 1 aero -> gas
    REAL,   DIMENSION(:,:),   INTENT(INOUT) :: PM      ! moments
    REAL,   DIMENSION(:,:),   INTENT(INOUT) :: PSIG0, PRG0, PN0, PRHOP0, PCTOTG
    REAL,   DIMENSION(:,:,:), INTENT(INOUT) :: PCTOTA, PCCTOT
    REAL,   DIMENSION(:,:),   INTENT(INOUT) :: PCONC
    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)    :: HSCHEME
    
    
    END SUBROUTINE CH_AER_TRANS
    !!
    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,HSCHEME)
    !!   #######################################################################
    
    !!
    !!    PURPOSE
    !!    -------
    !!      Transfer of gaz phase species into aerosol variables (KDIR = 0)
    !!    and back (KDIR = 1) after call to the aerosol module.
    !!
    !!    REFERENCE
    !!    ---------
    !a!    none
    !!
    !!    AUTHOR
    !!    ------
    !!    Vincent Crassier (LA)
    !!
    !!    MODIFICATIONS
    !!    -------------
    !!    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
    !!    --------
    !!    None
    !!
    USE MODD_CH_AEROSOL
    USE MODD_CST, ONLY : XMNH_TINY
    
    !!
    IMPLICIT NONE
    !!
    !-------------------------------------------------------------------------------
    !
    !*       0.     DECLARATIONS
    !               ------------
    !
    !*      0.1    declarations of arguments
    INTEGER,                  INTENT(IN)    :: KDIR    ! KDIR = 0 gas -> aero
                                                              ! KDIR = 1 aero -> gas
    REAL,   DIMENSION(:,:),   INTENT(INOUT) :: PM      ! moments
    REAL,   DIMENSION(:,:),   INTENT(INOUT) :: PSIG0, PRG0, PN0, PRHOP0, PCTOTG
    REAL,   DIMENSION(:,:,:), INTENT(INOUT) :: PCTOTA, PCCTOT
    REAL,   DIMENSION(:,:),   INTENT(INOUT) :: PCONC
    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) :: HSCHEME
    
    
    !
    !
    !*      0.2    declarations local variables
    !
    INTEGER :: JJ, JN  ! loop counter
    !   variables for the aerosol module
    !
    REAL, DIMENSION(SIZE(PM,1)) :: ZSIGMA
    REAL, DIMENSION(SIZE(PM,1)) :: ZSUM
    REAL, SAVE, DIMENSION(JPIN) :: ZPMIN
    LOGICAL, SAVE               :: GPHYSLIM = .TRUE. ! flag
    REAL :: ZRGMIN
    REAL, PARAMETER :: ZCSTAVOG=6.0221367E+11
    REAL    :: ZINIRADIUSI, ZINIRADIUSJ
    
    
    !
    !-------------------------------------------------------------------------------
    !
    IF (KDIR .EQ. 0) THEN 
    !
    !*       1.     TRANSFER FROM GAS TO AEROSOL MODULE
    !               ------------------------------------
    !
    IF (GPHYSLIM) THEN
    GPHYSLIM=.FALSE.
    
    IF (CRGUNIT=="MASS") THEN
    ZINIRADIUSI = XINIRADIUSI * EXP(-3.*(LOG(XINISIGI))**2)
    ZINIRADIUSJ = XINIRADIUSJ * EXP(-3.*(LOG(XINISIGJ))**2)
    ELSE
    ZINIRADIUSI = XINIRADIUSI 
    ZINIRADIUSJ = XINIRADIUSJ
    END IF
    
    ZPMIN(1) = XN0IMIN
    ZRGMIN = ZINIRADIUSI
    ZPMIN(2) = ZPMIN(1) * (ZRGMIN**3)*EXP(4.5 * LOG(XSIGIMIN)**2) 
    ZPMIN(3) = ZPMIN(1) * (ZRGMIN**6)*EXP(18. * LOG(XSIGIMIN)**2)
    
    ZPMIN(4) = XN0JMIN
    ZRGMIN = ZINIRADIUSJ
    ZPMIN(5) = ZPMIN(4) * (ZRGMIN**3)*EXP(4.5 * LOG(XSIGJMIN)**2) 
    ZPMIN(6) = ZPMIN(4) * (ZRGMIN**6)*EXP(18. * LOG(XSIGJMIN)**2)
    
    END IF
    
    PCTOTG(:,:)   = 0.
    PCTOTA(:,:,:) = 0.
    PFRAC(:,:) = 0.
    PCONC(:,:) = MAX(PCONC(:,:), XMNH_TINY)
    PAERO(:,:) = MAX(PAERO(:,:), XMNH_TINY)
    
    !*       1.n    transfer aerosol mass from gas to aerosol variables
    !               (and conversion of molec/cm3 to microgram/m3)
    !
    ! gas phase species
      PCTOTG(:,JP_AER_SO4g) = 0. !all sulfates has been converted into aerosol phase
      PCTOTG(:,JP_AER_NO3g) = PCONC(:,JP_CH_HNO3)*XHNO3/ZCSTAVOG
      PCTOTG(:,JP_AER_NH3g) = PCONC(:,JP_CH_NH3)*XNH3/ZCSTAVOG
    !
    ! aerosol phase
      PCTOTA(:,JP_AER_SO4,1) = PAERO(:,JP_CH_SO4i)*PMI(:,JP_AER_SO4)/ZCSTAVOG
      PCTOTA(:,JP_AER_SO4,2) = PAERO(:,JP_CH_SO4j)*PMI(:,JP_AER_SO4)/ZCSTAVOG
      PCTOTA(:,JP_AER_NO3,1) = PAERO(:,JP_CH_NO3i)*PMI(:,JP_AER_NO3)/ZCSTAVOG
      PCTOTA(:,JP_AER_NO3,2) = PAERO(:,JP_CH_NO3j)*PMI(:,JP_AER_NO3)/ZCSTAVOG
      PCTOTA(:,JP_AER_NH3,1) = PAERO(:,JP_CH_NH3i)*PMI(:,JP_AER_NH3)/ZCSTAVOG
      PCTOTA(:,JP_AER_NH3,2) = PAERO(:,JP_CH_NH3j)*PMI(:,JP_AER_NH3)/ZCSTAVOG
    !
    ! water
      PCTOTA(:,JP_AER_H2O,1) = PAERO(:,JP_CH_H2Oi)*PMI(:,JP_AER_H2O)/ZCSTAVOG
      PCTOTA(:,JP_AER_H2O,2) = PAERO(:,JP_CH_H2Oj)*PMI(:,JP_AER_H2O)/ZCSTAVOG
    !
    ! primary organic carbon
      PCTOTA(:,JP_AER_OC,1) = PAERO(:,JP_CH_OCi)*PMI(:,JP_AER_OC)/ZCSTAVOG
      PCTOTA(:,JP_AER_OC,2) = PAERO(:,JP_CH_OCj)*PMI(:,JP_AER_OC)/ZCSTAVOG
    ! primary black carbon
      PCTOTA(:,JP_AER_BC,1) = PAERO(:,JP_CH_BCi)*PMI(:,JP_AER_BC)/ZCSTAVOG
      PCTOTA(:,JP_AER_BC,2) = PAERO(:,JP_CH_BCj)*PMI(:,JP_AER_BC)/ZCSTAVOG
    ! dust
      PCTOTA(:,JP_AER_DST,1) = PAERO(:,JP_CH_DSTi)*PMI(:,JP_AER_DST)/ZCSTAVOG
      PCTOTA(:,JP_AER_DST,2) = PAERO(:,JP_CH_DSTj)*PMI(:,JP_AER_DST)/ZCSTAVOG
    
    IF (NSOA .EQ. 10) THEN
    IF (TRIM(CORGANIC) == 'PUN') THEN
    
      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
    
      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 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)
      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_UR29) *XUR29/ZCSTAVOG +&
                              PCONC(:,JP_CH_UR30) *XUR30/ZCSTAVOG +&
                              PCONC(:,JP_CH_RP13)*XRP13/ZCSTAVOG  +&
                              PCONC(:,JP_CH_RP17)*XRP17/ZCSTAVOG  +&
                              PCONC(:,JP_CH_RP18)*XRP18/ZCSTAVOG 
      PFRAC(:,JP_CH_UR29)  = PCONC(:,JP_CH_UR29) *XUR29/ZCSTAVOG / PCTOTG(:,JP_AER_SOA2)
      PFRAC(:,JP_CH_UR30)  = PCONC(:,JP_CH_UR30) *XUR30/ZCSTAVOG / PCTOTG(:,JP_AER_SOA2)
      PFRAC(:,JP_CH_RP13) = PCONC(:,JP_CH_RP13)  *XRP13/ZCSTAVOG / PCTOTG(:,JP_AER_SOA2)
      PFRAC(:,JP_CH_RP17) = PCONC(:,JP_CH_RP17)  *XRP17/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_UR29)  * XUR29 + &
                            PFRAC(:,JP_CH_UR30) * XUR30 + &
                            PFRAC(:,JP_CH_RP13) * XRP13 + &
                            PFRAC(:,JP_CH_RP17) * XRP17 + &
                            PFRAC(:,JP_CH_RP18) * XRP18
    
    
      PCTOTG(:,JP_AER_SOA3) = PCONC(:,JP_CH_RPR9)*XRPR9/ZCSTAVOG + &
                              PCONC(:,JP_CH_RP12)*XRP12/ZCSTAVOG
      PFRAC(:,JP_CH_RPR9) = PCONC(:,JP_CH_RPR9)  *XRPR9/ZCSTAVOG / PCTOTG(:,JP_AER_SOA3)
      PFRAC(:,JP_CH_RP12) = PCONC(:,JP_CH_RP12)  *XRP12/ZCSTAVOG / PCTOTG(:,JP_AER_SOA3)
      PMI(:,JP_AER_SOA3) =  PFRAC(:,JP_CH_RPR9) * XRPR9 + &
                            PFRAC(:,JP_CH_RP12) * XRP12
     
      PCTOTG(:,JP_AER_SOA4) = PCONC(:,JP_CH_UR3) *XUR3/ZCSTAVOG + &
                              PCONC(:,JP_CH_UR23)*XUR23/ZCSTAVOG
      PFRAC(:,JP_CH_UR3) = PCONC(:,JP_CH_UR3)   *XUR3/ZCSTAVOG / PCTOTG(:,JP_AER_SOA4)
      PFRAC(:,JP_CH_UR23)= PCONC(:,JP_CH_UR23)  *XUR23/ZCSTAVOG / PCTOTG(:,JP_AER_SOA4)
      PMI(:,JP_AER_SOA4) =  PFRAC(:,JP_CH_UR3) * XUR3 + &
                            PFRAC(:,JP_CH_UR23) * XUR23
    
      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_UR31) *XUR31/ZCSTAVOG +&
                              PCONC(:,JP_CH_AP1)  *XAP1 /ZCSTAVOG +&
                              PCONC(:,JP_CH_AP6)  *XAP6 /ZCSTAVOG +&
                              PCONC(:,JP_CH_UR22) *XUR22/ZCSTAVOG 
      PFRAC(:,JP_CH_UR31)   = PCONC(:,JP_CH_UR31) *XUR31/ZCSTAVOG / PCTOTG(:,JP_AER_SOA6)
      PFRAC(:,JP_CH_AP1)    = PCONC(:,JP_CH_AP1)  *XAP1/ZCSTAVOG  / PCTOTG(:,JP_AER_SOA6)
      PFRAC(:,JP_CH_AP6)    = PCONC(:,JP_CH_AP6)  *XAP6/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_UR31) *XUR31 + &
                              PFRAC(:,JP_CH_AP1)  *XAP1  + &
                              PFRAC(:,JP_CH_AP6)  *XAP6  + &
                              PFRAC(:,JP_CH_UR22) *XUR22
    
      PCTOTG(:,JP_AER_SOA7) =  PCONC(:,JP_CH_ADAC)*XADAC/ZCSTAVOG +&
                               PCONC(:,JP_CH_UR2) *XUR2 /ZCSTAVOG +&
                               PCONC(:,JP_CH_UR14)*XUR14/ZCSTAVOG +&
                               PCONC(:,JP_CH_UR27)*XUR27/ZCSTAVOG +&
                               PCONC(:,JP_CH_RPR4)*XRPR4/ZCSTAVOG +&
                               PCONC(:,JP_CH_RPR7)*XRPR7/ZCSTAVOG +&
                               PCONC(:,JP_CH_RP19)*XRP19/ZCSTAVOG +&
                               PCONC(:,JP_CH_RP14)*XRP14/ZCSTAVOG 
    
    
      PFRAC(:,JP_CH_ADAC)  =  PCONC(:,JP_CH_ADAC) *XADAC/ZCSTAVOG / PCTOTG(:,JP_AER_SOA7)
      PFRAC(:,JP_CH_UR2 )  =  PCONC(:,JP_CH_UR2 ) *XUR2 /ZCSTAVOG / PCTOTG(:,JP_AER_SOA7)
      PFRAC(:,JP_CH_UR14)  =  PCONC(:,JP_CH_UR14) *XUR14/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_RP19)  =  PCONC(:,JP_CH_RP19) *XRP19/ZCSTAVOG / PCTOTG(:,JP_AER_SOA7)
      PFRAC(:,JP_CH_RP14)  =  PCONC(:,JP_CH_RP14) *XRP14/ZCSTAVOG / PCTOTG(:,JP_AER_SOA7)
      PMI(:,JP_AER_SOA7)   = PFRAC(:,JP_CH_ADAC) * XADAC + &
                             PFRAC(:,JP_CH_UR2 ) * XUR2  + &
                             PFRAC(:,JP_CH_UR14) * XUR14 + &
                             PFRAC(:,JP_CH_RPR4) * XRPR4 + &
                             PFRAC(:,JP_CH_RPR7) * XRPR7 + &
                             PFRAC(:,JP_CH_RP19) * XRP19 + &
                             PFRAC(:,JP_CH_RP14) * XRP14
    
      PCTOTG(:,JP_AER_SOA8) = PCONC(:,JP_CH_UR11) *XUR11/ZCSTAVOG + &
                              PCONC(:,JP_CH_UR15) *XUR15/ZCSTAVOG + &
                              PCONC(:,JP_CH_AP10) *XAP10/ZCSTAVOG 
      PFRAC(:,JP_CH_UR11)   = PCONC(:,JP_CH_UR11) *XUR11/ZCSTAVOG / PCTOTG(:,JP_AER_SOA8)
      PFRAC(:,JP_CH_UR15)   = PCONC(:,JP_CH_UR15) *XUR15/ZCSTAVOG / PCTOTG(:,JP_AER_SOA8)
      PFRAC(:,JP_CH_AP10)   = PCONC(:,JP_CH_AP10) *XAP10/ZCSTAVOG / PCTOTG(:,JP_AER_SOA8)
      PMI(:,JP_AER_SOA8)    = PFRAC(:,JP_CH_UR11) *XUR11 + &
                              PFRAC(:,JP_CH_UR15) *XUR15 + &
                              PFRAC(:,JP_CH_AP10) *XAP10
    
      PCTOTG(:,JP_AER_SOA9) = PCONC(:,JP_CH_UR20) *XUR20/ZCSTAVOG +&
                              PCONC(:,JP_CH_UR34) *XUR34/ZCSTAVOG +&
                              PCONC(:,JP_CH_AP11) *XAP11/ZCSTAVOG +&
                              PCONC(:,JP_CH_AP12) *XAP12/ZCSTAVOG +&
                              PCONC(:,JP_CH_UR26) *XUR26/ZCSTAVOG 
      PFRAC(:,JP_CH_UR20)   = PCONC(:,JP_CH_UR20) *XUR20/ZCSTAVOG / PCTOTG(:,JP_AER_SOA9)
      PFRAC(:,JP_CH_UR34)   = PCONC(:,JP_CH_UR34) *XUR34/ZCSTAVOG / PCTOTG(:,JP_AER_SOA9)
      PFRAC(:,JP_CH_AP11)   = PCONC(:,JP_CH_AP11) *XAP11/ZCSTAVOG / PCTOTG(:,JP_AER_SOA9)
      PFRAC(:,JP_CH_AP12)   = PCONC(:,JP_CH_AP12) *XAP12/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_UR20)*XUR20 + &
                           PFRAC(:,JP_CH_UR34)*XUR34 + &
                           PFRAC(:,JP_CH_AP11)*XAP11 + &
                           PFRAC(:,JP_CH_AP12)*XAP12 + &
                           PFRAC(:,JP_CH_UR26)*XUR26
    
      
      PCTOTG(:,JP_AER_SOA10) = PCONC(:,JP_CH_PAN8)*XPAN8/ZCSTAVOG +&
                               PCONC(:,JP_CH_UR5)  *XUR5/ZCSTAVOG +&
                               PCONC(:,JP_CH_UR6)  *XUR6/ZCSTAVOG +&
                               PCONC(:,JP_CH_UR7)  *XUR7/ZCSTAVOG +&
                               PCONC(:,JP_CH_UR8)  *XUR8/ZCSTAVOG +&
                               PCONC(:,JP_CH_AP8)  *XAP8/ZCSTAVOG 
      PFRAC(:,JP_CH_UR5)  =  PCONC(:,JP_CH_UR5)  *XUR5/ZCSTAVOG / PCTOTG(:,JP_AER_SOA10)
      PFRAC(:,JP_CH_UR6)  =  PCONC(:,JP_CH_UR6)  *XUR6/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_AP8)  =  PCONC(:,JP_CH_AP8)  *XAP8/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_UR5)  *XUR5 + &
                            PFRAC(:,JP_CH_UR6)  *XUR6 + &
                            PFRAC(:,JP_CH_UR7)  *XUR7 + &
                            PFRAC(:,JP_CH_UR8)  *XUR8 + &
                            PFRAC(:,JP_CH_AP8)  *XAP8 + &
                            PFRAC(:,JP_CH_PAN8) *XPAN8
    
    
    END IF
    IF (TRIM(CORGANIC) == 'MPMPO') THEN
    
      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
    
      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
    
      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_URG1) * XURG1/ZCSTAVOG 
      PFRAC(:,JP_CH_URG1)   = PCONC(:,JP_CH_URG1) * XURG1/ZCSTAVOG / PCTOTG(:,JP_AER_SOA6)
      PMI(:,JP_AER_SOA6)    = PFRAC(:,JP_CH_URG1) * XURG1 
    
      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 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
    
      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 
      PFRAC(:,JP_CH_AP1) = PCONC(:,JP_CH_AP1) *XAP1/ZCSTAVOG   / PCTOTG(:,JP_AER_SOA1)
      PFRAC(:,JP_CH_AP6) = PCONC(:,JP_CH_AP6) *XAP6/ZCSTAVOG   / PCTOTG(:,JP_AER_SOA1)
      PFRAC(:,JP_CH_UR31) = PCONC(:,JP_CH_UR31) *XUR31/ZCSTAVOG / PCTOTG(:,JP_AER_SOA1)
      PMI(:,JP_AER_SOA1) =  PFRAC(:,JP_CH_AP1) * XAP1 + &
                            PFRAC(:,JP_CH_AP6) * XAP6 + &
                            PFRAC(:,JP_CH_UR31)* XUR31
                            
      PCTOTG(:,JP_AER_SOA2) = PCONC(:,JP_CH_UR2) *XUR2/ZCSTAVOG   +&
                              PCONC(:,JP_CH_UR14) *XUR14/ZCSTAVOG +&
                              PCONC(:,JP_CH_ADAC) *XADAC/ZCSTAVOG +&
                              PCONC(:,JP_CH_RP14)*XRP14/ZCSTAVOG  +&
                              PCONC(:,JP_CH_RP19)*XRP19/ZCSTAVOG  +&
                              PCONC(:,JP_CH_RPR7)*XRPR7/ZCSTAVOG 
      PFRAC(:,JP_CH_UR2)  = PCONC(:,JP_CH_UR2)   *XUR2/ZCSTAVOG  / PCTOTG(:,JP_AER_SOA2)
      PFRAC(:,JP_CH_UR14) = PCONC(:,JP_CH_UR14)  *XUR14/ZCSTAVOG / PCTOTG(:,JP_AER_SOA2)
      PFRAC(:,JP_CH_RP14) = PCONC(:,JP_CH_RP14)  *XRP14/ZCSTAVOG / PCTOTG(:,JP_AER_SOA2)
      PFRAC(:,JP_CH_RP19) = PCONC(:,JP_CH_RP19)  *XRP19/ZCSTAVOG / PCTOTG(:,JP_AER_SOA2)
      PFRAC(:,JP_CH_RPR7) = PCONC(:,JP_CH_RPR7)  *XRPR7/ZCSTAVOG / PCTOTG(:,JP_AER_SOA2)
      PFRAC(:,JP_CH_ADAC) = PCONC(:,JP_CH_ADAC)  *XADAC/ZCSTAVOG / PCTOTG(:,JP_AER_SOA2)
      PMI(:,JP_AER_SOA2)  = PFRAC(:,JP_CH_UR2)  * XUR2  + &
                            PFRAC(:,JP_CH_UR14) * XUR14 + &
                            PFRAC(:,JP_CH_ADAC) * XADAC + &
                            PFRAC(:,JP_CH_RP14) * XRP14 + &
                            PFRAC(:,JP_CH_RP19) * XRP19 + &
                            PFRAC(:,JP_CH_RPR7) * XRPR7
    
      PCTOTG(:,JP_AER_SOA3) = PCONC(:,JP_CH_AP10)*XAP10/ZCSTAVOG + &
                              PCONC(:,JP_CH_UR11)*XUR11/ZCSTAVOG + &
                              PCONC(:,JP_CH_UR15)*XUR15/ZCSTAVOG 
      PFRAC(:,JP_CH_AP10) = PCONC(:,JP_CH_AP10)   *XAP10/ZCSTAVOG  / PCTOTG(:,JP_AER_SOA3)
      PFRAC(:,JP_CH_UR11) = PCONC(:,JP_CH_UR11)   *XUR11/ZCSTAVOG  / PCTOTG(:,JP_AER_SOA3)
      PFRAC(:,JP_CH_UR15) = PCONC(:,JP_CH_UR15)   *XUR15/ZCSTAVOG  / PCTOTG(:,JP_AER_SOA3)
      PMI(:,JP_AER_SOA3) =  PFRAC(:,JP_CH_AP10) * XAP10 + &
                            PFRAC(:,JP_CH_UR11) * XUR15 + &
                            PFRAC(:,JP_CH_UR15) * XUR15 
     
      PCTOTG(:,JP_AER_SOA4) = PCONC(:,JP_CH_AP11)*XAP11/ZCSTAVOG + & 
                              PCONC(:,JP_CH_AP12)*XAP12/ZCSTAVOG + &
                              PCONC(:,JP_CH_UR20)*XUR20/ZCSTAVOG + &
                              PCONC(:,JP_CH_UR34)*XUR34/ZCSTAVOG
      PFRAC(:,JP_CH_AP11) = PCONC(:,JP_CH_AP11) *XAP11/ZCSTAVOG / PCTOTG(:,JP_AER_SOA4)
      PFRAC(:,JP_CH_AP12) = PCONC(:,JP_CH_AP12) *XAP12/ZCSTAVOG / PCTOTG(:,JP_AER_SOA4)
      PFRAC(:,JP_CH_UR20) = PCONC(:,JP_CH_UR20) *XUR20/ZCSTAVOG / PCTOTG(:,JP_AER_SOA4)
      PFRAC(:,JP_CH_UR34) = PCONC(:,JP_CH_UR34) *XUR34/ZCSTAVOG / PCTOTG(:,JP_AER_SOA4)
      PMI(:,JP_AER_SOA4) =  PFRAC(:,JP_CH_AP11) * XAP11 + &
                            PFRAC(:,JP_CH_AP11) * XAP11 + &
                            PFRAC(:,JP_CH_UR20) * XUR20 + &
                            PFRAC(:,JP_CH_UR34) * XUR34 
    
      PCTOTG(:,JP_AER_SOA5) = PCONC(:,JP_CH_UR5)*XUR5/ZCSTAVOG + &
                              PCONC(:,JP_CH_UR6)*XUR6/ZCSTAVOG + &
                              PCONC(:,JP_CH_AP8)*XAP8/ZCSTAVOG + &
                              PCONC(:,JP_CH_AP7)* XAP7/ZCSTAVOG 
      PFRAC(:,JP_CH_UR5) = PCONC(:,JP_CH_UR5) * XUR5/ZCSTAVOG / PCTOTG(:,JP_AER_SOA5)
      PFRAC(:,JP_CH_UR6) = PCONC(:,JP_CH_UR6) * XUR6/ZCSTAVOG / PCTOTG(:,JP_AER_SOA5)
      PFRAC(:,JP_CH_AP7) = PCONC(:,JP_CH_AP7) * XAP7/ZCSTAVOG / PCTOTG(:,JP_AER_SOA5)
      PFRAC(:,JP_CH_AP8) = PCONC(:,JP_CH_AP8) * XAP8/ZCSTAVOG / PCTOTG(:,JP_AER_SOA5)
      PMI(:,JP_AER_SOA5)  = PFRAC(:,JP_CH_UR5) * XUR5 + &
                            PFRAC(:,JP_CH_UR6) * XUR6 + &
                            PFRAC(:,JP_CH_AP8) * XAP8 + &
                            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_UR29)* XUR29/ZCSTAVOG +&
                               PCONC(:,JP_CH_UR26)* XUR26/ZCSTAVOG +&
                               PCONC(:,JP_CH_UR30)* XUR30/ZCSTAVOG +&
                               PCONC(:,JP_CH_RP13)* XRP13/ZCSTAVOG +&
                               PCONC(:,JP_CH_RP17)* XRP17/ZCSTAVOG +&
                               PCONC(:,JP_CH_RP18)* XRP18/ZCSTAVOG 
    
      PFRAC(:,JP_CH_UR29)  =  PCONC(:,JP_CH_UR29) * XUR29/ZCSTAVOG / PCTOTG(:,JP_AER_SOA7)
      PFRAC(:,JP_CH_UR26)  =  PCONC(:,JP_CH_UR26) * XUR26/ZCSTAVOG / PCTOTG(:,JP_AER_SOA7)
      PFRAC(:,JP_CH_UR30)  =  PCONC(:,JP_CH_UR30) * XUR30/ZCSTAVOG / PCTOTG(:,JP_AER_SOA7)
      PFRAC(:,JP_CH_RP13)  =  PCONC(:,JP_CH_RP13) * XRP13/ZCSTAVOG / PCTOTG(:,JP_AER_SOA7)
      PFRAC(:,JP_CH_RP17)  =  PCONC(:,JP_CH_RP17) * XRP17/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_UR29)* XUR29 + &
                             PFRAC(:,JP_CH_UR26)* XUR26 + &
                             PFRAC(:,JP_CH_UR30)* XUR30 + &
                             PFRAC(:,JP_CH_RP13)* XRP13 + &
                             PFRAC(:,JP_CH_RP17)* XRP17 + &
                             PFRAC(:,JP_CH_RP18)* XRP18
    
      PCTOTG(:,JP_AER_SOA8) = PCONC(:,JP_CH_RPR9) *XRPR9/ZCSTAVOG + &
                              PCONC(:,JP_CH_RP12) *XRP12/ZCSTAVOG 
      PFRAC(:,JP_CH_RPR9)   = PCONC(:,JP_CH_RPR9) *XRPR9/ZCSTAVOG / PCTOTG(:,JP_AER_SOA8)
      PFRAC(:,JP_CH_RP12)   = PCONC(:,JP_CH_RP12) *XRP12/ZCSTAVOG / PCTOTG(:,JP_AER_SOA8)
      PMI(:,JP_AER_SOA8)    = PFRAC(:,JP_CH_RPR9) *XRPR9  + &
                              PFRAC(:,JP_CH_RP12) *XRP12
    
      PCTOTG(:,JP_AER_SOA9) = PCONC(:,JP_CH_UR3) *XUR3/ZCSTAVOG + &
                              PCONC(:,JP_CH_UR23)*XUR23/ZCSTAVOG + &
                              PCONC(:,JP_CH_UR8) *XUR8/ZCSTAVOG 
      PFRAC(:,JP_CH_UR3)    = PCONC(:,JP_CH_UR3) * XUR3 /ZCSTAVOG / PCTOTG(:,JP_AER_SOA9)
      PFRAC(:,JP_CH_UR23)   = PCONC(:,JP_CH_UR23) * XUR23/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_UR3) *XUR3 + &
                              PFRAC(:,JP_CH_UR23)*XUR23+ &
                              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
    
       END IF
    END IF
    
    
      PCTOTA(:,JP_AER_SOA1,1) = PAERO(:,JP_CH_SOA1i)*PMI(:,JP_AER_SOA1)/ZCSTAVOG
      PCTOTA(:,JP_AER_SOA1,2) = PAERO(:,JP_CH_SOA1j)*PMI(:,JP_AER_SOA1)/ZCSTAVOG
    
      PCTOTA(:,JP_AER_SOA2,1) = PAERO(:,JP_CH_SOA2i)*PMI(:,JP_AER_SOA2)/ZCSTAVOG
      PCTOTA(:,JP_AER_SOA2,2) = PAERO(:,JP_CH_SOA2j)*PMI(:,JP_AER_SOA2)/ZCSTAVOG
    
      PCTOTA(:,JP_AER_SOA3,1) = PAERO(:,JP_CH_SOA3i)*PMI(:,JP_AER_SOA3)/ZCSTAVOG
      PCTOTA(:,JP_AER_SOA3,2) = PAERO(:,JP_CH_SOA3j)*PMI(:,JP_AER_SOA3)/ZCSTAVOG
    
      PCTOTA(:,JP_AER_SOA4,1) = PAERO(:,JP_CH_SOA4i)*PMI(:,JP_AER_SOA4)/ZCSTAVOG
      PCTOTA(:,JP_AER_SOA4,2) = PAERO(:,JP_CH_SOA4j)*PMI(:,JP_AER_SOA4)/ZCSTAVOG
     
      PCTOTA(:,JP_AER_SOA5,1) = PAERO(:,JP_CH_SOA5i)*PMI(:,JP_AER_SOA5)/ZCSTAVOG
      PCTOTA(:,JP_AER_SOA5,2) = PAERO(:,JP_CH_SOA5j)*PMI(:,JP_AER_SOA5)/ZCSTAVOG
    
      PCTOTA(:,JP_AER_SOA6,1) = PAERO(:,JP_CH_SOA6i)*PMI(:,JP_AER_SOA6)/ZCSTAVOG
      PCTOTA(:,JP_AER_SOA6,2) = PAERO(:,JP_CH_SOA6j)*PMI(:,JP_AER_SOA6)/ZCSTAVOG
    
      PCTOTA(:,JP_AER_SOA7,1) = PAERO(:,JP_CH_SOA7i)*PMI(:,JP_AER_SOA7)/ZCSTAVOG
      PCTOTA(:,JP_AER_SOA7,2) = PAERO(:,JP_CH_SOA7j)*PMI(:,JP_AER_SOA7)/ZCSTAVOG
    
      PCTOTA(:,JP_AER_SOA8,1) = PAERO(:,JP_CH_SOA8i)*PMI(:,JP_AER_SOA8)/ZCSTAVOG
      PCTOTA(:,JP_AER_SOA8,2) = PAERO(:,JP_CH_SOA8j)*PMI(:,JP_AER_SOA8)/ZCSTAVOG
    
      PCTOTA(:,JP_AER_SOA9,1) = PAERO(:,JP_CH_SOA9i)*PMI(:,JP_AER_SOA9)/ZCSTAVOG
      PCTOTA(:,JP_AER_SOA9,2) = PAERO(:,JP_CH_SOA9j)*PMI(:,JP_AER_SOA9)/ZCSTAVOG
    
      PCTOTA(:,JP_AER_SOA10,1) = PAERO(:,JP_CH_SOA10i)*PMI(:,JP_AER_SOA10)/ZCSTAVOG
      PCTOTA(:,JP_AER_SOA10,2) = PAERO(:,JP_CH_SOA10j)*PMI(:,JP_AER_SOA10)/ZCSTAVOG
    
    END IF
    !
    
      PCTOTA(:,:,:) = MAX(PCTOTA(:,:,:),XMNH_TINY)
    !
    !*       1.n    transfer moment 0 from gas to aerosol variable
    !
      PM(:,1) = MAX(PAERO(:,JP_CH_M0i) * 1E+6, XMNH_TINY) ! convert from 1/cc to 1/m3
      PM(:,4) = MAX(PAERO(:,JP_CH_M0j) * 1E+6, XMNH_TINY) ! convert from 1/cc to 1/m3
    
    !
    !
    !*       1.n    calculate moment 3 from total aerosol mass
    !
      PM(:,2) = 0.
      PM(:,5) = 0.
      DO JJ = 1,NSP+NCARB+NSOA
        PM(:,2) = PM(:,2)+PCTOTA(:,JJ,1)/XFAC(JJ)
        PM(:,5) = PM(:,5)+PCTOTA(:,JJ,2)/XFAC(JJ)
      ENDDO
    
      !*       1.n    set moment 6 
    
    IF (LVARSIGI) THEN ! set M6 variable standard deviation
      PM(:,3) = MAX(PAERO(:,JP_CH_M6i), XMNH_TINY)
    ELSE ! fixed standard deviation
      PM(:,3) = PM(:,1) &
              * ( (PM(:,2)/PM(:,1))**(1./3.)  &
              * exp(-(3./2.)*log(XINISIGI)**2))**6 &
              * exp(18.*log(XINISIGI)**2)
    END IF
    
    IF (LVARSIGJ) THEN ! set M6 variable standard deviation
      PM(:,6) = MAX(PAERO(:,JP_CH_M6j), XMNH_TINY)
    ELSE ! fixed standard deviation
      PM(:,6) = PM(:,4) &
              * ( (PM(:,5)/PM(:,4))**(1./3.)  &
              * exp(-(3./2.)*log(XINISIGJ)**2))**6 &
              * exp(18.*log(XINISIGJ)**2)
    END IF
    
    
      
    !*********************************************
    ! Calcul de PCCTOT
    !**********************************************
    
    DO JN=1,JPMODE
      ZSUM(:)=0.
      DO JJ=1,NSP+NCARB+NSOA
       ZSUM(:)=ZSUM(:)+PCTOTA(:,JJ,JN)/XRHOI(JJ)
      END DO
    
      DO JJ=1,NSP+NCARB+NSOA
       PCCTOT(:,JJ,JN)=PCTOTA(:,JJ,JN)/(XRHOI(JJ)*ZSUM(:))
      ENDDO
    END DO
    
      !      compute the new particle density
    DO JN=1,JPMODE
      PRHOP0(:,JN)=0.
      DO JJ=1,NSP+NCARB+NSOA
       PRHOP0(:,JN)=PRHOP0(:,JN)+PCCTOT(:,JJ,JN)*XRHOI(JJ)
      ENDDO
    ENDDO
    !
    !*       1.n    set moment 6 (fixed or variable)
      
    DO JN=1,JPMODE
    
      IF (JN .EQ. 1) THEN
    
        IF (LVARSIGI) THEN ! variable dispersion for mode 1
    
          ZSIGMA(:)=PM(:,NM3(JN))**2/(PM(:,NM0(JN))*PM(:,NM6(JN)))
          ZSIGMA(:)=MIN(1-1E-10,ZSIGMA(:))
          ZSIGMA(:)=MAX(1E-10,ZSIGMA(:))
          ZSIGMA(:)= LOG(ZSIGMA(:))
          ZSIGMA(:)= EXP(1./3.*SQRT(-ZSIGMA(:)))
          WHERE (ZSIGMA(:) > XSIGIMAX)
          ZSIGMA(:) =  XSIGIMAX
          END WHERE
          WHERE (ZSIGMA(:) < XSIGIMIN)
          ZSIGMA(:) =  XSIGIMIN
          END WHERE
    
        ELSE ! fixed dispersion for mode 1
          ZSIGMA(:) = XINISIGI
        END IF
      END IF
    
    !
      IF (JN .EQ. 2) THEN
    
        IF (LVARSIGJ) THEN ! variable dispersion for mode 2
    
          ZSIGMA(:)=PM(:,NM3(JN))**2/(PM(:,NM0(JN))*PM(:,NM6(JN)))
          ZSIGMA(:)=MIN(1-1E-10,ZSIGMA(:))
          ZSIGMA(:)=MAX(1E-10,ZSIGMA(:))
          ZSIGMA(:)= LOG(ZSIGMA(:))
          ZSIGMA(:)= EXP(1./3.*SQRT(-ZSIGMA(:)))
          WHERE (ZSIGMA(:) > XSIGJMAX)
          ZSIGMA(:) =  XSIGJMAX
          END WHERE
          WHERE (ZSIGMA(:) < XSIGJMIN)
          ZSIGMA(:) =  XSIGJMIN
          END WHERE
    
        ELSE ! fixed dispersion for mode 2
          ZSIGMA(:) = XINISIGJ
        END IF
      END IF
    
    
    PSIG0(:,JN) = LOG(ZSIGMA(:))
    PN0(:,JN)   = PM(:,NM0(JN))
    
    PM(:,NM6(JN)) = PM(:,NM0(JN)) &
              * ( (PM(:,NM3(JN))/PM(:,NM0(JN)))**(1./3.) * exp(-(3./2.)*log(ZSIGMA(:))**2))**6 &
              * exp(18.*log(ZSIGMA(:))**2)
    
    PRG0(:,JN)= (PM(:,NM3(JN))**4/(PM(:,NM6(JN)) * PM(:,NM0(JN))**3))**(1./6.)
    
    PMASK(:,JN) = 0.
    WHERE ( (PM(:,NM0(JN)) > ZPMIN(NM0(JN))).AND.&
            (PM(:,NM3(JN)) > ZPMIN(NM3(JN))).AND.&
            (PM(:,NM6(JN)) > ZPMIN(NM6(JN))) )
    PMASK(:,JN) = 1.
    END WHERE
    
    ENDDO
    
    ELSE
    !
    !*       2.     TRANSFER FROM AEROSOL TO GAS  MODULE
    !               ------------------------------------
    !
    !
    !*       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
    !
    ! aerosol phase
      PAERO(:,JP_CH_SO4i) = PCTOTA(:,JP_AER_SO4,1)*ZCSTAVOG / PMI(:,JP_AER_SO4)
      PAERO(:,JP_CH_SO4j) = PCTOTA(:,JP_AER_SO4,2)*ZCSTAVOG / PMI(:,JP_AER_SO4)
      PAERO(:,JP_CH_NO3i) = PCTOTA(:,JP_AER_NO3,1)*ZCSTAVOG / PMI(:,JP_AER_NO3)
      PAERO(:,JP_CH_NO3j) = PCTOTA(:,JP_AER_NO3,2)*ZCSTAVOG / PMI(:,JP_AER_NO3)
      PAERO(:,JP_CH_NH3i) = PCTOTA(:,JP_AER_NH3,1)*ZCSTAVOG / PMI(:,JP_AER_NH3)
      PAERO(:,JP_CH_NH3j) = PCTOTA(:,JP_AER_NH3,2)*ZCSTAVOG / PMI(:,JP_AER_NH3)
    !
    ! water
      PAERO(:,JP_CH_H2Oi) = PCTOTA(:,JP_AER_H2O,1)*ZCSTAVOG / PMI(:,JP_AER_H2O)
      PAERO(:,JP_CH_H2Oj) = PCTOTA(:,JP_AER_H2O,2)*ZCSTAVOG / PMI(:,JP_AER_H2O)
    !
    ! primary organic  carbon
      PAERO(:,JP_CH_OCi) = PCTOTA(:,JP_AER_OC,1)*ZCSTAVOG / PMI(:,JP_AER_OC)
      PAERO(:,JP_CH_OCj) = PCTOTA(:,JP_AER_OC,2)*ZCSTAVOG / PMI(:,JP_AER_OC)
    !
    ! primary black carbon
      PAERO(:,JP_CH_BCi) = PCTOTA(:,JP_AER_BC,1)*ZCSTAVOG / PMI(:,JP_AER_BC)
      PAERO(:,JP_CH_BCj) = PCTOTA(:,JP_AER_BC,2)*ZCSTAVOG / PMI(:,JP_AER_BC)
    
    ! dust
      PAERO(:,JP_CH_DSTi) = PCTOTA(:,JP_AER_DST,1)*ZCSTAVOG / PMI(:,JP_AER_DST)
      PAERO(:,JP_CH_DSTj) = PCTOTA(:,JP_AER_DST,2)*ZCSTAVOG / PMI(:,JP_AER_DST)
    
    IF (NSOA .EQ. 10) THEN
    ! Secondary organic carbon
      PAERO(:,JP_CH_SOA1i) = PCTOTA(:,JP_AER_SOA1,1)*ZCSTAVOG / PMI(:,JP_AER_SOA1)
      PAERO(:,JP_CH_SOA1j) = PCTOTA(:,JP_AER_SOA1,2)*ZCSTAVOG / PMI(:,JP_AER_SOA1)
    
      PAERO(:,JP_CH_SOA2i) = PCTOTA(:,JP_AER_SOA2,1)*ZCSTAVOG / PMI(:,JP_AER_SOA2)
      PAERO(:,JP_CH_SOA2j) = PCTOTA(:,JP_AER_SOA2,2)*ZCSTAVOG / PMI(:,JP_AER_SOA2)
    
      PAERO(:,JP_CH_SOA3i) = PCTOTA(:,JP_AER_SOA3,1)*ZCSTAVOG / PMI(:,JP_AER_SOA3)
      PAERO(:,JP_CH_SOA3j) = PCTOTA(:,JP_AER_SOA3,2)*ZCSTAVOG / PMI(:,JP_AER_SOA3)
    
      PAERO(:,JP_CH_SOA4i) = PCTOTA(:,JP_AER_SOA4,1)*ZCSTAVOG / PMI(:,JP_AER_SOA4)
      PAERO(:,JP_CH_SOA4j) = PCTOTA(:,JP_AER_SOA4,2)*ZCSTAVOG / PMI(:,JP_AER_SOA4)
    
      PAERO(:,JP_CH_SOA5i) = PCTOTA(:,JP_AER_SOA5,1)*ZCSTAVOG / PMI(:,JP_AER_SOA5)
      PAERO(:,JP_CH_SOA5j) = PCTOTA(:,JP_AER_SOA5,2)*ZCSTAVOG / PMI(:,JP_AER_SOA5)
    
      PAERO(:,JP_CH_SOA6i) = PCTOTA(:,JP_AER_SOA6,1)*ZCSTAVOG / PMI(:,JP_AER_SOA6)
      PAERO(:,JP_CH_SOA6j) = PCTOTA(:,JP_AER_SOA6,2)*ZCSTAVOG / PMI(:,JP_AER_SOA6)
    
      PAERO(:,JP_CH_SOA7i) = PCTOTA(:,JP_AER_SOA7,1)*ZCSTAVOG / PMI(:,JP_AER_SOA7)
      PAERO(:,JP_CH_SOA7j) = PCTOTA(:,JP_AER_SOA7,2)*ZCSTAVOG / PMI(:,JP_AER_SOA7)
    
      PAERO(:,JP_CH_SOA8i) = PCTOTA(:,JP_AER_SOA8,1)*ZCSTAVOG / PMI(:,JP_AER_SOA8)
      PAERO(:,JP_CH_SOA8j) = PCTOTA(:,JP_AER_SOA8,2)*ZCSTAVOG / PMI(:,JP_AER_SOA8)
    
      PAERO(:,JP_CH_SOA9i) = PCTOTA(:,JP_AER_SOA9,1)*ZCSTAVOG / PMI(:,JP_AER_SOA9)
      PAERO(:,JP_CH_SOA9j) = PCTOTA(:,JP_AER_SOA9,2)*ZCSTAVOG / PMI(:,JP_AER_SOA9)
    
      PAERO(:,JP_CH_SOA10i) = PCTOTA(:,JP_AER_SOA10,1)*ZCSTAVOG / PMI(:,JP_AER_SOA10)
      PAERO(:,JP_CH_SOA10j) = PCTOTA(:,JP_AER_SOA10,2)*ZCSTAVOG / PMI(:,JP_AER_SOA10)
    
    IF (TRIM(CORGANIC) == 'PUN') THEN
    
      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
      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