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