WAVEWATCH III  beta 0.0.1
w3nmluprstrmd.F90
Go to the documentation of this file.
1 #include "w3macros.h"
2 !/ ------------------------------------------------------------------- /
4  !/
5  !/ +-----------------------------------+
6  !/ | WAVEWATCH III NOAA/NCEP |
7  !/ | M. Accensi |
8  !/ | |
9  !/ | FORTRAN 90 |
10  !/ | Last update : 06-Oct-2020 |
11  !/ +-----------------------------------+
12  !/
13  !/ For updates see subroutines.
14  !/
15  ! 1. Purpose :
16  !
17  ! Manages namelists from configuration file ww3_uprstr.nml for ww3_uprstr program
18  !
19  !/ ------------------------------------------------------------------- /
20 
21  ! module defaults
22  IMPLICIT NONE
23 
24  PUBLIC
25 
26  ! restart time
28  CHARACTER(15) :: restarttime
29  END TYPE nml_restart_t
30 
31  ! update approach
33  CHARACTER(5) :: updproc
34  REAL :: prcntg
35  REAL :: prcntgcap
36  REAL :: thrwsea
37  CHARACTER(30) :: file
38  END TYPE nml_update_t
39 
40  ! miscellaneous
41  CHARACTER(256) :: msg
42  INTEGER :: ndsn
43 
44 
45 
46 
47 CONTAINS
48  !/ ------------------------------------------------------------------- /
49  SUBROUTINE w3nmluprstr (NDSI, INFILE, NML_RESTART, NML_UPDATE, IERR)
50  !/
51  !/ +-----------------------------------+
52  !/ | WAVEWATCH III NOAA/NCEP |
53  !/ | M. Accensi |
54  !/ | |
55  !/ | FORTRAN 90 |
56  !/ | Last update : 06-Oct-2020 |
57  !/ +-----------------------------------+
58  !/
59  !
60  ! 1. Purpose :
61  !
62  ! Reads all the namelist to define the output field
63  !
64  ! 2. Method :
65  !
66  ! See source term routines.
67  !
68  ! 3. Parameters :
69  !
70  ! Parameter list
71  ! ----------------------------------------------------------------
72  ! NDSI Int.
73  ! INFILE Char.
74  ! NML_RESTART type.
75  ! NML_UPDATE type.
76  ! IERR Int.
77  ! ----------------------------------------------------------------
78  !
79  ! 4. Subroutines used :
80  !
81  ! Name TYPE Module Description
82  ! ----------------------------------------------------------------
83  ! STRACE Subr. W3SERVMD SUBROUTINE tracing.
84  ! READ_RESTART_NML
85  ! READ_UPDATE_NML
86  ! ----------------------------------------------------------------
87  !
88  ! 5. Called by :
89  !
90  ! Name TYPE Module Description
91  ! ----------------------------------------------------------------
92  ! WW3_UPRSTR Prog. N/A Update restart file
93  ! ----------------------------------------------------------------
94  !
95  ! 6. Error messages :
96  !
97  ! None.
98  !
99  ! 7. Remarks :
100  !
101  ! 8. Structure :
102  !
103  ! See source code.
104  !
105  ! 9. Switches :
106  !
107  ! 10. Source code :
108  !
109  !/ ------------------------------------------------------------------- /
110 
111  USE w3odatmd, ONLY: ndse
112 #ifdef W3_S
113  USE w3servmd, ONLY: strace
114 #endif
115 
116  IMPLICIT NONE
117 
118  INTEGER, INTENT(IN) :: NDSI
119  CHARACTER*(*), INTENT(IN) :: INFILE
120  TYPE(nml_restart_t), INTENT(INOUT) :: NML_RESTART
121  TYPE(nml_update_t), INTENT(INOUT) :: NML_UPDATE
122  INTEGER, INTENT(OUT) :: IERR
123 #ifdef W3_S
124  INTEGER, SAVE :: IENT = 0
125 #endif
126 
127  ierr = 0
128 #ifdef W3_S
129  CALL strace (ient, 'W3NMLUPRSTR')
130 #endif
131 
132  ! open namelist log file
133  ndsn = 3
134  OPEN (ndsn, file=trim(infile)//'.log', form='formatted', iostat=ierr)
135  IF (ierr.NE.0) THEN
136  WRITE (ndse,'(A)') 'ERROR: open full nml file '//trim(infile)//'.log failed'
137  RETURN
138  END IF
139 
140  ! open input file
141  OPEN (ndsi, file=trim(infile), form='formatted', status='old', iostat=ierr)
142  IF (ierr.NE.0) THEN
143  WRITE (ndse,'(A)') 'ERROR: open input file '//trim(infile)//' failed'
144  RETURN
145  END IF
146 
147  ! read restart time namelist
148  CALL read_restart_nml (ndsi, nml_restart)
149  CALL report_restart_nml (nml_restart)
150 
151  ! read update approach namelist
152  CALL read_update_nml (ndsi, nml_update)
153  CALL report_update_nml (nml_update)
154 
155  ! close namelist files
156  CLOSE (ndsi)
157  CLOSE (ndsn)
158 
159  END SUBROUTINE w3nmluprstr
160 
161 
162  !/ ------------------------------------------------------------------- /
163 
164 
165 
166  !/ ------------------------------------------------------------------- /
167 
168  SUBROUTINE read_restart_nml (NDSI, NML_RESTART)
169  !/
170  !/ +-----------------------------------+
171  !/ | WAVEWATCH III NOAA/NCEP |
172  !/ | M. Accensi |
173  !/ | |
174  !/ | FORTRAN 90 |
175  !/ | Last update : 06-Oct-2020 |
176  !/ +-----------------------------------+
177  !/
178  ! 1. Purpose :
179  !
180  !
181  ! 2. Method :
182  !
183  ! See source term routines.
184  !
185  ! 3. Parameters :
186  !
187  ! Parameter list
188  ! ----------------------------------------------------------------
189  ! NDSI Int.
190  ! NML_RESTART Type.
191  ! ----------------------------------------------------------------
192  !
193  ! 4. Subroutines used :
194  !
195  ! Name TYPE Module Description
196  ! ----------------------------------------------------------------
197  ! STRACE Subr. W3SERVMD SUBROUTINE tracing.
198  ! ----------------------------------------------------------------
199  !
200  ! 5. Called by :
201  !
202  ! Name TYPE Module Description
203  ! ----------------------------------------------------------------
204  ! W3NMLUPRSTR Subr. N/A Namelist configuration routine.
205  ! ----------------------------------------------------------------
206  !
207  ! 6. Error messages :
208  !
209  ! None.
210  !
211  ! 7. Remarks :
212  !
213  ! 8. Structure :
214  !
215  ! See source code.
216  !
217  ! 9. Switches :
218  !
219  ! 10. Source code :
220  !
221  !/ ------------------------------------------------------------------- /
222 
223  USE w3odatmd, ONLY: ndse
224  USE w3servmd, ONLY: extcde
225 #ifdef W3_S
226  USE w3servmd, ONLY: strace
227 #endif
228 
229  IMPLICIT NONE
230 
231  INTEGER, INTENT(IN) :: NDSI
232  TYPE(nml_restart_t), INTENT(INOUT) :: NML_RESTART
233 
234  ! locals
235  INTEGER :: IERR
236  TYPE(nml_restart_t) :: RESTART
237  namelist /restart_nml/ restart
238 #ifdef W3_S
239  INTEGER, SAVE :: IENT = 0
240 #endif
241 
242  ierr = 0
243 #ifdef W3_S
244  CALL strace (ient, 'READ_RESTART_NML')
245 #endif
246 
247  ! set default values
248  restart%RESTARTTIME = '19680607 120000'
249 
250  ! read restart namelist
251  rewind(ndsi)
252  READ (ndsi, nml=restart_nml, iostat=ierr, iomsg=msg)
253  IF (ierr.NE.0) THEN
254  WRITE (ndse,'(A,/A)') &
255  'ERROR: READ_RESTART_NML: namelist read error', &
256  'ERROR: '//trim(msg)
257  CALL extcde (1)
258  END IF
259 
260  ! save namelist
261  nml_restart = restart
262 
263  END SUBROUTINE read_restart_nml
264 
265  !/ ------------------------------------------------------------------- /
266 
267 
268 
269  !/ ------------------------------------------------------------------- /
270 
271  SUBROUTINE read_update_nml (NDSI, NML_UPDATE)
272  !/
273  !/ +-----------------------------------+
274  !/ | WAVEWATCH III NOAA/NCEP |
275  !/ | M. Accensi |
276  !/ | |
277  !/ | FORTRAN 90 |
278  !/ | Last update : 06-Oct-2020 |
279  !/ +-----------------------------------+
280  !/
281  ! 1. Purpose :
282  !
283  !
284  ! 2. Method :
285  !
286  ! See source term routines.
287  !
288  ! 3. Parameters :
289  !
290  ! Parameter list
291  ! ----------------------------------------------------------------
292  ! NDSI Int.
293  ! NML_UPDATE Type.
294  ! ----------------------------------------------------------------
295  !
296  ! 4. Subroutines used :
297  !
298  ! Name TYPE Module Description
299  ! ----------------------------------------------------------------
300  ! STRACE Subr. W3SERVMD SUBROUTINE tracing.
301  ! ----------------------------------------------------------------
302  !
303  ! 5. Called by :
304  !
305  ! Name TYPE Module Description
306  ! ----------------------------------------------------------------
307  ! W3NMLUPRSTR Subr. N/A Namelist configuration routine.
308  ! ----------------------------------------------------------------
309  !
310  ! 6. Error messages :
311  !
312  ! None.
313  !
314  ! 7. Remarks :
315  !
316  ! 8. Structure :
317  !
318  ! See source code.
319  !
320  ! 9. Switches :
321  !
322  ! 10. Source code :
323  !
324  !/ ------------------------------------------------------------------- /
325 
326  USE w3odatmd, ONLY: ndse
327  USE w3servmd, ONLY: extcde
328 #ifdef W3_S
329  USE w3servmd, ONLY: strace
330 #endif
331 
332  IMPLICIT NONE
333 
334  INTEGER, INTENT(IN) :: NDSI
335  TYPE(nml_update_t), INTENT(INOUT) :: NML_UPDATE
336 
337  ! locals
338  INTEGER :: IERR
339  TYPE(nml_update_t) :: UPDATE
340  namelist /update_nml/ update
341 #ifdef W3_S
342  INTEGER, SAVE :: IENT = 0
343 #endif
344 
345  ierr = 0
346 #ifdef W3_S
347  CALL strace (ient, 'READ_UPDATE_NML')
348 #endif
349 
350  ! set default values for update approach
351  ! as set, these would run the update but not correct
352  ! any spectra (scalar correction by factor of 1.0)
353  update%UPDPROC = 'UPD0F' ! Update type
354  update%PRCNTG = 1.0 ! Scalar correction factor (1.0=no correction)
355  update%PRCNTGCAP = 10.0 ! Cap on correction factor
356  update%THRWSEA = 0.7 ! Energy threshold for wind-sea dominance
357  update%FILE = 'anl.grbtxt' ! Corrected analysed SWH field file
358 
359  ! read file namelist
360  rewind(ndsi)
361  READ (ndsi, nml=update_nml, iostat=ierr, iomsg=msg)
362  IF (ierr.GT.0) THEN
363  WRITE (ndse,'(A,/A)') &
364  'ERROR: READ_UPDATE_NML: namelist read error', &
365  'ERROR: '//trim(msg)
366  CALL extcde (2)
367  END IF
368 
369  ! save namelist
370  nml_update = update
371 
372  END SUBROUTINE read_update_nml
373 
374  !/ ------------------------------------------------------------------- /
375 
376 
377 
378  !/ ------------------------------------------------------------------- /
379 
380  SUBROUTINE report_restart_nml (NML_RESTART)
381  !/
382  !/ +-----------------------------------+
383  !/ | WAVEWATCH III NOAA/NCEP |
384  !/ | M. Accensi |
385  !/ | FORTRAN 90 |
386  !/ | Last update : 06-Oct-2020 |
387  !/ +-----------------------------------+
388  !/
389  !/
390  ! 1. Purpose :
391  !
392  !
393  ! 2. Method :
394  !
395  ! See source term routines.
396  !
397  ! 3. Parameters :
398  !
399  ! Parameter list
400  ! ----------------------------------------------------------------
401  ! NML_RESTART Type.
402  ! ----------------------------------------------------------------
403  !
404  ! 4. Subroutines used :
405  !
406  ! Name TYPE Module Description
407  ! ----------------------------------------------------------------
408  ! STRACE Subr. W3SERVMD SUBROUTINE tracing.
409  ! ----------------------------------------------------------------
410  !
411  ! 5. Called by :
412  !
413  ! Name TYPE Module Description
414  ! ----------------------------------------------------------------
415  ! W3NMLUPRSTR Subr. N/A Namelist configuration routine.
416  ! ----------------------------------------------------------------
417  !
418  ! 6. Error messages :
419  !
420  ! None.
421  !
422  ! 7. Remarks :
423  !
424  ! 8. Structure :
425  !
426  ! See source code.
427  !
428  ! 9. Switches :
429  !
430  ! 10. Source code :
431  !
432  !/ ------------------------------------------------------------------- /
433 
434 #ifdef W3_S
435  USE w3servmd, ONLY: strace
436 #endif
437 
438  IMPLICIT NONE
439 
440  TYPE(nml_restart_t), INTENT(IN) :: NML_RESTART
441 #ifdef W3_S
442  INTEGER, SAVE :: IENT = 0
443 #endif
444 
445 #ifdef W3_S
446  CALL strace (ient, 'REPORT_RESTART_NML')
447 #endif
448 
449  WRITE (msg,'(A)') 'RESTART % '
450  WRITE (ndsn,'(A)')
451  WRITE (ndsn,10) trim(msg),'RESTARTTIME = ', trim(nml_restart%RESTARTTIME)
452 
453 10 FORMAT (a,2x,a,a)
454 
455  END SUBROUTINE report_restart_nml
456 
457  !/ ------------------------------------------------------------------- /
458 
459 
460 
461  !/ ------------------------------------------------------------------- /
462 
463  SUBROUTINE report_update_nml (NML_UPDATE)
464  !/
465  !/ +-----------------------------------+
466  !/ | WAVEWATCH III NOAA/NCEP |
467  !/ | M. Accensi |
468  !/ | FORTRAN 90 |
469  !/ | Last update : 06-Oct-2020 |
470  !/ +-----------------------------------+
471  !/
472  !/
473  ! 1. Purpose :
474  !
475  !
476  ! 2. Method :
477  !
478  ! See source term routines.
479  !
480  ! 3. Parameters :
481  !
482  ! Parameter list
483  ! ----------------------------------------------------------------
484  ! NML_UPDATE Type.
485  ! ----------------------------------------------------------------
486  !
487  ! 4. Subroutines used :
488  !
489  ! Name TYPE Module Description
490  ! ----------------------------------------------------------------
491  ! STRACE Subr. W3SERVMD SUBROUTINE tracing.
492  ! ----------------------------------------------------------------
493  !
494  ! 5. Called by :
495  !
496  ! Name TYPE Module Description
497  ! ----------------------------------------------------------------
498  ! W3NMLUPRSTR Subr. N/A Namelist configuration routine.
499  ! ----------------------------------------------------------------
500  !
501  ! 6. Error messages :
502  !
503  ! None.
504  !
505  ! 7. Remarks :
506  !
507  ! 8. Structure :
508  !
509  ! See source code.
510  !
511  ! 9. Switches :
512  !
513  ! 10. Source code :
514  !
515  !/ ------------------------------------------------------------------- /
516 
517 #ifdef W3_S
518  USE w3servmd, ONLY: strace
519 #endif
520 
521  IMPLICIT NONE
522 
523  TYPE(nml_update_t), INTENT(IN) :: NML_UPDATE
524 #ifdef W3_S
525  INTEGER, SAVE :: IENT = 0
526 #endif
527 
528 #ifdef W3_S
529  CALL strace (ient, 'REPORT_UPDATE_NML')
530 #endif
531 
532  WRITE (msg,'(A)') 'UPDATE % '
533  WRITE (ndsn,'(A)')
534  WRITE (ndsn,10) trim(msg),'UPDPROC = ', trim(nml_update%UPDPROC)
535  ! PRCNTG only used by UPD0F
536  IF (trim(nml_update%UPDPROC) .EQ. 'UPD0F') THEN
537  WRITE (ndsn,11) trim(msg),'PRCNTG = ', nml_update%PRCNTG
538  ELSE
539  WRITE (ndsn,11) trim(msg),'PRCNTGCAP = ', nml_update%PRCNTGCAP
540  ! THRWSEA only used by UPD5/6
541  IF ((trim(nml_update%UPDPROC) .EQ. 'UPD5') .OR. &
542  (trim(nml_update%UPDPROC) .EQ. 'UPD6')) THEN
543  WRITE (ndsn,11) trim(msg),'THRWSEA = ', nml_update%THRWSEA
544  ENDIF
545  WRITE (ndsn,10) trim(msg),'FILE = ', trim(nml_update%FILE)
546  ENDIF
547 
548 10 FORMAT (a,2x,a,a)
549 11 FORMAT (a,2x,a,f5.3)
550 
551  END SUBROUTINE report_update_nml
552 
553  !/ ------------------------------------------------------------------- /
554 
555 
556 
557 END MODULE w3nmluprstrmd
558 
559 !/ ------------------------------------------------------------------- /
w3nmluprstrmd::nml_update_t
Definition: w3nmluprstrmd.F90:32
w3nmluprstrmd::ndsn
integer ndsn
Definition: w3nmluprstrmd.F90:42
w3nmluprstrmd::report_update_nml
subroutine report_update_nml(NML_UPDATE)
Definition: w3nmluprstrmd.F90:464
w3nmluprstrmd::read_restart_nml
subroutine read_restart_nml(NDSI, NML_RESTART)
Definition: w3nmluprstrmd.F90:169
w3nmluprstrmd::msg
character(256) msg
Definition: w3nmluprstrmd.F90:41
w3nmluprstrmd
Definition: w3nmluprstrmd.F90:3
w3odatmd::ndse
integer, pointer ndse
Definition: w3odatmd.F90:456
w3servmd
Definition: w3servmd.F90:3
w3odatmd
Definition: w3odatmd.F90:3
file
file(STRINGS ${CMAKE_BINARY_DIR}/switch switch_strings) separate_arguments(switches UNIX_COMMAND $
Definition: CMakeLists.txt:3
w3nmluprstrmd::report_restart_nml
subroutine report_restart_nml(NML_RESTART)
Definition: w3nmluprstrmd.F90:381
w3servmd::strace
subroutine strace(IENT, SNAME)
Definition: w3servmd.F90:148
w3nmluprstrmd::w3nmluprstr
subroutine w3nmluprstr(NDSI, INFILE, NML_RESTART, NML_UPDATE, IERR)
Definition: w3nmluprstrmd.F90:50
w3nmluprstrmd::nml_restart_t
Definition: w3nmluprstrmd.F90:27
w3servmd::extcde
subroutine extcde(IEXIT, UNIT, MSG, FILE, LINE, COMM)
Definition: w3servmd.F90:736
w3nmluprstrmd::read_update_nml
subroutine read_update_nml(NDSI, NML_UPDATE)
Definition: w3nmluprstrmd.F90:272