Newer
Older
!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.
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
!-----------------------------------------------------------------
!--------------- 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