Juan 8/12/2016: add management of LEN_HREC in MNH & SURFEX
[MNH-git_open_source-lfs.git] / src / SURFEX / modn_surf_atmn.F90
1 !SURFEX_LIC Copyright 1994-2014 Meteo-France 
2 !SURFEX_LIC This is part of the SURFEX software governed by the CeCILL-C  licence
3 !SURFEX_LIC version 1. See LICENSE, CeCILL-C_V1-en.txt and CeCILL-C_V1-fr.txt
4 !SURFEX_LIC for details. version 1.
5 !     ######spl
6       MODULE MODN_SURF_ATM_n
7 !     ######################
8 !
9 !!****  *MODN_SURF_ATM_n* - declaration of namelist NAM_SURF_ATMn
10 !!
11 !!    PURPOSE
12 !!    -------
13 !       The purpose of this module is to specify  the namelist NAM_SURF_ATMn
14 !
15 !!
16 !!**  IMPLICIT ARGUMENTS
17 !!    ------------------
18 !!
19 !!    REFERENCE
20 !!    ---------
21 !!
22 !!       
23 !!    AUTHOR
24 !!    ------
25 !!      V. Masson    *Meteo France*
26 !!
27 !!    MODIFICATIONS
28 !!    -------------
29 !!      P. Tulet    flag namelist  for emission      02/2004  
30 !!      B. Decharme Cumulative diag for all Tile     08/2009
31 !!      B. Decharme Key to allow (or not) writting diag   10/2009
32 !!      S.Senesi    Additional write selection mechanism   12/2009
33 !-------------------------------------------------------------------------------
34 !
35 !*       0.   DECLARATIONS
36 !             ------------
37 !
38 USE MODD_DIAG_SURF_ATM_n, ONLY: &
39            XDIAG_TSTEP_n => XDIAG_TSTEP, &
40            N2M_n => N2M, &
41            L2M_MIN_ZS_n => L2M_MIN_ZS, &
42            LSURF_BUDGET_n => LSURF_BUDGET, &
43            LRAD_BUDGET_n => LRAD_BUDGET, &
44            LSURF_BUDGETC_n => LSURF_BUDGETC, &
45            LRESET_BUDGETC_n => LRESET_BUDGETC, &
46            LFRAC_n => LFRAC,&
47            LCOEF_n => LCOEF,&
48            LSURF_VARS_n => LSURF_VARS,&
49            LDIAG_GRID_n => LDIAG_GRID,&
50            LPROVAR_TO_DIAG_n => LPROVAR_TO_DIAG,&
51            LSELECT_n => LSELECT,&
52            CSELECT_n => CSELECT  
53
54 USE MODD_CH_SURF_n, ONLY: &
55            CCHEM_SURF_FILE_n => CCHEM_SURF_FILE, &
56            LCH_SURF_EMIS_n => LCH_SURF_EMIS  
57 !
58 !
59 USE YOMHOOK   ,ONLY : LHOOK,   DR_HOOK
60 USE PARKIND1  ,ONLY : JPRB
61 !
62 IMPLICIT NONE
63 !
64  CHARACTER(LEN=28), SAVE  :: CCHEM_SURF_FILE
65 LOGICAL, SAVE  :: LCH_SURF_EMIS
66 LOGICAL  :: LFRAC
67 REAL     :: XDIAG_TSTEP
68 INTEGER  :: N2M
69 LOGICAL  :: L2M_MIN_ZS
70 LOGICAL  :: LSURF_BUDGET
71 LOGICAL  :: LRAD_BUDGET
72 LOGICAL  :: LSURF_BUDGETC
73 LOGICAL  :: LRESET_BUDGETC
74 LOGICAL  :: LCOEF
75 LOGICAL  :: LSURF_VARS
76 LOGICAL  :: LDIAG_GRID
77 LOGICAL  :: LPROVAR_TO_DIAG
78 LOGICAL  :: LSELECT
79  CHARACTER(LEN=LEN_HREC), DIMENSION(250)    :: CSELECT
80 !
81 NAMELIST/NAM_CH_CONTROLn/CCHEM_SURF_FILE
82 NAMELIST/NAM_CH_SURFn/LCH_SURF_EMIS
83 NAMELIST/NAM_DIAG_SURF_ATMn/LFRAC, LDIAG_GRID
84 NAMELIST/NAM_DIAG_SURFn/N2M, L2M_MIN_ZS, LSURF_BUDGET, LRAD_BUDGET, LSURF_BUDGETC,  &
85                           LRESET_BUDGETC, LCOEF, LSURF_VARS  
86 !                        
87 NAMELIST/NAM_WRITE_DIAG_SURFn/LPROVAR_TO_DIAG,LSELECT,CSELECT
88 !
89 CONTAINS
90 !
91 SUBROUTINE INIT_NAM_CH_CONTROLn
92
93   REAL(KIND=JPRB) :: ZHOOK_HANDLE
94
95   IF (LHOOK) CALL DR_HOOK('MODN_SURF_ATM_N:INIT_NAM_CH_CONTROLN',0,ZHOOK_HANDLE)
96   CCHEM_SURF_FILE = CCHEM_SURF_FILE_n
97 IF (LHOOK) CALL DR_HOOK('MODN_SURF_ATM_N:INIT_NAM_CH_CONTROLN',1,ZHOOK_HANDLE)
98 END SUBROUTINE INIT_NAM_CH_CONTROLn
99
100 SUBROUTINE UPDATE_NAM_CH_CONTROLn
101
102   REAL(KIND=JPRB) :: ZHOOK_HANDLE
103
104   IF (LHOOK) CALL DR_HOOK('MODN_SURF_ATM_N:UPDATE_NAM_CH_CONTROLN',0,ZHOOK_HANDLE)
105   CCHEM_SURF_FILE_n = CCHEM_SURF_FILE
106 IF (LHOOK) CALL DR_HOOK('MODN_SURF_ATM_N:UPDATE_NAM_CH_CONTROLN',1,ZHOOK_HANDLE)
107 END SUBROUTINE UPDATE_NAM_CH_CONTROLn
108
109 SUBROUTINE INIT_NAM_CH_SURFn
110
111   REAL(KIND=JPRB) :: ZHOOK_HANDLE
112
113   IF (LHOOK) CALL DR_HOOK('MODN_SURF_ATM_N:INIT_NAM_CH_SURFN',0,ZHOOK_HANDLE)
114   LCH_SURF_EMIS = LCH_SURF_EMIS_n
115 IF (LHOOK) CALL DR_HOOK('MODN_SURF_ATM_N:INIT_NAM_CH_SURFN',1,ZHOOK_HANDLE)
116 END SUBROUTINE INIT_NAM_CH_SURFn
117
118 SUBROUTINE UPDATE_NAM_CH_SURFn
119
120   REAL(KIND=JPRB) :: ZHOOK_HANDLE
121
122   IF (LHOOK) CALL DR_HOOK('MODN_SURF_ATM_N:UPDATE_NAM_CH_SURFN',0,ZHOOK_HANDLE)
123   LCH_SURF_EMIS_n = LCH_SURF_EMIS
124 IF (LHOOK) CALL DR_HOOK('MODN_SURF_ATM_N:UPDATE_NAM_CH_SURFN',1,ZHOOK_HANDLE)
125 END SUBROUTINE UPDATE_NAM_CH_SURFn
126
127 SUBROUTINE INIT_NAM_DIAG_SURF_ATMn
128
129   REAL(KIND=JPRB) :: ZHOOK_HANDLE
130
131   IF (LHOOK) CALL DR_HOOK('MODN_SURF_ATM_N:INIT_NAM_DIAG_SURF_ATMN',0,ZHOOK_HANDLE)
132   LFRAC = LFRAC_n
133 IF (LHOOK) CALL DR_HOOK('MODN_SURF_ATM_N:INIT_NAM_DIAG_SURF_ATMN',1,ZHOOK_HANDLE)
134 END SUBROUTINE INIT_NAM_DIAG_SURF_ATMn
135
136 SUBROUTINE UPDATE_NAM_DIAG_SURF_ATMn
137
138   REAL(KIND=JPRB) :: ZHOOK_HANDLE
139
140   IF (LHOOK) CALL DR_HOOK('MODN_SURF_ATM_N:UPDATE_NAM_DIAG_SURF_ATMN',0,ZHOOK_HANDLE)
141   LFRAC_n = LFRAC
142 IF (LHOOK) CALL DR_HOOK('MODN_SURF_ATM_N:UPDATE_NAM_DIAG_SURF_ATMN',1,ZHOOK_HANDLE)
143 END SUBROUTINE UPDATE_NAM_DIAG_SURF_ATMn
144
145 SUBROUTINE INIT_NAM_DIAG_SURFn
146
147   REAL(KIND=JPRB) :: ZHOOK_HANDLE
148
149   IF (LHOOK) CALL DR_HOOK('MODN_SURF_ATM_N:INIT_NAM_DIAG_SURFN',0,ZHOOK_HANDLE)
150   XDIAG_TSTEP = XDIAG_TSTEP_n
151   N2M = N2M_n
152   L2M_MIN_ZS = L2M_MIN_ZS_n
153   LSURF_BUDGET = LSURF_BUDGET_n
154   LRAD_BUDGET = LRAD_BUDGET_n
155   LSURF_BUDGETC = LSURF_BUDGETC_n
156   LRESET_BUDGETC = LRESET_BUDGETC_n
157   LCOEF = LCOEF_n
158   LSURF_VARS = LSURF_VARS_n
159   LDIAG_GRID = LDIAG_GRID_n
160 IF (LHOOK) CALL DR_HOOK('MODN_SURF_ATM_N:INIT_NAM_DIAG_SURFN',1,ZHOOK_HANDLE)
161 END SUBROUTINE INIT_NAM_DIAG_SURFn
162
163 SUBROUTINE UPDATE_NAM_DIAG_SURFn
164
165   REAL(KIND=JPRB) :: ZHOOK_HANDLE
166
167   IF (LHOOK) CALL DR_HOOK('MODN_SURF_ATM_N:UPDATE_NAM_DIAG_SURFN',0,ZHOOK_HANDLE)
168   XDIAG_TSTEP_n = XDIAG_TSTEP
169   N2M_n = N2M
170   L2M_MIN_ZS_n = L2M_MIN_ZS
171   LSURF_BUDGET_n = LSURF_BUDGET
172   LRAD_BUDGET_n = LRAD_BUDGET
173   LSURF_BUDGETC_n = LSURF_BUDGETC
174   LRESET_BUDGETC_n = LRESET_BUDGETC 
175   LCOEF_n = LCOEF
176   LSURF_VARS_n = LSURF_VARS
177   LDIAG_GRID_n = LDIAG_GRID
178 IF (LHOOK) CALL DR_HOOK('MODN_SURF_ATM_N:UPDATE_NAM_DIAG_SURFN',1,ZHOOK_HANDLE)
179 END SUBROUTINE UPDATE_NAM_DIAG_SURFn
180
181
182 SUBROUTINE INIT_NAM_WRITE_DIAG_SURFn
183
184
185   REAL(KIND=JPRB) :: ZHOOK_HANDLE
186
187   IF (LHOOK) CALL DR_HOOK('MODN_SURF_ATM_N:INIT_NAM_WRITE_DIAG_SURFN',0,ZHOOK_HANDLE)
188   LPROVAR_TO_DIAG = LPROVAR_TO_DIAG_n
189   LSELECT = LSELECT_n
190   CSELECT(:) = '            '
191 IF (LHOOK) CALL DR_HOOK('MODN_SURF_ATM_N:INIT_NAM_WRITE_DIAG_SURFN',1,ZHOOK_HANDLE)
192 END SUBROUTINE INIT_NAM_WRITE_DIAG_SURFn
193
194 SUBROUTINE UPDATE_NAM_WRITE_DIAG_SURFn
195   INTEGER :: ICOUNT
196   REAL(KIND=JPRB) :: ZHOOK_HANDLE
197
198   IF (LHOOK) CALL DR_HOOK('MODN_SURF_ATM_N:UPDATE_NAM_WRITE_DIAG_SURFN',0,ZHOOK_HANDLE)
199   LPROVAR_TO_DIAG_n = LPROVAR_TO_DIAG
200 !
201   LSELECT_n = LSELECT
202   IF (LSELECT) THEN
203     ICOUNT = COUNT(CSELECT /= '            ')
204     IF(.NOT.ASSOCIATED(CSELECT_n))THEN
205       ALLOCATE(CSELECT_n(ICOUNT))
206       CSELECT_n(:) = '            '
207     ENDIF
208     CSELECT_n = CSELECT(1:ICOUNT)
209   ENDIF
210 IF (LHOOK) CALL DR_HOOK('MODN_SURF_ATM_N:UPDATE_NAM_WRITE_DIAG_SURFN',1,ZHOOK_HANDLE)
211 END SUBROUTINE UPDATE_NAM_WRITE_DIAG_SURFn
212
213 END MODULE MODN_SURF_ATM_n