My Project
mod_enkf.f90
Go to the documentation of this file.
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 !/===========================================================================/
13 ! Copyright (c) 2007, The University of Massachusetts Dartmouth
14 ! Produced at the School of Marine Science & Technology
15 ! Marine Ecosystem Dynamics Modeling group
16 ! All rights reserved.
17 !
18 ! FVCOM has been developed by the joint UMASSD-WHOI research team. For
19 ! details of authorship and attribution of credit please see the FVCOM
20 ! technical manual or contact the MEDM group.
21 !
22 !
23 ! This file is part of FVCOM. For details, see http://fvcom.smast.umassd.edu
24 ! The full copyright notice is contained in the file COPYRIGHT located in the
25 ! root directory of the FVCOM code. This original header must be maintained
26 ! in all distributed versions.
27 !
28 ! THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
29 ! AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
30 ! THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
31 ! PURPOSE ARE DISCLAIMED.
32 !
33 !/---------------------------------------------------------------------------/
34 ! CVS VERSION INFORMATION
35 ! $Id$
36 ! $Name$
37 ! $Revision$
38 !/===========================================================================/
39 
40 MODULE enkfval
41 END MODULE enkfval
42 
43 !=============================================
44 !MODULE MOD_STARTUP_MIMIC
45 !# if defined (ENKF)
46 ! USE MOD_UTILS
47 ! USE MOD_NCTOOLS
48 ! USE MOD_INPUT
49 ! USE ALL_VARS
50 ! USE EQS_OF_STATE
51 ! USE MOD_WD
52 ! USE SINTER
53 !
54 !
55 !# if defined (ICE)
56 ! USE MOD_ICE
57 ! USE MOD_ICE2D
58 !# endif
59 !
60 !# if defined (WATER_QUALITY)
61 ! USE MOD_WQM
62 !# endif
63 !
64 !# if defined (BioGen)
65 ! USE MOD_BIO_3D
66 !# endif
67 !
68 !# if defined (NH)
69 ! USE NON_HYDRO, ONLY: W4ZT, NHQDRX, NHQDRY, NHQDRZ, NHQ2DX, NHQ2DY
70 !# endif
71 !
72 ! IMPLICIT NONE
73 !
74 ! PRIVATE
75 !
76 ! PUBLIC :: READ_SSH1
77 ! PUBLIC :: READ_UV1
78 ! PUBLIC :: READ_TURB1
79 ! PUBLIC :: READ_TS1
80 ! PUBLIC :: READ_WETDRY1
81 !
82 !
83 !CONTAINS
84 !!==============================================================================!
85 ! SUBROUTINE READ_SSH1(NC_START)
86 !# if defined (SEDIMENT)
87 ! USE MOD_SED, only : morpho_model,sed_hot_start
88 !# endif
89 ! IMPLICIT NONE
90 ! TYPE(NCFILE),POINTER :: NC_START
91 ! TYPE(NCVAR), POINTER :: VAR
92 ! TYPE(NCDIM), POINTER :: DIM
93 ! LOGICAL :: FOUND
94 ! INTEGER :: STKCNT
95 !
96 ! IF(DBG_SET(DBG_SBR)) write(ipt,*) "Start: READ_SSH"
97 !
98 ! STKCNT = NC_START%FTIME%PREV_STKCNT
99 !
100 ! ! LOAD EL
101 ! VAR => FIND_VAR(NC_START,'zeta',FOUND)
102 ! IF(.not. FOUND) CALL FATAL_ERROR("COULD NOT FIND VARIABLE 'zeta'&
103 ! & IN THE HOTSTART FILE OBJECT")
104 ! CALL NC_CONNECT_AVAR(VAR, EL)
105 ! CALL NC_READ_VAR(VAR,STKCNT)
106 !
107 ! ! LOAD ET
108 ! VAR => FIND_VAR(NC_START,'et',FOUND)
109 ! IF(.not. FOUND) CALL FATAL_ERROR("COULD NOT FIND VARIABLE 'et'&
110 ! & IN THE HOTSTART FILE OBJECT")
111 ! CALL NC_CONNECT_AVAR(VAR, ET)
112 ! CALL NC_READ_VAR(VAR,STKCNT)
113 !
114 ! !----------------------------------------------------------------
115 ! ! Read the most recent bathymetry if Morphodynamics is Active
116 ! !----------------------------------------------------------------
117 !# if defined(SEDIMENT)
118 ! IF(MORPHO_MODEL .and. SED_HOT_START)THEN
119 ! VAR => FIND_VAR(NC_START,'h',FOUND)
120 ! IF(.not. FOUND) CALL FATAL_ERROR("COULD NOT FIND VARIABLE 'h'&
121 ! & IN THE HOTSTART FILE OBJECT")
122 ! CALL NC_CONNECT_AVAR(VAR, h)
123 ! CALL NC_READ_VAR(VAR,STKCNT)
124 ! ENDIF
125 !# endif
126 !
127 !
128 ! !----------------------------------------------------------------
129 ! ! Given SSH and Bathy, Update the Bathymetry
130 ! !----------------------------------------------------------------
131 ! D = H + EL
132 ! DT = H + ET
133 !
134 !
135 ! CALL N2E2D(H,H1)
136 ! CALL N2E2D(EL,EL1)
137 ! CALL N2E2D(D,D1)
138 ! CALL N2E2D(DT,DT1)
139 !
140 ! IF(DBG_SET(DBG_SBR)) write(ipt,*) "Start: READ_SSH"
141 !
142 ! END SUBROUTINE READ_SSH1
143 !!==============================================================================!
144 !!==============================================================================!
145 ! SUBROUTINE READ_WETDRY1(NC_START)
146 ! USE MOD_WD
147 ! IMPLICIT NONE
148 ! TYPE(NCFILE),POINTER :: NC_START
149 ! TYPE(NCVAR), POINTER :: VAR
150 ! TYPE(NCDIM), POINTER :: DIM
151 ! LOGICAL :: FOUND
152 ! INTEGER :: STKCNT
153 !
154 ! IF(DBG_SET(DBG_SBR)) write(ipt,*) "Start: READ_WETDRY"
155 !
156 ! STKCNT = NC_START%FTIME%PREV_STKCNT
157 !
158 ! ! LOAD ISWETN
159 ! VAR => FIND_VAR(NC_START,'wet_nodes',FOUND)
160 ! IF(.not. FOUND) CALL FATAL_ERROR("COULD NOT FIND VARIABLE 'wet_nodes'&
161 ! & IN THE HOTSTART FILE OBJECT")
162 ! CALL NC_CONNECT_AVAR(VAR, ISWETN)
163 ! CALL NC_READ_VAR(VAR,STKCNT)
164 !
165 ! ! LOAD ISWETC
166 ! VAR => FIND_VAR(NC_START,'wet_cells',FOUND)
167 ! IF(.not. FOUND) CALL FATAL_ERROR("COULD NOT FIND VARIABLE 'wet_cells'&
168 ! & IN THE HOTSTART FILE OBJECT")
169 ! CALL NC_CONNECT_AVAR(VAR, ISWETC)
170 ! CALL NC_READ_VAR(VAR,STKCNT)
171 !
172 !
173 ! ! LOAD ISWETNT
174 ! VAR => FIND_VAR(NC_START,'wet_nodes_prev_int',FOUND)
175 ! IF(.not. FOUND) CALL FATAL_ERROR("COULD NOT FIND VARIABLE 'wet_nodes_prev_int'&
176 ! & IN THE HOTSTART FILE OBJECT")
177 ! CALL NC_CONNECT_AVAR(VAR, ISWETNT)
178 ! CALL NC_READ_VAR(VAR,STKCNT)
179 !
180 ! ! LOAD ISWETCT
181 ! VAR => FIND_VAR(NC_START,'wet_cells_prev_int',FOUND)
182 ! IF(.not. FOUND) CALL FATAL_ERROR("COULD NOT FIND VARIABLE 'wet_cells_prev_int'&
183 ! & IN THE HOTSTART FILE OBJECT")
184 ! CALL NC_CONNECT_AVAR(VAR, ISWETCT)
185 ! CALL NC_READ_VAR(VAR,STKCNT)
186 !
187 ! ! LOAD ISWETCE
188 ! VAR => FIND_VAR(NC_START,'wet_cells_prev_ext',FOUND)
189 ! IF(.not. FOUND) CALL FATAL_ERROR("COULD NOT FIND VARIABLE 'wet_cells_prev_ext'&
190 ! & IN THE HOTSTART FILE OBJECT")
191 ! CALL NC_CONNECT_AVAR(VAR, ISWETC)
192 ! CALL NC_READ_VAR(VAR,STKCNT)
193 !
194 ! IF(DBG_SET(DBG_SBR)) write(ipt,*) "End: READ_WETDRY"
195 !
196 ! END SUBROUTINE READ_WETDRY1
197 !!==============================================================================!
198 ! SUBROUTINE READ_TS1(NC_START)
199 ! IMPLICIT NONE
200 ! TYPE(NCFILE),POINTER :: NC_START
201 ! TYPE(NCVAR), POINTER :: VAR
202 ! TYPE(NCDIM), POINTER :: DIM
203 ! LOGICAL :: FOUND
204 ! INTEGER :: STKCNT, K
205 ! REAL(SP), DIMENSION(0:MT,KB) :: PRESSURE
206 !
207 ! IF(DBG_SET(DBG_SBR)) write(ipt,*) "Start: READ_TS"
208 !
209 ! STKCNT = NC_START%FTIME%PREV_STKCNT
210 !
211 !
212 ! ! LOAD TEMPERATURE
213 ! VAR => FIND_VAR(NC_START,'temp',FOUND)
214 ! IF(.not. FOUND) CALL FATAL_ERROR("COULD NOT FIND VARIABLE 'temp'&
215 ! & IN THE HOTSTART FILE OBJECT")
216 ! CALL NC_CONNECT_AVAR(VAR, T1)
217 ! CALL NC_READ_VAR(VAR,STKCNT)
218 !
219 !
220 ! ! LOAD MEAN INITIAL TEMPERATURE
221 ! VAR => FIND_VAR(NC_START,'tmean1',FOUND)
222 ! IF(.not. FOUND) CALL FATAL_ERROR("COULD NOT FIND VARIABLE 'tmean1'&
223 ! & IN THE HOTSTART FILE OBJECT")
224 ! CALL NC_CONNECT_AVAR(VAR, tmean1)
225 ! CALL NC_READ_VAR(VAR)
226 !
227 ! ! LOAD SALINITY
228 ! VAR => FIND_VAR(NC_START,'salinity',FOUND)
229 ! IF(.not. FOUND) CALL FATAL_ERROR("COULD NOT FIND VARIABLE 'saltinity'&
230 ! & IN THE HOTSTART FILE OBJECT")
231 ! CALL NC_CONNECT_AVAR(VAR, S1)
232 ! CALL NC_READ_VAR(VAR,STKCNT)
233 !
234 ! ! LOAD MEAN INITIAL SALINITY
235 ! VAR => FIND_VAR(NC_START,'smean1',FOUND)
236 ! IF(.not. FOUND) CALL FATAL_ERROR("COULD NOT FIND VARIABLE 'smean1'&
237 ! & IN THE HOTSTART FILE OBJECT")
238 ! CALL NC_CONNECT_AVAR(VAR, smean1)
239 ! CALL NC_READ_VAR(VAR)
240 !
241 !
242 ! ! LOAD DENSITY
243 ! VAR => FIND_VAR(NC_START,'rho1',FOUND)
244 ! IF(.not. FOUND) CALL FATAL_ERROR("COULD NOT FIND VARIABLE 'rho1'&
245 ! & IN THE HOTSTART FILE OBJECT")
246 ! CALL NC_CONNECT_AVAR(VAR, RHO1)
247 ! CALL NC_READ_VAR(VAR,STKCNT)
248 !
249 ! ! LOAD MEAN DENSITY
250 ! VAR => FIND_VAR(NC_START,'rmean1',FOUND)
251 ! IF(.not. FOUND) CALL FATAL_ERROR("COULD NOT FIND VARIABLE 'rmean1'&
252 ! & IN THE HOTSTART FILE OBJECT")
253 ! CALL NC_CONNECT_AVAR(VAR, rmean1)
254 ! CALL NC_READ_VAR(VAR)
255 !
256 ! ! AVERAGE FROM CELLS TO FACE CENTERS
257 !
258 !
259 !!JQI SELECT CASE(SEA_WATER_DENSITY_FUNCTION)
260 !!JQI CASE(SW_DENS1)
261 !
262 !!JQI ! SET MEAN DENSITY
263 !!JQI DO K=1,KBM1
264 !!JQI PRESSURE(:,K) = -GRAV_N*1.025_SP*(ZZ(:,K)*D(:))*0.1_SP
265 !!JQI END DO
266 !!JQI CALL FOFONOFF_MILLARD(SMEAN1,TMEAN1,PRESSURE,0.0_SP,RMEAN1)
267 !!JQI RMEAN1(0,:)=0.0_SP
268 !!JQI RMEAN1(:,KB)=0.0_SP
269 !
270 !!JQI ! SET REAL DENSITY
271 !!JQI CALL DENS1 ! GENERIC CALL TO FOFONOFF_MILLARD FOR S1,T1...
272 !
273 !!JQI CASE(SW_DENS2)
274 !!JQI ! SET MEAN DENSITY
275 !!JQI CALL DENS2G(SMEAN1,TMEAN1,RMEAN1)
276 !!JQI RMEAN1(0,:)=0.0_SP
277 !!JQI RMEAN1(:,KB)=0.0_SP
278 !
279 !!JQI ! SET REAL DENSITY
280 !!JQI CALL DENS2 ! GENERIC CALL TO DENS2G FOR S1,T1...
281 !
282 !!JQI CASE(SW_DENS3)
283 !
284 !!JQI ! SET MEAN DENSITY
285 !!JQI DO K=1,KBM1
286 !!JQI PRESSURE(:,K) = -GRAV_N*1.025_SP*(ZZ(:,K)*D(:))*0.1_SP
287 !!JQI END DO
288 !!JQI CALL JACKET_MCDOUGALL(SMEAN1,TMEAN1,PRESSURE,RMEAN1)
289 !!JQI RMEAN1(0,:)=0.0_SP
290 !!JQI RMEAN1(:,KB)=0.0_SP
291 !
292 !!JQI ! SET REAL DENSITY
293 !!JQI CALL DENS3 ! GENERIC CALL TO JACKET_MCDOUGALL FOR S1,T1.
294 !
295 !!JQI CASE DEFAULT
296 !!JQI CALL FATAL_ERROR("INVALID DENSITY FUNCTION SELECTED:",&
297 !!JQI & " "//TRIM(SEA_WATER_DENSITY_FUNCTION) )
298 !!JQI END SELECT
299 !
300 ! CALL N2E3D(T1,T)
301 ! CALL N2E3D(S1,S)
302 ! CALL N2E3D(Tmean1,Tmean)
303 ! CALL N2E3D(Smean1,Smean)
304 ! CALL N2E3D(Rmean1,Rmean)
305 !
306 !
307 ! IF(DBG_SET(DBG_SBR)) write(ipt,*) "End: READ_TS"
308 !
309 ! END SUBROUTINE READ_TS1
310 !!==============================================================================!
311 !
312 ! SUBROUTINE READ_UV1(NC_START)
313 ! IMPLICIT NONE
314 ! TYPE(NCFILE),POINTER :: NC_START
315 ! TYPE(NCVAR), POINTER :: VAR
316 ! TYPE(NCDIM), POINTER :: DIM
317 ! LOGICAL :: FOUND
318 ! INTEGER :: STKCNT
319 !
320 ! IF(DBG_SET(DBG_SBR)) write(ipt,*) "START: READ_UV"
321 !
322 !
323 ! STKCNT = NC_START%FTIME%PREV_STKCNT
324 !
325 ! VAR => FIND_VAR(NC_START,'u',FOUND)
326 ! IF(.not. FOUND) CALL FATAL_ERROR("COULD NOT FIND VARIABLE 'u'&
327 ! & IN THE HOTSTART FILE OBJECT")
328 ! CALL NC_CONNECT_AVAR(VAR, U)
329 ! CALL NC_READ_VAR(VAR,STKCNT)
330 !
331 !
332 ! VAR => FIND_VAR(NC_START,'v',FOUND)
333 ! IF(.not. FOUND) CALL FATAL_ERROR("COULD NOT FIND VARIABLE 'v'&
334 ! & IN THE HOTSTART FILE OBJECT")
335 ! CALL NC_CONNECT_AVAR(VAR, V)
336 ! CALL NC_READ_VAR(VAR,STKCNT)
337 !
338 ! VAR => FIND_VAR(NC_START,'omega',FOUND)
339 ! IF(FOUND) THEN
340 ! CALL NC_CONNECT_AVAR(VAR, WTS)
341 ! CALL NC_READ_VAR(VAR,STKCNT)
342 !
343 ! CALL N2E3D(WTS,W)
344 ! ELSE
345 ! VAR => FIND_VAR(NC_START,'w',FOUND)
346 ! IF(.not. FOUND) CALL FATAL_ERROR("COULD NOT FIND VARIABLE 'w' &
347 ! & or 'omega' IN THE HOTSTART FILE OBJECT")
348 ! CALL NC_CONNECT_AVAR(VAR, W)
349 ! CALL NC_READ_VAR(VAR,STKCNT)
350 ! END IF
351 !
352 ! VAR => FIND_VAR(NC_START,'ua',FOUND)
353 ! IF(.not. FOUND) CALL FATAL_ERROR("COULD NOT FIND VARIABLE 'ua'&
354 ! & IN THE HOTSTART FILE OBJECT")
355 ! CALL NC_CONNECT_AVAR(VAR, UA)
356 ! CALL NC_READ_VAR(VAR,STKCNT)
357 !
358 ! VAR => FIND_VAR(NC_START,'va',FOUND)
359 ! IF(.not. FOUND) CALL FATAL_ERROR("COULD NOT FIND VARIABLE 'va'&
360 ! & IN THE HOTSTART FILE OBJECT")
361 ! CALL NC_CONNECT_AVAR(VAR, VA)
362 ! CALL NC_READ_VAR(VAR,STKCNT)
363 !
364 ! IF(DBG_SET(DBG_SBR)) write(ipt,*) "END: READ_UV"
365 !
366 ! END SUBROUTINE READ_UV1
367 !!==============================================================================!
368 ! SUBROUTINE READ_TURB1(NC_START)
369 ! IMPLICIT NONE
370 ! TYPE(NCFILE),POINTER :: NC_START
371 ! TYPE(NCVAR), POINTER :: VAR
372 ! TYPE(NCDIM), POINTER :: DIM
373 ! LOGICAL :: FOUND
374 ! INTEGER :: STKCNT
375 !
376 ! IF(DBG_SET(DBG_SBR)) write(ipt,*) "START: READ_TURB"
377 !
378 ! STKCNT = NC_START%FTIME%PREV_STKCNT
379 !
380 !# if defined (GOTM)
381 !
382 ! VAR => FIND_VAR(NC_START,'tke',FOUND)
383 ! IF(.not. FOUND) CALL FATAL_ERROR("COULD NOT FIND VARIABLE 'tke'&
384 ! & IN THE HOTSTART FILE OBJECT")
385 ! CALL NC_CONNECT_AVAR(VAR, TKE)
386 ! CALL NC_READ_VAR(VAR,STKCNT)
387 !
388 ! VAR => FIND_VAR(NC_START,'teps',FOUND)
389 ! IF(.not. FOUND) CALL FATAL_ERROR("COULD NOT FIND VARIABLE 'teps'&
390 ! & IN THE HOTSTART FILE OBJECT")
391 ! CALL NC_CONNECT_AVAR(VAR, TEPS)
392 ! CALL NC_READ_VAR(VAR,STKCNT)
393 !
394 ! L = .001
395 ! L(1:MT,2:KBM1) = (.5544**3)*TKE(1:MT,2:KBM1)**1.5/TEPS(1:MT,2:KBM1)
396 !
397 !# else
398 !
399 ! VAR => FIND_VAR(NC_START,'q2',FOUND)
400 ! IF(.not. FOUND) CALL FATAL_ERROR("COULD NOT FIND VARIABLE 'q2'&
401 ! & IN THE HOTSTART FILE OBJECT")
402 ! CALL NC_CONNECT_AVAR(VAR, Q2)
403 ! CALL NC_READ_VAR(VAR,STKCNT)
404 !
405 ! VAR => FIND_VAR(NC_START,'q2l',FOUND)
406 ! IF(.not. FOUND) CALL FATAL_ERROR("COULD NOT FIND VARIABLE 'q2l'&
407 ! & IN THE HOTSTART FILE OBJECT")
408 ! CALL NC_CONNECT_AVAR(VAR, Q2L)
409 ! CALL NC_READ_VAR(VAR,STKCNT)
410 !
411 ! VAR => FIND_VAR(NC_START,'l',FOUND)
412 ! IF(.not. FOUND) CALL FATAL_ERROR("COULD NOT FIND VARIABLE 'l'&
413 ! & IN THE HOTSTART FILE OBJECT")
414 ! CALL NC_CONNECT_AVAR(VAR, L)
415 ! CALL NC_READ_VAR(VAR,STKCNT)
416 !
417 !# endif
418 !
419 ! VAR => FIND_VAR(NC_START,'km',FOUND)
420 ! IF(.not. FOUND) CALL FATAL_ERROR("COULD NOT FIND VARIABLE 'km'&
421 ! & IN THE HOTSTART FILE OBJECT")
422 ! CALL NC_CONNECT_AVAR(VAR, km)
423 ! CALL NC_READ_VAR(VAR,STKCNT)
424 !
425 ! VAR => FIND_VAR(NC_START,'kq',FOUND)
426 ! IF(.not. FOUND) CALL FATAL_ERROR("COULD NOT FIND VARIABLE 'kq'&
427 ! & IN THE HOTSTART FILE OBJECT")
428 ! CALL NC_CONNECT_AVAR(VAR, KQ)
429 ! CALL NC_READ_VAR(VAR,STKCNT)
430 !
431 ! VAR => FIND_VAR(NC_START,'kh',FOUND)
432 ! IF(.not. FOUND) CALL FATAL_ERROR("COULD NOT FIND VARIABLE 'kh'&
433 ! & IN THE HOTSTART FILE OBJECT")
434 ! CALL NC_CONNECT_AVAR(VAR, KH)
435 ! CALL NC_READ_VAR(VAR,STKCNT)
436 !
437 !
438 ! CALL N2E3D(KM,KM1)
439 !
440 ! IF(DBG_SET(DBG_SBR)) write(ipt,*) "END: READ_TURB"
441 !
442 ! END SUBROUTINE READ_TURB1
443 !!==============================================================================|
444 !# endif
445 !END MODULE MOD_STARTUP_MIMIC
446 
447 MODULE mod_enkf
448  USE enkfval
449  USE mod_ncdio, only : update_iodata
450  USE mod_input, only : nc_start
451  USE control
452  USE mod_utils
453  USE mod_nctools
454  IMPLICIT NONE
455  SAVE
456 
457 
458  LOGICAL :: enkf_on
459 
460 END MODULE mod_enkf
461 
subroutine update_iodata(NCF, NOW)
Definition: mod_ncdio.f90:3913
logical enkf_on
Definition: mod_enkf.f90:458
type(ncfile), pointer nc_start
Definition: mod_input.f90:51