Skip to content
Snippets Groups Projects
ch_diagnostics.f90 4.23 KiB
Newer Older
  • Learn to ignore specific revisions
  • !MNH_LIC Copyright 1994-2013 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 LICENCE, 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 chimie 2006/05/18 13:07:25
    !-----------------------------------------------------------------
    !!    ########################## 
          MODULE MODI_CH_DIAGNOSTICS
    !!    ########################## 
    !
    INTERFACE
    SUBROUTINE CH_DIAGNOSTICS(PCONC, KMI, KVECNPT)
    IMPLICIT NONE
    INTEGER, INTENT(IN)                      :: KVECNPT
    REAL, DIMENSION(:,:), INTENT(IN) :: PCONC ! the chem species
    INTEGER, INTENT(IN)              :: KMI
    END SUBROUTINE CH_DIAGNOSTICS
    END INTERFACE
    END MODULE MODI_CH_DIAGNOSTICS
    !!
    !!    ############################################## 
          SUBROUTINE CH_DIAGNOSTICS(PCONC, KMI, KVECNPT)
    !!    ##############################################
    !!
    !!*** *CH_DIAGNOSTICS*
    !!
    !!    PURPOSE
    !!    -------
    !!    calculate all desirable diagnostics
    !!
    !!**  METHOD
    !!    ------
    !!    Actually the following variables will be saved:
    !!    PCONC, reaction rates, PROD, LOSS, TERMS;
    !!    these variables are  calculated by CH_PRODLOSS, CH_TERMS, and CH_GET_RATES
    !!
    !!    REFERENCE
    !!    ---------
    !!
    !!    AUTHOR
    !!    ------
    !!    K. Suhre
    !!
    !!    MODIFICATIONS
    !!    -------------
    !!    Original 02/03/95
    !!    27/07/96 (K. Suhre) restructured
    !!    01/12/03 (Gazen)   change Chemical scheme interface!!
    !!    EXTERNAL
    !!    --------
    USE MODI_CH_GET_RATES
    USE MODI_CH_PRODLOSS
    USE MODI_CH_TERMS
    USE MODI_CH_NONZEROTERMS
    !!
    !!    IMPLICIT ARGUMENTS
    !!    ------------------
    USE MODD_CH_MODEL0D,  ONLY: XTSIMUL, NDIAGIO, CDIAGFORMAT, NVERB
    USE MODD_CH_M9_n,       ONLY: NREAC, NEQ, NNONZEROTERMS
    !!
    !-----------------------------------------------------------------------------
    !*    0.  DECLARATIONS
    !     ----------------
    !
    IMPLICIT NONE
    !
    !*    0.1 Declaration of arguments
    !     ----------------------------
    
    INTEGER, INTENT(IN)                      :: KVECNPT
    REAL, DIMENSION(:,:), INTENT(IN) :: PCONC ! the chem species
    INTEGER, INTENT(IN)              :: KMI
    !
    !*    0.2 Declaration of local variables
    !     ----------------------------------
    INTEGER :: JI
    !REAL, DIMENSION(KVECNPT,NREAC)       :: ZRATE        ! variable to retrieve data
    REAL, DIMENSION(:,:),ALLOCATABLE      :: ZRATE        ! variable to retrieve data
    !REAL, DIMENSION(KVECNPT,NEQ)         :: ZPROD, ZLOSS ! dito
    REAL, DIMENSION(:,:), ALLOCATABLE     :: ZPROD, ZLOSS ! dito
    !REAL, DIMENSION(KVECNPT,NEQ,NREAC)   :: ZTERMS       ! dito
    REAL, DIMENSION(:,:,:),ALLOCATABLE    :: ZTERMS       ! dito
    !INTEGER, DIMENSION(2, NNONZEROTERMS) :: IINDEX       ! indices of non-zero terms
    INTEGER, DIMENSION(:,:),ALLOCATABLE   :: IINDEX       ! indices of non-zero terms
    !
    ! Allocate local arrays 
    ALLOCATE(ZRATE(KVECNPT,NREAC))
    ALLOCATE(ZPROD(KVECNPT,NEQ), ZLOSS(KVECNPT,NEQ))
    ALLOCATE(ZTERMS(KVECNPT,NEQ,NREAC))
    ALLOCATE(IINDEX(2, NNONZEROTERMS))
    !
    !*    EXECUTABLE STATEMENTS
    !     ---------------------
    !
    IF (NVERB >= 5) PRINT *, "CH_DIAGNOSTICS called at XTSIMUL = ", XTSIMUL
    !
    ! get reaction rates
    CALL CH_GET_RATES(ZRATE,KMI,KVECNPT,NREAC)
    !
    ! get PROD and LOSS terms
    CALL CH_PRODLOSS(XTSIMUL,PCONC,ZPROD,ZLOSS,KMI,KVECNPT,NEQ)
    !
    ! get individual TERMS (contrib. of reaction i to the evolution of species j)
    CALL CH_TERMS(XTSIMUL,PCONC,ZTERMS,KMI,KVECNPT,NEQ,NREAC)
    !
    ! get the indices of the explicit contributions
    ! (only non-zero terms will be stored)
    CALL CH_NONZEROTERMS(KMI,IINDEX, NNONZEROTERMS)
    !
    ! write variables to file
    WRITE(NDIAGIO,CDIAGFORMAT) XTSIMUL, &
                                   (PCONC(1,JI), JI = 1, NEQ),           &
                                   (ZRATE(1,JI), JI = 1, NREAC),         &
                                   (ZPROD(1,JI), JI = 1, NEQ),           &
                                   (ZLOSS(1,JI), JI = 1, NEQ),           &
                                   (ZTERMS(1,IINDEX(1,JI),IINDEX(2,JI)), &
    					   JI = 1, NNONZEROTERMS)
    !
    DEALLOCATE(ZPROD, ZLOSS)
    DEALLOCATE(ZTERMS)
    DEALLOCATE(IINDEX)
    !
    END SUBROUTINE CH_DIAGNOSTICS