diff --git a/src/ARCH_SRC/CPL_WAVE/MNH/ini_modeln.f90 b/src/ARCH_SRC/CPL_WAVE/MNH/ini_modeln.f90 index eea8a23aad061b9c038e9b2c4167d85a2fa59188..97237ff59a9e42a6937ec6cd347452fa9bc4a38a 100644 --- a/src/ARCH_SRC/CPL_WAVE/MNH/ini_modeln.f90 +++ b/src/ARCH_SRC/CPL_WAVE/MNH/ini_modeln.f90 @@ -271,6 +271,7 @@ END MODULE MODI_INI_MODEL_n !! M.Leriche 2016 Chemistry !! 10/2016 M.Mazoyer New KHKO output fields !! 10/2016 (C.Lac) Add max values +!! F. Brosse Oct. 2016 add prod/loss terms computation for chemistry !--------------------------------------------------------------------------------- ! !* 0. DECLARATIONS @@ -327,7 +328,7 @@ USE MODD_VAR_ll, ONLY : IP USE MODD_STAND_ATM, ONLY : XSTROATM, XSMLSATM, XSMLWATM, XSPOSATM, XSPOWATM USE MODD_CH_MNHC_n, ONLY : LUSECHEM, LUSECHAQ, LUSECHIC, LCH_INIT_FIELD, & CCHEM_INPUT_FILE, LCH_CONV_LINOX, & - XCH_TUV_DOBNEW, LCH_PH + XCH_TUV_DOBNEW, LCH_PH, CSPEC_BUDGET, CSPEC_PRODLOSS USE MODD_CH_PH_n USE MODD_CH_AEROSOL, ONLY : LORILAM USE MODD_CH_AERO_n, ONLY : XSOLORG,XMI @@ -337,7 +338,7 @@ USE MODD_DEEP_CONVECTION_n USE MODD_OUT_n USE MODD_BIKHARDT_n USE MODD_NUDGING_n, ONLY : LNUDGING -USE MODD_DIAG_FLAG, ONLY : LCHEMDIAG +USE MODD_DIAG_FLAG, ONLY : LCHEMDIAG, CSPEC_BU_DIAG USE MODD_CLOUD_MF_n USE MODD_NSV ! @@ -419,6 +420,13 @@ USE MODD_ADVFRC_n USE MODD_RELFRC_n USE MODD_2D_FRC ! +USE MODD_CH_PRODLOSSTOT_n +USE MODI_CH_INIT_PRODLOSSTOT_n +! +USE MODD_CH_BUDGET_n +USE MODI_CH_INIT_BUDGET_n +USE MODD_CH_M9_n, ONLY:NNONZEROTERMS +! USE MODE_MPPDB USE MODI_INIT_AEROSOL_PROPERTIES ! @@ -482,6 +490,12 @@ REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZDIR_ALB ! direct albedo REAL, DIMENSION(:,:,:), ALLOCATABLE :: ZSCA_ALB ! diffuse albedo REAL, DIMENSION(:,:), ALLOCATABLE :: ZEMIS ! emissivity REAL, DIMENSION(:,:), ALLOCATABLE :: ZTSRAD ! surface temperature +! +! +INTEGER, DIMENSION(:,:),ALLOCATABLE :: IINDEX ! indices of non-zero terms +INTEGER, DIMENSION(:),ALLOCATABLE :: IIND +INTEGER :: JM +! !------------------------------------------ ! Dummy pointers needed to correct an ifort Bug REAL, DIMENSION(:), POINTER :: DPTR_XZHAT @@ -2174,5 +2188,50 @@ IF ( LFOREFIRE ) THEN END IF #endif +!------------------------------------------------------------------------------- +! +!* 30. Total production/Loss for chemical species +! +IF (LUSECHEM.OR.LCHEMDIAG) THEN + CALL CH_INIT_PRODLOSSTOT_n(ILUOUT) + IF (NEQ_PLT>0) THEN + ALLOCATE(XPROD(IIU,IJU,IKU,NEQ_PLT)) + ALLOCATE(XLOSS(IIU,IJU,IKU,NEQ_PLT)) + XPROD=0.0 + XLOSS=0.0 + ELSE + ALLOCATE(XPROD(0,0,0,0)) + ALLOCATE(XLOSS(0,0,0,0)) + END IF +ELSE + ALLOCATE(XPROD(0,0,0,0)) + ALLOCATE(XLOSS(0,0,0,0)) +END IF +! +!------------------------------------------------------------------------------- +! +!* 31. Extended production/loss terms for chemical species +! +IF (LUSECHEM.OR.LCHEMDIAG) THEN + CALL CH_INIT_BUDGET_n(ILUOUT) + IF (NEQ_BUDGET>0) THEN + ALLOCATE(IINDEX(2,NNONZEROTERMS)) + ALLOCATE(IIND(NEQ_BUDGET)) + CALL CH_NONZEROTERMS(KMI,IINDEX,NNONZEROTERMS) + ALLOCATE(XTCHEM(NEQ_BUDGET)) + DO JM=1,NEQ_BUDGET + IIND(JM)=COUNT((IINDEX(1,:))==NSPEC_BUDGET(JM)) + ALLOCATE(XTCHEM(JM)%NB_REAC(IIND(JM))) + ALLOCATE(XTCHEM(JM)%XB_REAC(IIU,IJU,IKU,IIND(JM))) + END DO + DEALLOCATE(IIND) + DEALLOCATE(IINDEX) + ELSE + ALLOCATE(XTCHEM(0)) + END IF +ELSE + ALLOCATE(XTCHEM(0)) +END IF + END SUBROUTINE INI_MODEL_n