Ticket #805: checkdefs.F

File checkdefs.F, 109.1 KB (added by m.hadfield, 5 years ago)
Line 
1#include "cppdefs.h"
2 SUBROUTINE checkdefs
3!
4!svn $Id$
5!================================================== Hernan G. Arango ===
6! Copyright (c) 2002-2019 The ROMS/TOMS Group !
7! Licensed under a MIT/X style license !
8! See License_ROMS.txt !
9!=======================================================================
10! !
11! This subroutine checks activated C-preprocessing options for !
12! consistency. !
13! !
14!=======================================================================
15!
16 USE mod_param
17 USE mod_parallel
18 USE mod_iounits
19 USE mod_scalars
20 USE mod_strings
21!
22 USE strings_mod, ONLY : uppercase
23!
24 implicit none
25!
26! Local variable declarations.
27!
28 integer :: iatms = 0
29 integer :: ibbl = 0
30 integer :: ibiology = 0
31 integer :: idriver = 0
32 integer :: itrcHadv = 0
33 integer :: itrcVadv = 0
34 integer :: itrcHadvtl = 0
35 integer :: itrcVadvtl = 0
36 integer :: ivelHadv = 0
37 integer :: ivelVadv = 0
38 integer :: ivmix = 0
39 integer :: nearshore = 0
40
41 integer :: is, lstr, ng
42!
43!-----------------------------------------------------------------------
44! Report activated C-preprocessing options.
45!-----------------------------------------------------------------------
46!
47 Coptions=' '
48 IF (Master) WRITE (stdout,10)
49 10 FORMAT (/,' Activated C-preprocessing Options:',/)
50 20 FORMAT (1x,a,t26,a)
51!
52 IF (Master) THEN
53 WRITE (stdout,20) TRIM(ADJUSTL(MyAppCPP)), TRIM(ADJUSTL(title))
54 END IF
55 is=LEN_TRIM(Coptions)+1
56 lstr=LEN_TRIM(MyAppCPP)
57 Coptions(is:is+lstr)=TRIM(ADJUSTL(MyAppCPP))
58 is=LEN_TRIM(Coptions)+1
59 Coptions(is:is)=','
60
61#if defined AD_AVERAGES && defined ADJOINT
62!
63 IF (Master) WRITE (stdout,20) 'AD_AVERAGES', &
64 & 'Writing out time-averaged adjoint model fields'
65 is=LEN_TRIM(Coptions)+1
66 Coptions(is:is+13)=' AD_AVERAGES,'
67#endif
68#if defined ADD_FSOBC && defined SSH_TIDES
69!
70 IF (Master) WRITE (stdout,20) 'ADD_FSOBC', &
71 & 'Adding tidal elevation to processed OBC data'
72 is=LEN_TRIM(Coptions)+1
73 Coptions(is:is+11)=' ADD_FSOBC,'
74#endif
75#if defined ADD_M2OBC && defined UV_TIDES
76!
77 IF (Master) WRITE (stdout,20) 'ADD_M2OBC', &
78 & 'Adding tidal currents to processed OBC data'
79 is=LEN_TRIM(Coptions)+1
80 Coptions(is:is+11)=' ADD_M2OBC,'
81#endif
82#ifdef ADJOINT
83!
84 IF (Master) WRITE (stdout,20) 'ADJOINT', &
85 & 'Adjoint Model'
86 is=LEN_TRIM(Coptions)+1
87 Coptions(is:is+9)=' ADJOINT,'
88#endif
89#if defined ADJUST_BOUNDARY && \
90 (defined CORRELATION || defined IS4DVAR || \
91 defined IS4DVAR_SENSITIVITY || defined SENSITIVITY_4DVAR || \
92 defined W4DPSAS || defined W4DVAR)
93!
94 IF (Master) WRITE (stdout,20) 'ADJUST_BOUNDARY', &
95 & 'Including boundary conditions in 4DVar state estimation'
96 is=LEN_TRIM(Coptions)+1
97 Coptions(is:is+17)=' ADJUST_BOUNDARY,'
98#endif
99#if defined ADJUST_STFLUX && \
100 (defined CORRELATION || defined IS4DVAR || \
101 defined IS4DVAR_SENSITIVITY || defined SENSITIVITY_4DVAR || \
102 defined W4DPSAS || defined W4DVAR)
103!
104 IF (Master) WRITE (stdout,20) 'ADJUST_STFLUX', &
105 & 'Including surface tracer flux in 4DVar state estimation'
106 is=LEN_TRIM(Coptions)+1
107 Coptions(is:is+15)=' ADJUST_STFLUX,'
108#endif
109#if defined ADJUST_WSTRESS && \
110 (defined CORRELATION || defined IS4DVAR || \
111 defined IS4DVAR_SENSITIVITY || defined SENSITIVITY_4DVAR || \
112 defined W4DPSAS || defined W4DVAR)
113!
114 IF (Master) WRITE (stdout,20) 'ADJUST_WSTRESS', &
115 & 'Including surface wind stress in 4DVar state estimation'
116 is=LEN_TRIM(Coptions)+1
117 Coptions(is:is+16)=' ADJUST_WSTRESS,'
118#endif
119#if defined AD_IMPULSE
120!
121 IF (Master) WRITE (stdout,20) 'AD_IMPULSE', &
122 & 'Force adjoint model with intermittent impulses'
123 is=LEN_TRIM(Coptions)+1
124 Coptions(is:is+12)=' AD_IMPULSE,'
125#endif
126#ifdef ADM_DRIVER
127!
128 IF (Master) WRITE (stdout,20) 'ADM_DRIVER', &
129 & 'Generic adjoint model driver'
130 is=LEN_TRIM(Coptions)+1
131 Coptions(is:is+12)=' ADM_DRIVER,'
132 idriver=idriver+1
133#endif
134#ifdef AD_SENSITIVITY
135!
136 IF (Master) WRITE (stdout,20) 'AD_SENSITIVITY', &
137 & 'Adjoint Sensitivity Analysis'
138 is=LEN_TRIM(Coptions)+1
139 Coptions(is:is+16)=' AD_SENSITIVITY,'
140 idriver=idriver+1
141#endif
142#ifdef AFT_EIGENMODES
143!
144 IF (Master) WRITE (stdout,20) 'AFT_EIGENMODES', &
145 & 'Adjoint Finite Time Eigenvalues'
146 is=LEN_TRIM(Coptions)+1
147 Coptions(is:is+16)=' AFT_EIGENMODES,'
148 idriver=idriver+1
149#endif
150#if defined AGE_MEAN && defined T_PASSIVE && defined SOLVE3D
151!
152 IF (Master) WRITE (stdout,20) 'AGE_MEAN', &
153 & 'Computing Mean Age of inert passive tracer'
154 is=LEN_TRIM(Coptions)+1
155 Coptions(is:is+10)=' AGE_MEAN,'
156 idriver=idriver+1
157#endif
158#if defined ALBEDO && defined ANA_SRFLUX
159!
160 IF (Master) WRITE (stdout,20) 'ALBEDO', &
161 & 'Shortwave radiation from albedo equation'
162 is=LEN_TRIM(Coptions)+1
163 Coptions(is:is+8)=' ALBEDO,'
164#endif
165#if defined BIOLOGY && defined ANA_BIOLOGY
166!
167 IF (Master) WRITE (stdout,20) 'ANA_BIOLOGY', &
168 & 'Analytical biology initial conditions'
169 is=LEN_TRIM(Coptions)+1
170 Coptions(is:is+13)=' ANA_BIOLOGY,'
171#endif
172#if defined BIOLOGY || defined SEDIMENT || defined T_PASSIVE
173# ifdef ANA_BPFLUX
174!
175 IF (Master) WRITE (stdout,20) 'ANA_BPFLUX', &
176 & 'Analytical bottom passive tracers fluxes'
177 is=LEN_TRIM(Coptions)+1
178 Coptions(is:is+12)=' ANA_BPFLUX,'
179# endif
180#endif
181#ifdef ANA_BSFLUX
182!
183 IF (Master) WRITE (stdout,20) 'ANA_BSFLUX', &
184 & 'Analytical kinematic bottom salinity flux'
185 is=LEN_TRIM(Coptions)+1
186 Coptions(is:is+12)=' ANA_BSFLUX,'
187#endif
188#ifdef ANA_BTFLUX
189!
190 IF (Master) WRITE (stdout,20) 'ANA_BTFLUX', &
191 & 'Analytical kinematic bottom temperature flux'
192 is=LEN_TRIM(Coptions)+1
193 Coptions(is:is+12)=' ANA_BTFLUX,'
194#endif
195#if defined ANA_CLOUD && defined BULK_FLUXES
196!
197 IF (Master) WRITE (stdout,20) 'ANA_CLOUD', &
198 & 'Analytical cloud fraction'
199 is=LEN_TRIM(Coptions)+1
200 Coptions(is:is+11)=' ANA_CLOUD,'
201#endif
202#if defined ANA_DRAG && defined UV_DRAG_GRID
203!
204 IF (Master) WRITE (stdout,20) 'ANA_DRAG_GRID', &
205# if defined UV_LOGDRAG
206 & 'Analytical spatially varying bottom roughness length'
207# elif defined UV_LDRAG
208 & 'Analytical spatially varying linear drag coefficient'
209# elif defined UV_QDRAG
210 & 'Analytical spatially varying quadratic drag coefficient'
211# endif
212 is=LEN_TRIM(Coptions)+1
213 Coptions(is:is+10)=' ANA_DRAG,'
214#endif
215#ifdef ANA_DIAG
216!
217 IF (Master) WRITE (stdout,20) 'ANA_DIAG', &
218 & 'Customized diagnostics'
219 is=LEN_TRIM(Coptions)+1
220 Coptions(is:is+10)=' ANA_DIAG,'
221#endif
222#if defined ANA_DQDSST && defined QCORRECTION
223!
224 IF (Master) WRITE (stdout,20) 'ANA_DQDSST', &
225 & 'Analytical surface heat flux sensitivity to SST'
226 is=LEN_TRIM(Coptions)+1
227 Coptions(is:is+12)=' ANA_DQDSST,'
228#endif
229#ifdef ANA_FSOBC
230!
231 IF (Master) WRITE (stdout,20) 'ANA_FSOBC', &
232 & 'Analytical free-surface boundary conditions'
233 is=LEN_TRIM(Coptions)+1
234 Coptions(is:is+11)=' ANA_FSOBC,'
235#endif
236#ifdef ANA_GRID
237!
238 IF (Master) WRITE (stdout,20) 'ANA_GRID', &
239 & 'Analytical grid set-up'
240 is=LEN_TRIM(Coptions)+1
241 Coptions(is:is+10)=' ANA_GRID,'
242#endif
243#if defined ANA_HUMIDITY && defined BULK_FLUXES
244!
245 IF (Master) WRITE (stdout,20) 'ANA_HUMIDITY', &
246 & 'Analytical surface air humidity'
247 is=LEN_TRIM(Coptions)+1
248 Coptions(is:is+14)=' ANA_HUMIDITY,'
249#endif
250#ifdef ANA_INITIAL
251!
252 IF (Master) WRITE (stdout,20) 'ANA_INITIAL', &
253 & 'Analytical initial conditions'
254 is=LEN_TRIM(Coptions)+1
255 Coptions(is:is+13)=' ANA_INITIAL,'
256#endif
257#ifdef ANA_M2CLIMA
258!
259 IF (Master) WRITE (stdout,20) 'ANA_M2CLIMA', &
260 & 'Analytical 2D momentum climatology'
261 is=LEN_TRIM(Coptions)+1
262 Coptions(is:is+13)=' ANA_M2CLIMA,'
263#endif
264#ifdef ANA_M2OBC
265!
266 IF (Master) WRITE (stdout,20) 'ANA_M2OBC', &
267 & 'Analytical 2D momentum boundary conditions'
268 is=LEN_TRIM(Coptions)+1
269 Coptions(is:is+11)=' ANA_M2OBC,'
270#endif
271#if defined ANA_M3CLIMA && defined SOLVE3D
272!
273 IF (Master) WRITE (stdout,20) 'ANA_M3CLIMA', &
274 & 'Analytical 3D momentum climatology'
275 is=LEN_TRIM(Coptions)+1
276 Coptions(is:is+13)=' ANA_M3CLIMA,'
277#endif
278#if defined ANA_M3OBC && defined SOLVE3D
279!
280 IF (Master) WRITE (stdout,20) 'ANA_M3OBC', &
281 & 'Analytical 3D momentum boundary conditions'
282 is=LEN_TRIM(Coptions)+1
283 Coptions(is:is+11)=' ANA_M3OBC,'
284#endif
285#ifdef ANA_MASK
286!
287 IF (Master) WRITE (stdout,20) 'ANA_MASK', &
288 & 'Analytical Land/Sea Masking'
289 is=LEN_TRIM(Coptions)+1
290 Coptions(is:is+10)=' ANA_MASK,'
291#endif
292#ifdef ANA_NUDGCOEF
293!
294 IF (ANY(Lnudging(:))) THEN
295 IF (Master) WRITE (stdout,20) 'ANA_NUDGCOEF', &
296 & 'Analytical spatially varying nudging time-scales'
297 is=LEN_TRIM(Coptions)+1
298 Coptions(is:is+14)=' ANA_NUDGCOEF,'
299 END IF
300#endif
301#if defined ANA_PAIR && defined BULK_FLUXES
302!
303 IF (Master) WRITE (stdout,20) 'ANA_PAIR', &
304 & 'Analytical surface air pressure'
305 is=LEN_TRIM(Coptions)+1
306 Coptions(is:is+10)=' ANA_PAIR,'
307#endif
308#if defined ANA_PASSIVE && defined T_PASSIVE && defined SOLVE3D
309!
310 IF (Master) WRITE (stdout,20) 'ANA_PASSIVE', &
311 & 'Analytical initial conditions for inert tracers'
312 is=LEN_TRIM(Coptions)+1
313 Coptions(is:is+13)=' ANA_PASSIVE,'
314#endif
315#if defined ANA_PERTURB
316!
317 IF (Master) WRITE (stdout,20) 'ANA_PERTURB', &
318 & 'Perturb initial conditions'
319 is=LEN_TRIM(Coptions)+1
320 Coptions(is:is+13)=' ANA_PERTURB,'
321#endif
322#ifdef ANA_PSOURCE
323!
324 IF (Master) WRITE (stdout,20) 'ANA_PSOURCE', &
325 & 'Analytical point sources and sinks'
326 is=LEN_TRIM(Coptions)+1
327 Coptions(is:is+13)=' ANA_PSOURCE,'
328#endif
329#if defined ANA_RAIN && defined BULK_FLUXES
330!
331 IF (Master) WRITE (stdout,20) 'ANA_RAIN', &
332 & 'Analytical rain fall rate'
333 is=LEN_TRIM(Coptions)+1
334 Coptions(is:is+10)=' ANA_RAIN,'
335#endif
336#if defined ANA_RESPIRATION && defined HYPOXIA_SRM
337!
338 IF (Master) WRITE (stdout,20) 'ANA_RESPIRATION', &
339 & 'Analytical respiration rate'
340 is=LEN_TRIM(Coptions)+1
341 Coptions(is:is+17)=' ANA_RESPIRATION,'
342#endif
343#if defined ANA_SCOPE && \
344 (defined AD_SENSITIVITY || defined IS4DVAR_SENSITIVITY || \
345 defined OPT_OBSERVATIONS || defined SENSITIVITY_4DVAR || \
346 defined SO_SEMI)
347!
348 IF (Master) WRITE (stdout,20) 'ANA_SCOPE', &
349 & 'Analytical spatial scope masking arrays'
350 is=LEN_TRIM(Coptions)+1
351 Coptions(is:is+12)=' ANA_SCOPE,'
352#endif
353#if defined ANA_SEDIMENT && (defined SEDIMENT || defined BBL_MODEL)
354!
355 IF (Master) WRITE (stdout,20) 'ANA_SEDIMENT', &
356 & 'Analytical sediment initial conditions'
357 is=LEN_TRIM(Coptions)+1
358 Coptions(is:is+14)=' ANA_SEDIMENT,'
359#endif
360#ifdef ANA_SMFLUX
361!
362 IF (Master) WRITE (stdout,20) 'ANA_SMFLUX', &
363 & 'Analytical kinematic surface momentum flux'
364 is=LEN_TRIM(Coptions)+1
365 Coptions(is:is+12)=' ANA_SMFLUX,'
366#endif
367#if defined BIOLOGY || defined SEDIMENT || defined T_PASSIVE
368# ifdef ANA_SPFLUX
369!
370 IF (Master) WRITE (stdout,20) 'ANA_SPFLUX', &
371 & 'Analytical surface passive tracer fluxes'
372 is=LEN_TRIM(Coptions)+1
373 Coptions(is:is+12)=' ANA_SPFLUX,'
374# endif
375#endif
376#ifdef ANA_SPINNING
377!
378 IF (Master) WRITE (stdout,20) 'ANA_SPINNING', &
379 & 'Analytical time-varying rotation force'
380 is=LEN_TRIM(Coptions)+1
381 Coptions(is:is+14)=' ANA_SPINNING,'
382#endif
383#ifdef ANA_SPONGE
384!
385 IF (ANY(Lsponge)) THEN
386 IF (Master) WRITE (stdout,20) 'ANA_SPONGE', &
387 & 'Analytical enhanced viscosity/diffusion sponge'
388 is=LEN_TRIM(Coptions)+1
389 Coptions(is:is+12)=' ANA_SPONGE,'
390 END IF
391#endif
392#ifdef ANA_SRFLUX
393!
394 IF (Master) WRITE (stdout,20) 'ANA_SRFLUX', &
395 & 'Analytical kinematic shortwave radiation flux'
396 is=LEN_TRIM(Coptions)+1
397 Coptions(is:is+12)=' ANA_SRFLUX,'
398#endif
399#ifdef ANA_SSH
400!
401 IF (Master) WRITE (stdout,20) 'ANA_SSH', &
402 & 'Analytical sea surface height climatology'
403 is=LEN_TRIM(Coptions)+1
404 Coptions(is:is+9)=' ANA_SSH,'
405#endif
406#ifdef ANA_SSS
407!
408 IF (Master) WRITE (stdout,20) 'ANA_SSS', &
409 & 'Analytical sea surface salinity'
410 is=LEN_TRIM(Coptions)+1
411 Coptions(is:is+9)=' ANA_SSS,'
412#endif
413#if defined ANA_SST && defined QCORRECTION
414!
415 IF (Master) WRITE (stdout,20) 'ANA_SST', &
416 & 'Analytical sea surface temperature, SST'
417 is=LEN_TRIM(Coptions)+1
418 Coptions(is:is+9)=' ANA_SST,'
419#endif
420#ifdef ANA_SSFLUX
421!
422 IF (Master) WRITE (stdout,20) 'ANA_SSFLUX', &
423 & 'Analytical kinematic surface salinity flux'
424 is=LEN_TRIM(Coptions)+1
425 Coptions(is:is+12)=' ANA_SSFLUX,'
426#endif
427#ifdef ANA_STFLUX
428!
429 IF (Master) WRITE (stdout,20) 'ANA_STFLUX', &
430 & 'Analytical kinematic surface temperature flux'
431 is=LEN_TRIM(Coptions)+1
432 Coptions(is:is+12)=' ANA_STFLUX,'
433#endif
434#if defined ANA_TCLIMA && defined SOLVE3D
435!
436 IF (Master) WRITE (stdout,20) 'ANA_TCLIMA', &
437 & 'Analytical tracer climatology'
438 is=LEN_TRIM(Coptions)+1
439 Coptions(is:is+12)=' ANA_TCLIMA,'
440#endif
441#if defined ANA_TOBC && defined SOLVE3D
442!
443 IF (Master) WRITE (stdout,20) 'ANA_TOBC', &
444 & 'Analytical tracers boundary conditions'
445 is=LEN_TRIM(Coptions)+1
446 Coptions(is:is+10)=' ANA_TOBC,'
447#endif
448#if defined ANA_VMIX && defined SOLVE3D
449!
450 IF (Master) WRITE (stdout,20) 'ANA_VMIX', &
451 & 'Analytical vertical mixing coefficients'
452 is=LEN_TRIM(Coptions)+1
453 Coptions(is:is+10)=' ANA_VMIX,'
454 ivmix=ivmix+1
455#endif
456#if defined ANA_WINDS && defined BULK_FLUXES
457!
458 IF (Master) WRITE (stdout,20) 'ANA_WINDS', &
459 & 'Analytical surface wind components'
460 is=LEN_TRIM(Coptions)+1
461 Coptions(is:is+11)=' ANA_WINDS,'
462#endif
463#if defined ANA_WTYPE && defined WTYPE_GRID && \
464 (defined LMD_SKPP || defined SOLAR_SOURCE)
465!
466 IF (Master) WRITE (stdout,20) 'ANA_WTYPE', &
467 & 'Analytical spatially varying Jerlov water type index'
468 is=LEN_TRIM(Coptions)+1
469 Coptions(is:is+11)=' ANA_WTYPE,'
470#endif
471#ifdef ANA_WWAVE
472!
473 IF (Master) WRITE (stdout,20) 'ANA_WWAVE', &
474 & 'Analytical wind induced waves'
475 is=LEN_TRIM(Coptions)+1
476 Coptions(is:is+11)=' ANA_WWAVE,'
477#endif
478#ifdef ARRAY_MODES
479!
480 IF (Master) WRITE (stdout,20) 'ARRAY_MODES', &
481 & 'Stabilized Representer Matrix Array Modes'
482 is=LEN_TRIM(Coptions)+1
483 Coptions(is:is+13)=' ARRAY_MODES,'
484 idriver=idriver+1
485# ifdef ARRAY_MODES_SPLIT
486!
487 IF (Master) WRITE (stdout,20) 'ARRAY_MODES_SPLIT', &
488 & 'Separate analysis due to IC, surface forcing, and OBC'
489 is=LEN_TRIM(Coptions)+1
490 Coptions(is:is+19)=' ARRAY_MODES_SPLIT,'
491# endif
492#endif
493#if defined DISTRIBUTE && defined NESTING
494# if defined ASSEMBLE_ALLGATHER
495!
496 IF (Master) WRITE (stdout,20) 'ASSEMBLE_ALLGATHER', &
497 & 'Using mpi_allgather in mp_assemble routine'
498 is=LEN_TRIM(Coptions)+1
499 Coptions(is:is+20)=' ASSEMBLE_ALLGATHER,'
500# elif defined ASSEMBLE_ALLREDUCE
501!
502 IF (Master) WRITE (stdout,20) 'ASSEMBLE_ALLREDUCE', &
503 & 'Using mpi_allreduce in mp_assemble routine'
504 is=LEN_TRIM(Coptions)+1
505 Coptions(is:is+20)=' ASSEMBLE_ALLGATHER,'
506# else
507!
508 IF (Master) WRITE (stdout,20) '!ASSEMBLE_ALL...', &
509 & 'Using mpi_isend/mpi_recv in mp_assemble routine'
510 is=LEN_TRIM(Coptions)+1
511 Coptions(is:is+18)=' !ASSEMBLE_ALL...,'
512# endif
513#endif
514#ifdef ASSUMED_SHAPE
515!
516 IF (Master) WRITE (stdout,20) 'ASSUMED_SHAPE', &
517 & 'Using assumed-shape arrays'
518 is=LEN_TRIM(Coptions)+1
519 Coptions(is:is+15)=' ASSUMED_SHAPE,'
520#endif
521#ifdef ATM_PRESS
522!
523 IF (Master) WRITE (stdout,20) 'ATM_PRESS', &
524 & 'Impose atmospheric pressure onto sea surface'
525 is=LEN_TRIM(Coptions)+1
526 Coptions(is:is+11)=' ATM_PRESS,'
527# ifdef PRESS_COMPENSATE
528 IF (Master) WRITE (stdout,20) 'PRESS_COMPENSATE', &
529 & 'Compensate for boundary data without atm. pressure effect'
530 is=LEN_TRIM(Coptions)+1
531 Coptions(is:is+18)=' PRESS_COMPENSATE,'
532# endif
533#endif
534#ifdef AVERAGES
535!
536 IF (Master) WRITE (stdout,20) 'AVERAGES', &
537 & 'Writing out time-averaged nonlinear model fields'
538 is=LEN_TRIM(Coptions)+1
539 Coptions(is:is+10)=' AVERAGES,'
540# if defined AVERAGES_DETIDE && (defined SSH_TIDES || defined UV_TIDES)
541!
542 IF (Master) WRITE (stdout,20) 'AVERAGES_DETIDE', &
543 & 'Writing out time-averaged nonlinear model detided fields'
544 is=LEN_TRIM(Coptions)+1
545 Coptions(is:is+17)=' AVERAGES_DETIDE,'
546# endif
547#endif
548#if defined BACKGROUND && defined FOUR_DVAR
549!
550 IF (Master) WRITE (stdout,20) 'BACKGROUND', &
551 & 'Include background cost function'
552 is=LEN_TRIM(Coptions)+1
553 Coptions(is:is+12)=' BACKGROUND,'
554#endif
555#ifdef BALANCE_OPERATOR
556!
557 IF (Master) WRITE (stdout,20) 'BALANCE_OPERATOR', &
558 & 'Error Covariance Multivariate Balance Operator'
559 is=LEN_TRIM(Coptions)+1
560 Coptions(is:is+18)=' BALANCE_OPERATOR,'
561#endif
562#if defined SEDIMENT && defined BEDLOAD_MPM
563!
564 IF (Master) WRITE (stdout,20) 'BEDLOAD_MPM', &
565 & 'Activate bed load sediment transport Meyer-Peter-Mueller'
566 is=LEN_TRIM(Coptions)+1
567 Coptions(is:is+13)=' BEDLOAD_MPM,'
568#endif
569#if defined SEDIMENT && defined BEDLOAD_SOULSBY
570!
571 IF (Master) WRITE (stdout,20) 'BEDLOAD_SOULSBY', &
572 & 'Activate bed load sediment transport Soulsby formula'
573 is=LEN_TRIM(Coptions)+1
574 Coptions(is:is+17)=' BEDLOAD_SOULSBY,'
575#endif
576#if defined BGQC && defined FOUR_DVAR
577!
578 IF (Master) WRITE (stdout,20) 'BGQC', &
579 & 'Background quality control of observations'
580 is=LEN_TRIM(Coptions)+1
581 Coptions(is:is+6)=' BGQC,'
582#endif
583#if defined BEOFS_ONLY && defined WEAK_CONSTRAINT
584!
585 IF (Master) WRITE (stdout,20) 'BEOFS_ONLY', &
586 & 'Compute EOFs of the background error covariance matrix'
587 is=LEN_TRIM(Coptions)+1
588 Coptions(is:is+12)=' BEOFS_ONLY,'
589#endif
590#ifdef BIO_FENNEL
591!
592 IF (Master) WRITE (stdout,20) 'BIO_FENNEL', &
593 & 'Fennel et al. (2006) nitrogen-based model'
594 is=LEN_TRIM(Coptions)+1
595 Coptions(is:is+12)=' BIO_FENNEL,'
596 ibiology=ibiology+1
597#endif
598#if defined BNORM && defined HESSIAN_SV
599!
600 IF (Master) WRITE (stdout,20) 'BNORM', &
601 & 'Background normalization of Hessian singular vectors'
602 is=LEN_TRIM(Coptions)+1
603 Coptions(is:is+7)=' BNORM,'
604#endif
605#if defined BIO_SEDIMENT && \
606 (defined BIO_FENNEL || defined NEMURO || defined ECOSIM)
607!
608 IF (Master) WRITE (stdout,20) 'BIO_SEDIMENT', &
609 & 'Restore fallen particulate material to the nutrient pool'
610 is=LEN_TRIM(Coptions)+1
611 Coptions(is:is+14)=' BIO_SEDIMENT,'
612#endif
613#ifdef BODYFORCE
614!
615 IF (Master) WRITE (stdout,20) 'BODYFORCE', &
616 & 'Momentum stresses as body-forces'
617 is=LEN_TRIM(Coptions)+1
618 Coptions(is:is+11)=' BODYFORCE,'
619#endif
620#ifdef DISTRIBUTE
621# if defined BOUNDARY_ALLGATHER
622!
623 IF (Master) WRITE (stdout,20) 'BOUNDARY_ALLGATHER', &
624 & 'Using mpi_allgather in mp_boundary routine'
625 is=LEN_TRIM(Coptions)+1
626 Coptions(is:is+20)=' BOUNDARY_ALLGATHER,'
627# else
628 IF (Master) WRITE (stdout,20) '!BOUNDARY_ALLGATHER', &
629 & 'Using mpi_allreduce in mp_boundary routine'
630 is=LEN_TRIM(Coptions)+1
631 Coptions(is:is+11)=' !BOUNDARY_ALLGATHER,'
632# endif
633#endif
634#ifdef BULK_FLUXES
635!
636 IF (Master) WRITE (stdout,20) 'BULK_FLUXES', &
637 & 'Surface bulk fluxes parameterization'
638 is=LEN_TRIM(Coptions)+1
639 Coptions(is:is+13)=' BULK_FLUXES,'
640#endif
641#ifdef BVF_MIXING
642!
643 IF (Master) WRITE (stdout,20) 'BVF_MIXING', &
644 & 'Brunt-Vaisala frequency based vertical mixing'
645 is=LEN_TRIM(Coptions)+1
646 Coptions(is:is+12)=' BVF_MIXING,'
647 ivmix=ivmix+1
648#endif
649#if defined CANUTO_A && defined GLS_MIXING
650!
651 IF (Master) WRITE (stdout,20) 'CANUTO_A', &
652 & 'Canuto A-stability function formulation'
653 is=LEN_TRIM(Coptions)+1
654 Coptions(is:is+8)=' CANUTO_A,'
655#endif
656#if defined CANUTO_B && defined GLS_MIXING
657!
658 IF (Master) WRITE (stdout,20) 'CANUTO_B', &
659 & 'Canuto B-stability function formulation'
660 is=LEN_TRIM(Coptions)+1
661 Coptions(is:is+8)=' CANUTO_B,'
662#endif
663#if defined CARBON && defined BIO_FENNEL
664!
665 IF (Master) WRITE (stdout,20) 'CARBON', &
666 & 'Add Carbon constituents'
667 is=LEN_TRIM(Coptions)+1
668 Coptions(is:is+8)=' CARBON,'
669#endif
670#if defined CELERITY_READ && defined FORWARD_READ
671!
672 IF (Master) WRITE (stdout,20) 'CELERITY_READ', &
673 & 'Read in radiation celerity from forward file'
674 is=LEN_TRIM(Coptions)+1
675 Coptions(is:is+15)=' CELERETY_READ,'
676#endif
677#if defined CELERITY_WRITE && defined FORWARD_WRITE
678!
679 IF (Master) WRITE (stdout,20) 'CELERITY_WRITE', &
680 & 'Write out radiation celerity in forward file'
681 is=LEN_TRIM(Coptions)+1
682 Coptions(is:is+16)=' CELERITY_WRITE,'
683#endif
684#ifdef CLIPPING
685!
686 IF (Master) WRITE (stdout,20) 'CLIPPING', &
687 & 'Stabilized Representer Matrix clipping spectrum analysis'
688 is=LEN_TRIM(Coptions)+1
689 Coptions(is:is+10)=' CLIPPING,'
690 idriver=idriver+1
691# ifdef CLIPPING_SPLIT
692!
693 IF (Master) WRITE (stdout,20) 'CLIPPING_SPLIT', &
694 & 'Separate analysis due to IC, surface forcing, and OBC'
695 is=LEN_TRIM(Coptions)+1
696 Coptions(is:is+16)=' CLIPPING_SPLIT,'
697# endif
698#endif
699#ifdef COAMPS_COUPLING
700!
701 IF (Master) WRITE (stdout,20) 'COAMPS_COUPLING', &
702 & 'Atmosphere coupling with COAMPS'
703 is=LEN_TRIM(Coptions)+1
704 Coptions(is:is+17)=' COAMPS_COUPLING,'
705 iatms=iatms+1
706#endif
707#if defined DISTRIBUTE
708# if defined COLLECT_ALLGATHER
709!
710 IF (Master) WRITE (stdout,20) 'COLLECT_ALLGATHER', &
711 & 'Using mpi_allgather in mp_collect routine'
712 is=LEN_TRIM(Coptions)+1
713 Coptions(is:is+19)=' COLLECT_ALLGATHER,'
714# elif defined COLLECT_ALLREDUCE
715!
716 IF (Master) WRITE (stdout,20) 'COLLECT_ALLREDUCE', &
717 & 'Using mpi_allreduce in mp_collect routine'
718 is=LEN_TRIM(Coptions)+1
719 Coptions(is:is+19)=' COLLECT_ALLGATHER,'
720# else
721!
722 IF (Master) WRITE (stdout,20) '!COLLECT_ALL...', &
723 & 'Using mpi_isend/mpi_recv in mp_collect routine'
724 is=LEN_TRIM(Coptions)+1
725 Coptions(is:is+17)=' !COLLECT_ALL...,'
726# endif
727#endif
728#ifdef CORRELATION
729!
730 IF (Master) WRITE (stdout,20) 'CORRELATION', &
731 & 'Background-error Correlation Model'
732 is=LEN_TRIM(Coptions)+1
733 Coptions(is:is+13)=' CORRELATION,'
734 idriver=idriver+1
735#endif
736#ifdef DATA_COUPLING
737!
738 IF (Master) WRITE (stdout,20) 'DATA_COUPLING', &
739 & 'DATA model included in coupling'
740 is=LEN_TRIM(Coptions)+1
741 Coptions(is:is+15)=' DATA_COUPLING,'
742#endif
743#if defined DATALESS_LOOPS && defined W4DVAR
744!
745 IF (Master) WRITE (stdout,20) 'DATALESS_LOOPS', &
746 & 'Testing convergence of RPM Picard iterations'
747 is=LEN_TRIM(Coptions)+1
748 Coptions(is:is+16)=' DATALESS_LOOPS,'
749#endif
750#if defined GLS_MIXING && defined CHARNOK
751!
752 IF (Master) WRITE (stdout,20) 'CHARNOK', &
753 & 'Charnok surface roughness from wind stress'
754 is=LEN_TRIM(Coptions)+1
755 Coptions(is:is+9)=' CHARNOK,'
756#endif
757#if defined PROPAGATOR && defined CHECKPOINTING
758!
759 IF (Master) WRITE (stdout,20) 'CHECKPOINTING', &
760 & 'Processing checkpointing NetCDF for GST analysis'
761 is=LEN_TRIM(Coptions)+1
762 Coptions(is:is+15)=' CHECKPOINTING,'
763#endif
764#if defined GLS_MIXING && defined CRAIG_BANNER
765!
766 IF (Master) WRITE (stdout,20) 'CRAIG_BANNER', &
767 & 'Craig and Banner wave breaking surface flux'
768 is=LEN_TRIM(Coptions)+1
769 Coptions(is:is+14)=' CRAIG_BANNER,'
770#endif
771#if defined COARE_OOST
772!
773 IF (Master) WRITE (stdout,20) 'COARE_OOST', &
774 & 'Oost et al (2002) relation for ZoW in bulk fluxes'
775 is=LEN_TRIM(Coptions)+1
776 Coptions(is:is+12)=' COARE_OOST,'
777#endif
778#if defined COARE_TAYLOR_YELLAND
779!
780 IF (Master) WRITE (stdout,20) 'COARE_TAYLOR_YELLAND', &
781 & 'Taylor and Yelland (2001) relation for ZoW in bulk fluxes'
782 is=LEN_TRIM(Coptions)+1
783 Coptions(is:is+22)=' COARE_TAYLOR_YELLAND,'
784#endif
785#if defined COOL_SKIN && defined BULK_FLUXES
786!
787 IF (Master) WRITE (stdout,20) 'COOL_SKIN', &
788 & 'Surface cool skin correction'
789 is=LEN_TRIM(Coptions)+1
790 Coptions(is:is+11)=' COOL_SKIN,'
791#endif
792#if defined COSINE2 && defined SOLVE3D
793!
794 IF (Master) WRITE (stdout,20) 'COSINE2', &
795 & 'Cosine-squared shape time-averaging barotropic filter'
796 is=LEN_TRIM(Coptions)+1
797 Coptions(is:is+9)=' COSINE2,'
798#endif
799#ifdef CURVGRID
800!
801 IF (Master) WRITE (stdout,20) 'CURVGRID', &
802 & 'Orthogonal curvilinear grid'
803 is=LEN_TRIM(Coptions)+1
804 Coptions(is:is+10)=' CURVGRID,'
805#endif
806#if defined DAILY_SHORTWAVE && defined RED_TIDE
807!
808 IF (Master) WRITE (stdout,20) 'DAILY_SHORTWAVE', &
809 & 'Daily-averaged surface solar shortwave radiation flux'
810 is=LEN_TRIM(Coptions)+1
811 Coptions(is:is+17)=' DAILY_SHORTWAVE,'
812#endif
813#ifdef DEBUGGING
814!
815 IF (Master) WRITE (stdout,20) 'DEBUGGING', &
816 & 'Internal debugging switch activated'
817 is=LEN_TRIM(Coptions)+1
818 Coptions(is:is+11)=' DEBUGGING,'
819#endif
820#ifdef DEEPWATER_WAVES
821!
822 IF (Master) WRITE (stdout,20) 'DEEPWATER_WAVES', &
823 & 'Deep water waves approx in bulk fluxes'
824 is=LEN_TRIM(Coptions)+1
825 Coptions(is:is+17)=' DEEPWATER_WAVES,'
826#endif
827#if defined DEFLATE && defined HDF5
828!
829 IF (Master) WRITE (stdout,20) 'DEFLATE', &
830 & 'Setting compression in output NetCDF-4/HDF5 files'
831 is=LEN_TRIM(Coptions)+1
832 Coptions(is:is+9)=' DEFLATE,'
833#endif
834#if defined DENITRIFICATION && defined BIO_FENNEL
835!
836 IF (Master) WRITE (stdout,20) 'DENITRIFICATION', &
837 & 'Add denitrification processes'
838 is=LEN_TRIM(Coptions)+1
839 Coptions(is:is+17)=' DENITRIFICATION,'
840#endif
841#if defined DIAGNOSTICS_BIO && defined BIO_FENNEL
842!
843 IF (Master) WRITE (stdout,20) 'DIAGNOSTICS_BIO', &
844 & 'Computing and writing biological diagnostic terms'
845 is=LEN_TRIM(Coptions)+1
846 Coptions(is:is+17)=' DIAGNOSTICS_BIO,'
847#endif
848#ifdef DIAGNOSTICS_TS
849!
850 IF (Master) WRITE (stdout,20) 'DIAGNOSTICS_TS', &
851 & 'Computing and writing tracer diagnostic terms'
852 is=LEN_TRIM(Coptions)+1
853 Coptions(is:is+16)=' DIAGNOSTICS_TS,'
854#endif
855#ifdef DIAGNOSTICS_UV
856!
857 IF (Master) WRITE (stdout,20) 'DIAGNOSTICS_UV', &
858 & 'Computing and writing momentum diagnostic terms'
859 is=LEN_TRIM(Coptions)+1
860 Coptions(is:is+16)=' DIAGNOSTICS_UV,'
861#endif
862#if defined DIFF_3DCOEF
863!
864 IF (Master) WRITE (stdout,20) 'DIFF_3DCOEF', &
865 & 'Horizontal, time-dependent 3D diffusion coefficient'
866 is=LEN_TRIM(Coptions)+1
867 Coptions(is:is+13)=' DIFF_3DCOEF,'
868#endif
869#if defined TS_DIF2 || defined TS_DIF4
870# ifdef DIFF_GRID
871!
872 IF (Master) WRITE (stdout,20) 'DIFF_GRID', &
873 & 'Horizontal diffusion coefficient scaled by grid size'
874 is=LEN_TRIM(Coptions)+1
875 Coptions(is:is+11)=' DIFF_GRID,'
876# endif
877#endif
878#ifdef DIURNAL_SRFLUX
879!
880 IF (Master) WRITE (stdout,20) 'DIURNAL_SRFLUX', &
881 & 'Modulate shortwave radiation by the local diurnal cycle'
882 is=LEN_TRIM(Coptions)+1
883 Coptions(is:is+16)=' DIURNAL_SRFLUX,'
884#endif
885#ifdef DJ_GRADPS
886!
887 IF (Master) WRITE (stdout,20) 'DJ_GRADPS', &
888 & 'Parabolic Splines density Jacobian (Shchepetkin, 2002)'
889 is=LEN_TRIM(Coptions)+1
890 Coptions(is:is+11)=' DJ_GRADPS,'
891#endif
892#ifdef DOUBLE_PRECISION
893!
894 IF (Master) WRITE (stdout,20) 'DOUBLE_PRECISION', &
895 & 'Double precision arithmetic numerical kernel.'
896 is=LEN_TRIM(Coptions)+1
897 Coptions(is:is+18)=' DOUBLE_PRECISION,'
898#endif
899#ifdef ECOSIM
900!
901 IF (Master) WRITE (stdout,20) 'ECOSIM', &
902 & 'Bio-Optical EcoSim model'
903 is=LEN_TRIM(Coptions)+1
904 Coptions(is:is+8)=' ECOSIM,'
905 ibiology=ibiology+1
906#endif
907#if defined EMINUSP && defined BULK_FLUXES
908!
909 IF (Master) WRITE (stdout,20) 'EMINUSP', &
910 & 'Compute Salt Flux using E-P'
911 is=LEN_TRIM(Coptions)+1
912 Coptions(is:is+9)=' EMINUSP,'
913#endif
914#if defined ESMF_LIB && defined MODEL_COUPLING
915!
916 IF (Master) WRITE (stdout,20) 'ESMF_LIB', &
917 & 'Using Earth System Modeling Framework library'
918 is=LEN_TRIM(Coptions)+1
919 Coptions(is:is+10)=' ESMF_LIB,'
920#endif
921#ifdef ENKF_RESTART
922!
923 IF (Master) WRITE (stdout,20) 'ENKF_RESTART', &
924 & 'Writting fields for offline Ensemble Kalman Filter'
925 is=LEN_TRIM(Coptions)+1
926 Coptions(is:is+14)=' ENKF_RESTART,'
927#endif
928#ifdef ENSEMBLE
929!
930 IF (Master) WRITE (stdout,20) 'ENSEMBLE', &
931 & 'Ensemble Forecasting Propagator'
932 is=LEN_TRIM(Coptions)+1
933 Coptions(is:is+10)=' ENSEMBLE,'
934#endif
935#if defined EVOLVED_LCZ && defined FOUR_DVAR
936!
937 IF (Master) WRITE (stdout,20) 'EVOLVED_LCZ', &
938 & 'Compute 4D-Var evolved Hessian singular vectors'
939 is=LEN_TRIM(Coptions)+1
940 Coptions(is:is+13)=' EVOLVED_LCZ,'
941#endif
942# if defined EXCLUDE_SPONGE && defined MODEL_COUPLING && \
943 (defined DATA_COUPLING && !defined ANA_SPONGE)
944!
945 IF (Master) WRITE (stdout,20) 'EXCLUDE_SPONGE', &
946 & 'Exclude sponge points in export fields during coupling'
947 is=LEN_TRIM(Coptions)+1
948 Coptions(is:is+16)=' EXCLUDE_SPONGE,'
949#endif
950#ifdef FLOATS
951!
952 IF (Master) WRITE (stdout,20) 'FLOATS', &
953 & 'Simulated Lagrangian drifters'
954 is=LEN_TRIM(Coptions)+1
955 Coptions(is:is+8)=' FLOATS,'
956#endif
957#if defined FLOAT_BIOLOGY && defined FLOATS
958!
959 IF (Master) WRITE (stdout,20) 'FLOAT_BIOLOGY', &
960 & 'Biological behavior on Lagrangian drifters'
961 is=LEN_TRIM(Coptions)+1
962 Coptions(is:is+15)=' FLOAT_BIOLOGY,'
963#endif
964#if defined FLOAT_OYSTER && defined FLOATS
965!
966 IF (Master) WRITE (stdout,20) 'FLOAT_OYSTER', &
967 & 'Oyster model behavior on Lagrangian drifters'
968 is=LEN_TRIM(Coptions)+1
969 Coptions(is:is+14)=' FLOAT_OYSTER,'
970#endif
971#if defined FLOAT_STICKY && defined FLOATS && defined SOLVE3D
972!
973 IF (Master) WRITE (stdout,20) 'FLOAT_STICKY', &
974 & 'Reflect (stick) floats that hit the surface (bottom)'
975 is=LEN_TRIM(Coptions)+1
976 Coptions(is:is+14)=' FLOAT_STICKY,'
977#endif
978#if defined FLOATS && defined FLOAT_VWALK && defined SOLVE3D
979!
980 IF (Master) WRITE (stdout,20) 'FLOAT_VWALK', &
981 & 'Lagrangian drifters with vertical diffusion, random walk'
982 is=LEN_TRIM(Coptions)+1
983 Coptions(is:is+13)=' FLOAT_VWALK,'
984#endif
985#ifdef FORCING_SV
986!
987 IF (Master) WRITE (stdout,20) 'FORCING_SV', &
988 & 'Forcing Singular Vectors Propagator'
989 is=LEN_TRIM(Coptions)+1
990 Coptions(is:is+12)=' FORCING_SV,'
991 idriver=idriver+1
992#endif
993#if defined FORWARD_MIXING && defined SOLVE3D
994!
995 IF (Master) WRITE (stdout,20) 'FORWARD_MIXING', &
996 & 'Read in Forward vertical mixing for Tangent/Adjoint'
997 is=LEN_TRIM(Coptions)+1
998 Coptions(is:is+16)=' FORWARD_MIXING,'
999#endif
1000#ifdef FORWARD_READ
1001!
1002 IF (Master) WRITE (stdout,20) 'FORWARD_READ', &
1003 & 'Read in Forward solution for Tangent/Adjoint'
1004 is=LEN_TRIM(Coptions)+1
1005 Coptions(is:is+14)=' FORWARD_READ,'
1006#endif
1007#ifdef FORWARD_RHS
1008!
1009 IF (Master) WRITE (stdout,20) 'FORWARD_RHS', &
1010 & 'Process Forward RHS terms for Tangent/Adjoint'
1011 is=LEN_TRIM(Coptions)+1
1012 Coptions(is:is+13)=' FORWARD_RHS,'
1013#endif
1014#ifdef FORWARD_WRITE
1015!
1016 IF (Master) WRITE (stdout,20) 'FORWARD_WRITE', &
1017 & 'Write out Forward solution for Tangent/Adjoint'
1018 is=LEN_TRIM(Coptions)+1
1019 Coptions(is:is+15)=' FORWARD_WRITE,'
1020#endif
1021#if defined FRC_COUPLING && defined MODEL_COUPLING
1022!
1023 IF (Master) WRITE (stdout,20) 'FRC_COUPLING', &
1024 & 'Atmospheric forcing fields are from ESM coupling'
1025 is=LEN_TRIM(Coptions)+1
1026 Coptions(is:is+14)=' FRC_COUPLING,'
1027#endif
1028#ifdef FSOBC_REDUCED
1029!
1030 IF (Master) WRITE (stdout,20) 'FSOBC_REDUCED', &
1031 & 'Using free-surface data in reduced physics conditions'
1032 is=LEN_TRIM(Coptions)+1
1033 Coptions(is:is+15)=' FSOBC_REDUCED,'
1034#endif
1035#ifdef FT_EIGENMODES
1036!
1037 IF (Master) WRITE (stdout,20) 'FT_EIGENMODES', &
1038 & 'Finite Time Eigenmodes: Normal Modes'
1039 is=LEN_TRIM(Coptions)+1
1040 Coptions(is:is+15)=' FT_EIGENMODES,'
1041 idriver=idriver+1
1042#endif
1043#if defined FOUR_DVAR || defined PROPAGATOR || defined VERIFICATION
1044# ifdef FULL_GRID
1045!
1046 IF (Master) WRITE (stdout,20) 'FULL_GRID', &
1047# if (defined FOUR_DVAR || defined VERIFICATION)
1048 & 'Considering observations at interior and boundary points'
1049# elif defined PROPAGATOR
1050 & 'State vector includes interior and boundary points'
1051# endif
1052 is=LEN_TRIM(Coptions)+1
1053 Coptions(is:is+11)=' FULL_GRID,'
1054# else
1055!
1056 IF (Master) WRITE (stdout,20) '!FULL_GRID', &
1057# if (defined FOUR_DVAR || defined VERIFICATION)
1058 & 'Considering observations at interior points only'
1059# elif defined PROPAGATOR
1060 & 'State vector includes interior points only'
1061# endif
1062 is=LEN_TRIM(Coptions)+1
1063 Coptions(is:is+12)=' !FULL_GRID,'
1064# endif
1065#endif
1066#if defined GEOPOTENTIAL_HCONV && defined FOUR_DVAR && defined SOLVE3D
1067!
1068 IF (Master) WRITE (stdout,20) 'GEOPOTENTIAL_HCONV', &
1069 & 'Horizontal convolutions along geopetential surfaces'
1070 is=LEN_TRIM(Coptions)+1
1071 Coptions(is:is+20)=' GEOPOTENTIAL_HCONV,'
1072#endif
1073#ifdef GLS_MIXING
1074!
1075 IF (Master) WRITE (stdout,20) 'GLS_MIXING', &
1076 & 'Generic Length-Scale turbulence closure'
1077 is=LEN_TRIM(Coptions)+1
1078 Coptions(is:is+12)=' GLS_MIXING,'
1079 ivmix=ivmix+1
1080#endif
1081#ifdef HDF5
1082!
1083 IF (Master) WRITE (stdout,20) 'HDF5', &
1084 & 'Creating NetCDF-4/HDF5 format files'
1085 is=LEN_TRIM(Coptions)+1
1086 Coptions(is:is+6)=' HDF5,'
1087#endif
1088#ifdef HESSIAN_FSV
1089!
1090 IF (Master) WRITE (stdout,20) 'HESSIAN_FSV', &
1091 & 'Hessian (4D-Var) Forcing Singular Vectors Propagator'
1092 is=LEN_TRIM(Coptions)+1
1093 Coptions(is:is+13)=' HESSIAN_FSV,'
1094#endif
1095#ifdef HESSIAN_SO
1096!
1097 IF (Master) WRITE (stdout,20) 'HESSIAN_SO', &
1098 & 'Hessian (4D-Var) Stochastic Optimals Propagator'
1099 is=LEN_TRIM(Coptions)+1
1100 Coptions(is:is+12)=' HESSIAN_SO,'
1101#endif
1102#ifdef HESSIAN_SV
1103!
1104 IF (Master) WRITE (stdout,20) 'HESSIAN_SV', &
1105 & 'Hessian (4D-Var) Singular Vectors Propagator'
1106 is=LEN_TRIM(Coptions)+1
1107 Coptions(is:is+12)=' HESSIAN_SV,'
1108#endif
1109#if defined HOLLING_GRAZING && defined NEMURO
1110!
1111 IF (Master) WRITE (stdout,20) 'HOLLING_GRAZING', &
1112 & 'Holling-type s-shaped grazing algorithm, Implicit'
1113 is=LEN_TRIM(Coptions)+1
1114 Coptions(is:is+17)=' HOLLING_GRAZING,'
1115#endif
1116#ifdef HYPOXIA_SRM
1117!
1118 IF (Master) WRITE (stdout,20) 'HYPOXIA_SRM', &
1119 & 'Hypoxia Simple Respiration Model'
1120 is=LEN_TRIM(Coptions)+1
1121 Coptions(is:is+13)=' HYPOXIA_SRM,'
1122 ibiology=ibiology+1
1123#endif
1124#ifdef ICESHELF
1125!
1126 IF (Master) WRITE (stdout,20) 'ICESHELF', &
1127 & 'Include Ice Shelf Cavities'
1128 is=LEN_TRIM(Coptions)+1
1129 Coptions(is:is+10)=' ICESHELF,'
1130#endif
1131#if defined IMPACT_INNER && defined OBS_IMPACT && \
1132 (defined W4DVAR_SENSITIVITY || defined W4DPSAS_SENSITIVITY || \
1133 defined IS4DVAR_SENSITIVITY)
1134!
1135 IF (Master) WRITE (stdout,20) 'IMPACT_INNER', &
1136 & 'Writing observations impacts for each inner loop'
1137 is=LEN_TRIM(Coptions)+1
1138 Coptions(is:is+14)=' IMPACT_INNER,'
1139#endif
1140#ifdef IMPLICIT_NUDGING
1141!
1142 IF (Master) WRITE (stdout,20) 'IMPLICIT_NUDGING', &
1143 & 'Implicit nudging term in momentum radiation conditions'
1144 is=LEN_TRIM(Coptions)+1
1145 Coptions(is:is+18)=' IMPLICIT_NUDGING,'
1146#endif
1147#if defined IMPLICIT_VCONV && defined FOUR_DVAR && defined VCONVOLUTION
1148!
1149 IF (Master) WRITE (stdout,20) 'IMPLICIT_VCONV', &
1150 & 'Implicit Vertical Convolution Algorithm'
1151 is=LEN_TRIM(Coptions)+1
1152 Coptions(is:is+16)=' IMPLICIT_VCONV,'
1153#endif
1154#if defined LIMIT_BSTRESS && defined SOLVE3D && !defined BBL_MODEL
1155!
1156 IF (Master) WRITE (stdout,20) 'LIMIT_BSTRESS', &
1157 & 'Limit bottom stress to maintain bottom velocity direction'
1158 is=LEN_TRIM(Coptions)+1
1159 Coptions(is:is+15)=' LIMIT_BSTRESS,'
1160#endif
1161#if defined LIMIT_STFLX_COOLING && defined SOLVE3D
1162!
1163 IF (Master) WRITE (stdout,20) 'LIMIT_STFLX_COOLING', &
1164 & 'Suppress further cooling if SST is at freezing point'
1165 is=LEN_TRIM(Coptions)+1
1166 Coptions(is:is+21)=' LIMIT_STFLX_COOLING,'
1167#endif
1168#if defined NPZD_IRON && defined IRON_LIMIT
1169!
1170 IF (Master) WRITE (stdout,20) 'IRON_LIMIT', &
1171 & 'Include dissolved iron limitation on phytoplankton growth'
1172 is=LEN_TRIM(Coptions)+1
1173 Coptions(is:is+12)=' IRON_LIMIT,'
1174#endif
1175#if defined NPZD_IRON && defined IRON_LIMIT && defined IRON_RELAX
1176!
1177 IF (Master) WRITE (stdout,20) 'IRON_RELAX', &
1178 & 'Nudge dissolved iron over the shelf, h <= FeHmin'
1179 is=LEN_TRIM(Coptions)+1
1180 Coptions(is:is+12)=' IRON_RELAX,'
1181#endif
1182#ifdef IMPULSE
1183!
1184 IF (Master) WRITE (stdout,20) 'IMPULSE', &
1185 & 'Processing Adjoint Impulse forcing'
1186 is=LEN_TRIM(Coptions)+1
1187 Coptions(is:is+9)=' IMPULSE,'
1188#endif
1189#ifdef INNER_PRODUCT
1190!
1191 IF (Master) WRITE (stdout,20) 'INNER_PRODUCT', &
1192 & 'Tangent/Adjoint State Matrices Inner Product Test'
1193 is=LEN_TRIM(Coptions)+1
1194 Coptions(is:is+15)=' INNER_PRODUCT,'
1195 idriver=idriver+1
1196#endif
1197#ifdef IS4DVAR
1198!
1199 IF (Master) WRITE (stdout,20) 'IS4DVAR', &
1200 & 'Incremental strong constraint 4D-Var data assimilation'
1201 is=LEN_TRIM(Coptions)+1
1202 Coptions(is:is+9)=' IS4DVAR,'
1203 idriver=idriver+1
1204#endif
1205#ifdef IS4DVAR_SENSITIVITY
1206!
1207 IF (Master) WRITE (stdout,20) 'IS4DVAR_SENSITIVITY', &
1208 & 'I4D-Var Observations Sensitivity Analysis'
1209 is=LEN_TRIM(Coptions)+1
1210 Coptions(is:is+21)=' IS4DVAR_SENSITIVITY,'
1211 idriver=idriver+1
1212#endif
1213#if defined INLINE_2DIO && defined DISTRIBUTE
1214!
1215 IF (Master) WRITE (stdout,20) 'INLINE_2DIO', &
1216 & 'Processing 3D IO level by level to reduce memory needs'
1217 is=LEN_TRIM(Coptions)+1
1218 Coptions(is:is+13)=' INLINE_2DIO,'
1219#endif
1220#if defined IVLEV_EXPLICIT && defined NEMURO
1221!
1222 IF (Master) WRITE (stdout,20) 'IVLEV_EXPLICIT', &
1223 & 'Ivlev Grazing algorithm, Explicit'
1224 is=LEN_TRIM(Coptions)+1
1225 Coptions(is:is+16)=' IVLEV_EXPLICIT,'
1226#endif
1227#if defined KANTHA_CLAYSON && (defined GLS_MIXING || defined MY25_MIXING)
1228!
1229 IF (Master) WRITE (stdout,20) 'KANTHA_CLAYSON', &
1230 & 'Kantha and Clayson stability function formulation'
1231 is=LEN_TRIM(Coptions)+1
1232 Coptions(is:is+16)=' KANTHA_CLAYSON,'
1233#endif
1234#if defined LCZ_FINAL && defined FOUR_DVAR
1235!
1236 IF (Master) WRITE (stdout,20) 'LCZ_FINAL', &
1237 & 'Compute 4D-Var Hessian singular vectors'
1238 is=LEN_TRIM(Coptions)+1
1239 Coptions(is:is+11)=' LCZ_FINAL,'
1240#endif
1241#if defined LIMIT_VDIFF && \
1242 (defined GLS_MIXING || defined LMD_MIXING || defined MY25_MIXING)
1243!
1244 IF (Master) WRITE (stdout,20) 'LIMIT_VDIFF', &
1245 & 'Impose an upper limit on vertical diffusion coefficient'
1246 is=LEN_TRIM(Coptions)+1
1247 Coptions(is:is+13)=' LIMIT_VDIFF,'
1248#endif
1249#if defined LIMIT_VVISC && \
1250 (defined GLS_MIXING || defined LMD_MIXING || defined MY25_MIXING)
1251!
1252 IF (Master) WRITE (stdout,20) 'LIMIT_VVISC', &
1253 & 'Impose an upper limit on vertical viscosity coefficient'
1254 is=LEN_TRIM(Coptions)+1
1255 Coptions(is:is+13)=' LIMIT_VVISC,'
1256#endif
1257#ifdef LMD_BKPP
1258!
1259 IF (Master) WRITE (stdout,20) 'LMD_BKPP', &
1260 & 'KPP bottom boundary layer mixing'
1261 is=LEN_TRIM(Coptions)+1
1262 Coptions(is:is+10)=' LMD_BKPP,'
1263#endif
1264#ifdef LMD_CONVEC
1265!
1266 IF (Master) WRITE (stdout,20) 'LMD_CONVEC', &
1267 & 'LMD convective mixing due to shear instability'
1268 is=LEN_TRIM(Coptions)+1
1269 Coptions(is:is+12)=' LMD_CONVEC,'
1270#endif
1271#ifdef LMD_DDMIX
1272!
1273 IF (Master) WRITE (stdout,20) 'LMD_DDMIX', &
1274 & 'LMD double-diffusive mixing'
1275 is=LEN_TRIM(Coptions)+1
1276 Coptions(is:is+11)=' LMD_DDMIX,'
1277#endif
1278#ifdef LMD_MIXING
1279!
1280 IF (Master) WRITE (stdout,20) 'LMD_MIXING', &
1281 & 'Large/McWilliams/Doney interior mixing'
1282 is=LEN_TRIM(Coptions)+1
1283 Coptions(is:is+12)=' LMD_MIXING,'
1284 ivmix=ivmix+1
1285#endif
1286#ifdef LMD_NONLOCAL
1287!
1288 IF (Master) WRITE (stdout,20) 'LMD_NONLOCAL', &
1289 & 'LMD convective nonlocal transport'
1290 is=LEN_TRIM(Coptions)+1
1291 Coptions(is:is+14)=' LMD_NONLOCAL,'
1292#endif
1293#ifdef LMD_RIMIX
1294!
1295 IF (Master) WRITE (stdout,20) 'LMD_RIMIX', &
1296 & 'LMD diffusivity due to shear instability'
1297 is=LEN_TRIM(Coptions)+1
1298 Coptions(is:is+11)=' LMD_RIMIX,'
1299#endif
1300#ifdef LMD_SHAPIRO
1301!
1302 IF (Master) WRITE (stdout,20) 'LMD_SHAPIRO', &
1303 & 'Shapiro filtering boundary layer depth'
1304 is=LEN_TRIM(Coptions)+1
1305 Coptions(is:is+13)=' LMD_SHAPIRO,'
1306#endif
1307#ifdef LMD_SKPP
1308!
1309 IF (Master) WRITE (stdout,20) 'LMD_SKPP', &
1310 & 'KPP surface boundary layer mixing'
1311 is=LEN_TRIM(Coptions)+1
1312 Coptions(is:is+10)=' LMD_SKPP,'
1313#endif
1314#if defined LONGWAVE && defined BULK_FLUXES
1315!
1316 IF (Master) WRITE (stdout,20) 'LONGWAVE', &
1317 & 'Compute net longwave radiation internally'
1318 is=LEN_TRIM(Coptions)+1
1319 Coptions(is:is+10)=' LONGWAVE,'
1320#endif
1321#if defined LONGWAVE_OUT && defined BULK_FLUXES
1322!
1323 IF (Master) WRITE (stdout,20) 'LONGWAVE_OUT', &
1324 & 'Compute outgoing longwave radiation internally'
1325 is=LEN_TRIM(Coptions)+1
1326 Coptions(is:is+14)=' LONGWAVE_OUT,'
1327#endif
1328#ifdef MASKING
1329!
1330 IF (Master) WRITE (stdout,20) 'MASKING', &
1331 & 'Land/Sea masking'
1332 is=LEN_TRIM(Coptions)+1
1333 Coptions(is:is+9)=' MASKING,'
1334#endif
1335#ifdef MB_BBL
1336!
1337 IF (Master) WRITE (stdout,20) 'MB_BBL', &
1338 & 'Blaas Bottom Boundary Layer'
1339 is=LEN_TRIM(Coptions)+1
1340 Coptions(is:is+8)=' MB_BBL,'
1341 ibbl=ibbl+1
1342# ifdef MB_CALC_UB
1343!
1344 IF (Master) WRITE (stdout,20) 'MB_CALC_UB', &
1345 & 'Internal computation of bottom orbital velocity'
1346 is=LEN_TRIM(Coptions)+1
1347 Coptions(is:is+12)=' MB_CALC_UB,'
1348# endif
1349# ifdef MB_CALC_ZNOT
1350!
1351 IF (Master) WRITE (stdout,20) 'MB_CALC_ZNOT', &
1352 & 'Internal computation of bottom roughness'
1353 is=LEN_TRIM(Coptions)+1
1354 Coptions(is:is+14)=' MB_CALC_ZNOT,'
1355# endif
1356# ifdef MB_Z0BIO
1357!
1358 IF (Master) WRITE (stdout,20) 'MB_Z0BIO', &
1359 & 'Biogenic bedform roughness ripple height and length'
1360 is=LEN_TRIM(Coptions)+1
1361 Coptions(is:is+10)=' MB_Z0BIO,'
1362# endif
1363# ifdef MB_Z0BL
1364!
1365 IF (Master) WRITE (stdout,20) 'MB_Z0BL', &
1366 & 'Bedload roughness for ripples'
1367 is=LEN_TRIM(Coptions)+1
1368 Coptions(is:is+9)=' MB_Z0BL,'
1369# endif
1370# ifdef MB_Z0RIP
1371!
1372 IF (Master) WRITE (stdout,20) 'MB_Z0RIP', &
1373 & 'Bedform roughness ripple height and length'
1374 is=LEN_TRIM(Coptions)+1
1375 Coptions(is:is+10)=' MB_Z0RIP,'
1376# endif
1377#endif
1378#if defined MCT_LIB && defined MODEL_COUPLING
1379!
1380 IF (Master) WRITE (stdout,20) 'MCT_LIB', &
1381 & 'Using Model Coupling Toolkit library'
1382 is=LEN_TRIM(Coptions)+1
1383 Coptions(is:is+9)=' MCT_LIB,'
1384#endif
1385#if defined MINRES && defined FOUR_DVAR
1386!
1387 IF (Master) WRITE (stdout,20) 'MINRES', &
1388 & 'Minimal Residual Method for 4D-Var minimization'
1389 is=LEN_TRIM(Coptions)+1
1390 Coptions(is:is+8)=' MINRES,'
1391#endif
1392#if (defined TS_DIF2 || defined TS_DIF4) && defined SOLVE3D
1393# ifdef MIX_GEO_TS
1394!
1395 IF (Master) WRITE (stdout,20) 'MIX_GEO_TS', &
1396 & 'Mixing of tracers along geopotential surfaces'
1397 is=LEN_TRIM(Coptions)+1
1398 Coptions(is:is+12)=' MIX_GEO_TS,'
1399# endif
1400# ifdef MIX_ISO_TS
1401!
1402 IF (Master) WRITE (stdout,20) 'MIX_ISO_TS', &
1403 & 'Mixing of tracers along isopycnal surfaces'
1404 is=LEN_TRIM(Coptions)+1
1405 Coptions(is:is+12)=' MIX_ISO_TS,'
1406# endif
1407# ifdef MIX_S_TS
1408!
1409 IF (Master) WRITE (stdout,20) 'MIX_S_TS', &
1410 & 'Mixing of tracers along constant S-surfaces'
1411 is=LEN_TRIM(Coptions)+1
1412 Coptions(is:is+10)=' MIX_S_TS,'
1413# endif
1414#endif
1415#if (defined UV_VIS2 || defined UV_VIS4) && defined SOLVE3D
1416# ifdef MIX_GEO_UV
1417!
1418 IF (Master) WRITE (stdout,20) 'MIX_GEO_UV', &
1419 & 'Mixing of momentum along geopotential surfaces'
1420 is=LEN_TRIM(Coptions)+1
1421 Coptions(is:is+11)=' MIX_GEO_UV,'
1422# endif
1423# ifdef MIX_S_UV
1424!
1425 IF (Master) WRITE (stdout,20) 'MIX_S_UV', &
1426 & 'Mixing of momentum along constant S-surfaces'
1427 is=LEN_TRIM(Coptions)+1
1428 Coptions(is:is+10)=' MIX_S_UV,'
1429# endif
1430#endif
1431#ifdef MPI
1432!
1433 IF (Master) WRITE (stdout,20) 'MPI', &
1434 & 'MPI distributed-memory configuration'
1435 is=LEN_TRIM(Coptions)+1
1436 Coptions(is:is+4)=' MPI,'
1437#endif
1438#if defined MULTIPLE_TLM && defined TANGENT
1439!
1440 IF (Master) WRITE (stdout,20) 'MULTIPLE_TLM', &
1441 & 'Create multiple TLM history files'
1442 is=LEN_TRIM(Coptions)+1
1443 Coptions(is:is+14)=' MULTIPLE_TLM,'
1444#endif
1445#ifdef MY25_MIXING
1446!
1447 IF (Master) WRITE (stdout,20) 'MY25_MIXING', &
1448 & 'Mellor/Yamada Level-2.5 mixing closure'
1449 is=LEN_TRIM(Coptions)+1
1450 Coptions(is:is+13)=' MY25_MIXING,'
1451 ivmix=ivmix+1
1452#endif
1453#ifdef NEARSHORE_MELLOR05
1454!
1455 IF (Master) WRITE (stdout,20) 'NEARSHORE_MELLOR05', &
1456 & 'Nearshore Radiation Stress Terms (Mellor 2005)'
1457 is=LEN_TRIM(Coptions)+1
1458 Coptions(is:is+20)=' NEARSHORE_MELLOR05,'
1459 nearshore=nearshore+1
1460#endif
1461#ifdef NEARSHORE_MELLOR08
1462!
1463 IF (Master) WRITE (stdout,20) 'NEARSHORE_MELLOR08', &
1464 & 'Nearshore Radiation Stress Terms (Mellor 2008)'
1465 is=LEN_TRIM(Coptions)+1
1466 Coptions(is:is+20)=' NEARSHORE_MELLOR08,'
1467 nearshore=nearshore+1
1468#endif
1469#ifdef NEMURO
1470!
1471 IF (Master) WRITE (stdout,20) 'NEMURO', &
1472 & 'Nemuro Lower Trophic Level Ecosystem Model'
1473 is=LEN_TRIM(Coptions)+1
1474 Coptions(is:is+8)=' NEMURO,'
1475 ibiology=ibiology+1
1476#endif
1477#ifdef NESTING
1478!
1479 IF (Master) WRITE (stdout,20) 'NESTING', &
1480 & 'Nesting grids: Composite and Refinement'
1481 is=LEN_TRIM(Coptions)+1
1482 Coptions(is:is+9)=' NESTING,'
1483# ifdef NESTING_DEBUG
1484!
1485 IF (Master) WRITE (stdout,20) 'NESTING_DEBUG', &
1486 & 'Checking mass fluxes conservation in refinement.'
1487 is=LEN_TRIM(Coptions)+1
1488 Coptions(is:is+15)=' NESTING_DEBUG,'
1489# endif
1490#endif
1491#if defined NL_BULK_FLUXES
1492!
1493 IF (Master) WRITE (stdout,20) 'NL_BULK_FLUXES', &
1494 & 'Using bulk fluxes computed by nonlinear model'
1495 is=LEN_TRIM(Coptions)+1
1496 Coptions(is:is+16)=' NL_BULK_FLUXES,'
1497#endif
1498#if defined NLM_OUTER && defined WEAK_CONSTRAINT
1499!
1500 IF (Master) WRITE (stdout,20) 'NLM_OUTER', &
1501 & 'Using the Nonlinear model as Basic State in Outer Loop'
1502 is=LEN_TRIM(Coptions)+1
1503 Coptions(is:is+11)=' NLM_OUTER,'
1504#endif
1505#ifdef NONLINEAR
1506!
1507 IF (Master) WRITE (stdout,20) 'NONLINEAR', &
1508 & 'Nonlinear Model'
1509 is=LEN_TRIM(Coptions)+1
1510 Coptions(is:is+10)=' NONLINEAR,'
1511#endif
1512#ifdef SOLVE3D
1513# if defined NONLIN_EOS
1514!
1515 IF (Master) WRITE (stdout,20) 'NONLIN_EOS', &
1516 & 'Nonlinear Equation of State for seawater'
1517 is=LEN_TRIM(Coptions)+1
1518 Coptions(is:is+12)=' NONLIN_EOS,'
1519# else
1520!
1521 IF (Master) WRITE (stdout,20) '!NONLIN_EOS', &
1522 & 'Linear Equation of State for seawater'
1523 is=LEN_TRIM(Coptions)+1
1524 Coptions(is:is+13)=' !NONLIN_EOS,'
1525# endif
1526#endif
1527#if defined NO_CORRECT_TRACER && defined NESTING && defined SOLVE3D
1528!
1529 IF (Master) WRITE (stdout,20) 'NO_CORRECT_TRACER', &
1530 & 'Avoid two-way correction of coaser grid boundary tracer'
1531 is=LEN_TRIM(Coptions)+1
1532 Coptions(is:is+19)=' NO_CORRECT_TRACER,'
1533#endif
1534#ifdef NO_LBC_ATT
1535!
1536 IF (Master) WRITE (stdout,20) 'NO_LBC_ATT', &
1537 & 'Not checking NetCDF global attribute NLM_LBC during restart'
1538 is=LEN_TRIM(Coptions)+1
1539 Coptions(is:is+12)=' NO_LBC_ATT,'
1540#endif
1541#if defined NO_READ_GHOST && defined DISTRIBUTE
1542!
1543 IF (Master) WRITE (stdout,20) 'NO_READ_GHOST', &
1544 & 'Not including ghost points during scattering read data'
1545 is=LEN_TRIM(Coptions)+1
1546 Coptions(is:is+15)=' NO_READ_GHOST,'
1547#endif
1548#ifdef NO_WRITE_GRID
1549!
1550 IF (Master) WRITE (stdout,20) 'NO_WRITE_GRID', &
1551 & 'Not Writing grid arrays into NetCDF ouput files'
1552 is=LEN_TRIM(Coptions)+1
1553 Coptions(is:is+15)=' NO_WRITE_GRID,'
1554#endif
1555#ifdef NPZD_FRANKS
1556!
1557 IF (Master) WRITE (stdout,20) 'NPZD_FRANKS', &
1558 & 'NPZD Biological Model, Franks et al. fomulation'
1559 is=LEN_TRIM(Coptions)+1
1560 Coptions(is:is+13)=' NPZD_FRANKS,'
1561 ibiology=ibiology+1
1562#endif
1563#ifdef NPZD_IRON
1564!
1565 IF (Master) WRITE (stdout,20) 'NPZD_IRON', &
1566 & 'NPZD Biological Model (Powell et al.) with iron limitation'
1567 is=LEN_TRIM(Coptions)+1
1568 Coptions(is:is+11)=' NPZD_IRON,'
1569 ibiology=ibiology+1
1570#endif
1571#ifdef NPZD_POWELL
1572!
1573 IF (Master) WRITE (stdout,20) 'NPZD_POWELL', &
1574 & 'NPZD Biological Model, Powell et al. fomulation'
1575 is=LEN_TRIM(Coptions)+1
1576 Coptions(is:is+13)=' NPZD_POWELL,'
1577 ibiology=ibiology+1
1578#endif
1579#if defined N2S2_HORAVG && (defined GLS_MIXING || defined MY25_MIXING)
1580!
1581 IF (Master) WRITE (stdout,20) 'N2S2_HORAVG', &
1582 & 'Horizontal smoothing of buoyancy and shear'
1583 is=LEN_TRIM(Coptions)+1
1584 Coptions(is:is+13)=' N2S2_HORAVG,'
1585#endif
1586#ifdef OBSERVATIONS
1587!
1588 IF (Master) WRITE (stdout,20) 'OBSERVATIONS', &
1589 & 'Processing 4DVar observations'
1590 is=LEN_TRIM(Coptions)+1
1591 Coptions(is:is+13)=' OBSERVATIONS,'
1592#endif
1593#ifdef OBS_IMPACT
1594!
1595 IF (Master) WRITE (stdout,20) 'OBS_IMPACT', &
1596 & 'Compute observation impact to the 4DVAR system'
1597 is=LEN_TRIM(Coptions)+1
1598 Coptions(is:is+12)=' OBS_IMPACT,'
1599#endif
1600#if defined OBS_IMPACT && defined OBS_IMPACT_SPLIT
1601!
1602 IF (Master) WRITE (stdout,20) 'OBS_IMPACT_SPLIT', &
1603 & 'Separate impact due to IC, surface forcing, and OBC'
1604 is=LEN_TRIM(Coptions)+1
1605 Coptions(is:is+18)=' OBS_IMPACT_SPLIT,'
1606#endif
1607#ifdef NESTING
1608# ifdef ONE_WAY
1609!
1610 IF (Master) WRITE (stdout,20) 'ONE_WAY', &
1611 & 'One-way nesting in refinement grids'
1612 is=LEN_TRIM(Coptions)+1
1613 Coptions(is:is+9)=' ONE_WAY,'
1614# else
1615!
1616 IF (Master) WRITE (stdout,20) '!ONE_WAY', &
1617 & 'Two-way nesting in refinement grids'
1618 is=LEN_TRIM(Coptions)+1
1619 Coptions(is:is+10)=' !ONE_WAY,'
1620# endif
1621#endif
1622#ifdef OUT_DOUBLE
1623!
1624 IF (Master) WRITE (stdout,20) 'OUT_DOUBLE', &
1625 & 'Double precision output fields in NetCDF files'
1626 is=LEN_TRIM(Coptions)+1
1627 Coptions(is:is+12)=' OUT_DOUBLE,'
1628#endif
1629#ifdef _OPENMP
1630!
1631 IF (Master) WRITE (stdout,20) '_OPENMP', &
1632 & 'OpenMP parallel shared-memory directives'
1633 is=LEN_TRIM(Coptions)+1
1634 Coptions(is:is+9)=' _OPENMP,'
1635#endif
1636#ifdef OPT_OBSERVATIONS
1637!
1638 IF (Master) WRITE (stdout,20) 'OPT_OBSERVATIONS', &
1639 & 'Optimal Observations Driver'
1640 is=LEN_TRIM(Coptions)+1
1641 Coptions(is:is+18)=' OPT_OBSERVATIONS,'
1642 idriver=idriver+1
1643#endif
1644#ifdef OPT_PERTURBATION
1645!
1646 IF (Master) WRITE (stdout,20) 'OPT_PERTURBATION', &
1647 & 'Optimal Perturbation Propagator'
1648 is=LEN_TRIM(Coptions)+1
1649 Coptions(is:is+18)=' OPT_PERTURBATION,'
1650 idriver=idriver+1
1651#endif
1652#if defined OXYGEN && defined BIO_FENNEL
1653# ifdef OCMIP_OXYGEN_SC
1654!
1655 IF (Master) WRITE (stdout,20) 'OCMIP_OXYGEN_SC', &
1656 & 'Schmidt number from Keeling et al. (1998)'
1657 is=LEN_TRIM(Coptions)+1
1658 Coptions(is:is+17)=' OCMIP_OXYGEN_SC,'
1659# else
1660!
1661 IF (Master) WRITE (stdout,20) '!OCMIP_OXYGEN_SC', &
1662 & 'Schmidt number from Wanninkhof (1992)'
1663 is=LEN_TRIM(Coptions)+1
1664 Coptions(is:is+18)=' !OCMIP_OXYGEN_SC,'
1665# endif
1666!
1667 IF (Master) WRITE (stdout,20) 'OXYGEN', &
1668 & 'Add oxygen dynamics'
1669 is=LEN_TRIM(Coptions)+1
1670 Coptions(is:is+8)=' OXYGEN,'
1671#elif !defined SURFACE_DO_SATURATION && defined HYPOXIA_SRM
1672# ifdef OCMIP_OXYGEN_SC
1673!
1674 IF (Master) WRITE (stdout,20) 'OCMIP_OXYGEN_SC', &
1675 & 'Schmidt number from Keeling et al. (1998)'
1676 is=LEN_TRIM(Coptions)+1
1677 Coptions(is:is+17)=' OCMIP_OXYGEN_SC,'
1678# else
1679!
1680 IF (Master) WRITE (stdout,20) '!OCMIP_OXYGEN_SC', &
1681 & 'Schmidt number from Wanninkhof (1992)'
1682 is=LEN_TRIM(Coptions)+1
1683 Coptions(is:is+18)=' !OCMIP_OXYGEN_SC,'
1684# endif
1685#endif
1686#if defined PARALLEL_IO && defined DISTRIBUTE
1687!
1688 IF (Master) WRITE (stdout,20) 'PARALLEL_IO', &
1689 & 'Parallel I/O processing'
1690 is=LEN_TRIM(Coptions)+1
1691 Coptions(is:is+13)=' PARALLEL_IO,'
1692#endif
1693#ifdef PERFECT_RESTART
1694!
1695 IF (Master) WRITE (stdout,20) 'PERFECT_RESTART', &
1696 & 'Processing perfect restart variables'
1697 is=LEN_TRIM(Coptions)+1
1698 Coptions(is:is+17)=' PERFECT_RESTART,'
1699#endif
1700#ifdef PICARD_TEST
1701!
1702 IF (Master) WRITE (stdout,20) 'PICARD_TEST', &
1703 & 'Representers tangent linear model Picard iterations test'
1704 is=LEN_TRIM(Coptions)+1
1705 Coptions(is:is+13)=' PICARD TEST,'
1706 idriver=idriver+1
1707#endif
1708#ifdef PJ_GRADP
1709!
1710 IF (Master) WRITE (stdout,20) 'PJ_GRADP', &
1711 & 'Finite volume Pressure Jacobian (Lin, 1997)'
1712 is=LEN_TRIM(Coptions)+1
1713 Coptions(is:is+10)=' PJ_GRADP,'
1714#endif
1715#ifdef PJ_GRADPQ2
1716!
1717 IF (Master) WRITE (stdout,20) 'PJ_GRADPQ2', &
1718 & 'Quartic 2 polynomial Pressure Jacobian (Shchepetkin, 2002)'
1719 is=LEN_TRIM(Coptions)+1
1720 Coptions(is:is+12)=' PJ_GRADPQ2,'
1721#endif
1722#ifdef PJ_GRADPQ4
1723!
1724 IF (Master) WRITE (stdout,20) 'PJ_GRADPQ4', &
1725 & 'Quartic 4 polynomial Pressure Jacobian (Shchepetkin, 2002)'
1726 is=LEN_TRIM(Coptions)+1
1727 Coptions(is:is+12)=' PJ_GRADPQ4,'
1728#endif
1729#ifdef POSITIVE_ZERO
1730!
1731 IF (Master) WRITE (stdout,20) 'POSITIVE_ZERO', &
1732 & 'Impose positive zero in output data'
1733 is=LEN_TRIM(Coptions)+1
1734 Coptions(is:is+15)=' POSITIVE_ZERO,'
1735#endif
1736#if defined POSTERIOR_EOFS && defined WEAK_CONSTRAINT
1737!
1738 IF (Master) WRITE (stdout,20) 'POSTERIOR_EOFS', &
1739 & 'Estimating posterior analysis error covariace matrix EOFs'
1740 is=LEN_TRIM(Coptions)+1
1741 Coptions(is:is+16)=' POSTERIOR_EOFS,'
1742#endif
1743#if defined POSTERIOR_ERROR_F && defined WEAK_CONSTRAINT
1744!
1745 IF (Master) WRITE (stdout,20) 'POSTERIOR_ERROR_F', &
1746 & 'Estimating final posterior analysis error covariace matrix'
1747 is=LEN_TRIM(Coptions)+1
1748 Coptions(is:is+16)=' POSTERIOR_ERROR_F,'
1749#endif
1750#if defined POSTERIOR_ERROR_I && defined WEAK_CONSTRAINT
1751!
1752 IF (Master) WRITE (stdout,20) 'POSTERIOR_ERROR_I', &
1753 & 'Estimating initial posterior analysis error covariace matrix'
1754 is=LEN_TRIM(Coptions)+1
1755 Coptions(is:is+16)=' POSTERIOR_ERROR_F,'
1756#endif
1757#if defined POWER_LAW && defined SOLVE3D
1758!
1759 IF (Master) WRITE (stdout,20) 'POWER_LAW', &
1760 & 'Power-law shape time-averaging barotropic filter'
1761 is=LEN_TRIM(Coptions)+1
1762 Coptions(is:is+11)=' POWER_LAW,'
1763#endif
1764#if !(defined PJ_GRADPQ4 || defined PJ_GRADPQ2 || defined PJ_GRADP || \
1765 defined DJ_GRADPS) && defined SOLVE3D
1766!
1767 IF (Master) WRITE (stdout,20) 'PRSGRD31', &
1768 & 'Standard density Jacobian formulation (Song, 1998)'
1769 is=LEN_TRIM(Coptions)+1
1770 Coptions(is:is+10)=' PRSGRD31,'
1771#endif
1772#ifdef PROFILE
1773!
1774 IF (Master) WRITE (stdout,20) 'PROFILE', &
1775 & 'Time profiling activated'
1776 is=LEN_TRIM(Coptions)+1
1777 Coptions(is:is+9)=' PROFILE,'
1778#endif
1779#ifdef PSEUDOSPECTRA
1780!
1781 IF (Master) WRITE (stdout,20) 'PSEUDOSPECTRA', &
1782 & 'Pseudospectra Propagator'
1783 is=LEN_TRIM(Coptions)+1
1784 Coptions(is:is+15)=' PSEUDOSPECTRA,'
1785#endif
1786#ifdef QCORRECTION
1787!
1788 IF (Master) WRITE (stdout,20) 'QCORRECTION', &
1789 & 'Surface net heat flux correction'
1790 is=LEN_TRIM(Coptions)+1
1791 Coptions(is:is+13)=' QCORRECTION,'
1792#endif
1793#ifdef OBSERVATIONS
1794# ifdef RADIAL_ANGLE_CCW_EAST
1795!
1796 IF (Master) WRITE (stdout,20) 'RADIAL_ANGLE_CCW_EAST', &
1797 & 'Radial observations as an azimuth counterclockwise from EAST'
1798 is=LEN_TRIM(Coptions)+1
1799 Coptions(is:is+23)=' RADIAL_ANGLE_CCW_EAST,'
1800# else
1801 IF (Master) WRITE (stdout,20) '!RADIAL_ANGLE_CCW_EAST', &
1802 & 'Radial observations as an azimuth clockwise from NORTH'
1803 is=LEN_TRIM(Coptions)+1
1804 Coptions(is:is+24)=' !RADIAL_ANGLE_CCW_EAST,'
1805# endif
1806#endif
1807#if defined GLS_MIXING || defined MY25_MIXING
1808# if defined K_C2ADVECTION
1809!
1810 IF (Master) WRITE (stdout,20) 'K_C2ADVECTION', &
1811 & 'Second-order centered differences advection of TKE fields'
1812 is=LEN_TRIM(Coptions)+1
1813 Coptions(is:is+15)=' K_C2ADVECTION,'
1814# elif defined K_C4ADVECTION
1815!
1816 IF (Master) WRITE (stdout,20) 'K_C4ADVECTION', &
1817 & 'Fourth-order centered differences advection of TKE fields'
1818 is=LEN_TRIM(Coptions)+1
1819 Coptions(is:is+15)=' K_C4ADVECTION,'
1820# else
1821!
1822 IF (Master) WRITE (stdout,20) 'K_GSCHEME', &
1823 & 'Third-order upstream advection of TKE fields'
1824 is=LEN_TRIM(Coptions)+1
1825 Coptions(is:is+11)=' K_GSCHEME,'
1826# endif
1827# ifdef TKE_DIF2
1828!
1829 IF (Master) WRITE (stdout,20) 'TKE_DIF2', &
1830 & 'Harmonic mixing of TKE fields'
1831 is=LEN_TRIM(Coptions)+1
1832 Coptions(is:is+10)=' TKE_DIF2,'
1833# endif
1834# ifdef TKE_DIF4
1835!
1836 IF (Master) WRITE (stdout,20) 'TKE_DIF4', &
1837 & 'Biharmonic mixing of TKE fields'
1838 is=LEN_TRIM(Coptions)+1
1839 Coptions(is:is+10)=' TKE_DIF4,'
1840# endif
1841#endif
1842#ifdef RADIATION_2D
1843!
1844 IF (Master) WRITE (stdout,20) 'RADIATION_2D', &
1845 & 'Use tangential phase speed in radiation conditions'
1846 is=LEN_TRIM(Coptions)+1
1847 Coptions(is:is+14)=' RADIATION_2D,'
1848#endif
1849#if defined RAMP_TIDES && (defined SSH_TIDES || defined UV_TIDES)
1850!
1851 IF (Master) WRITE (stdout,20) 'RAMP_TIDES', &
1852 & 'Ramping tidal forcing for one day'
1853 is=LEN_TRIM(Coptions)+1
1854 Coptions(is:is+14)=' RAMP_TIDES,'
1855#endif
1856#if defined READ_WATER && defined MASKING
1857!
1858 IF (Master) WRITE (stdout,20) 'READ_WATER', &
1859 & 'Reading data at water points only'
1860 is=LEN_TRIM(Coptions)+1
1861 Coptions(is:is+12)=' READ_WATER,'
1862#endif
1863#if defined RECOMPUTE_4DVAR && defined FOUR_DVAR
1864!
1865 IF (Master) WRITE (stdout,20) 'RECOMPUTE_4DVAR', &
1866 & 'Recomputing 4DVar during data assimilation analysis'
1867 is=LEN_TRIM(Coptions)+1
1868 Coptions(is:is+17)=' RECOMPUTE_4DVAR,'
1869#endif
1870#if defined DISTRIBUTE
1871# if defined REDUCE_ALLGATHER
1872!
1873 IF (Master) WRITE (stdout,20) 'REDUCE_ALLGATHER', &
1874 & 'Using mpi_allgather in mp_reduce routine'
1875 is=LEN_TRIM(Coptions)+1
1876 Coptions(is:is+18)=' REDUCE_ALLGATHER,'
1877# elif defined REDUCE_ALLREDUCE
1878!
1879 IF (Master) WRITE (stdout,20) 'REDUCE_ALLREDUCE', &
1880 & 'Using mpi_allreduce in mp_reduce routine'
1881 is=LEN_TRIM(Coptions)+1
1882 Coptions(is:is+18)=' REDUCE_ALLREDUCE,'
1883# else
1884!
1885 IF (Master) WRITE (stdout,20) '!REDUCE_ALL...', &
1886 & 'Using mpi_isend/mpi_recv in mp_reduce routine'
1887 is=LEN_TRIM(Coptions)+1
1888 Coptions(is:is+16)=' !REDUCE_ALL...,'
1889# endif
1890#endif
1891#ifdef REGCM_COUPLING
1892!
1893 IF (Master) WRITE (stdout,20) 'COAMPS_COUPLING', &
1894 & 'Atmosphere coupling with RegCM'
1895 is=LEN_TRIM(Coptions)+1
1896 Coptions(is:is+16)=' REGCM_COUPLING,'
1897 iatms=iatms+1
1898#endif
1899#ifdef RED_TIDE
1900!
1901 IF (Master) WRITE (stdout,20) 'RED_TIDE', &
1902 & 'Red tide biological model'
1903 is=LEN_TRIM(Coptions)+1
1904 Coptions(is:is+10)=' RED_TIDE,'
1905 ibiology=ibiology+1
1906#endif
1907#if defined REGRESS_STARTCLOCK && defined MODEL_COUPLING && \
1908 defined ESMF_LIB
1909!
1910 IF (Master) WRITE (stdout,20) 'REGRESS_STARTCLOCK', &
1911 & 'Regressing start clock by one coupling interval'
1912 is=LEN_TRIM(Coptions)+1
1913 Coptions(is:is+20)=' REGRESS_STARTCLOCK,'
1914#endif
1915#ifdef ROMS_STDOUT
1916!
1917 IF (Master) WRITE (stdout,20) 'ROMS_STDOUT', &
1918 & 'Red tide biological model'
1919 is=LEN_TRIM(Coptions)+1
1920 Coptions(is:is+13)=' ROMS_STDOUT,'
1921#endif
1922#ifdef R_SYMMETRY
1923!
1924 IF (Master) WRITE (stdout,20) 'REP_MATRIX', &
1925 & 'Representers Matrix Symmetry Test'
1926 is=LEN_TRIM(Coptions)+1
1927 Coptions(is:is+12)=' REP_MATRIX,'
1928 idriver=idriver+1
1929#endif
1930#if defined LMD_MIXING
1931# ifdef RI_HORAVG
1932!
1933 IF (Master) WRITE (stdout,20) 'RI_HORAVG', &
1934 & 'Smooth Richardson number horizontally'
1935 is=LEN_TRIM(Coptions)+1
1936 Coptions(is:is+11)=' RI_HORAVG,'
1937# endif
1938# ifdef RI_VERAVG
1939!
1940 IF (Master) WRITE (stdout,20) 'RI_VERAVG', &
1941 & 'Smooth Richardson number vertically'
1942 is=LEN_TRIM(Coptions)+1
1943 Coptions(is:is+11)=' RI_VERAVG,'
1944# endif
1945#endif
1946#if defined SOLVE3D && \
1947 (defined GLS_MIXING || defined LMD_MIXING || defined MY25_MIXING)
1948# ifdef RI_SPLINES
1949!
1950 IF (Master) WRITE (stdout,20) 'RI_SPLINES', &
1951 & 'Parabolic Spline Reconstruction for Richardson Number'
1952 is=LEN_TRIM(Coptions)+1
1953 Coptions(is:is+12)=' RI_SPLINES,'
1954# endif
1955#endif
1956#if !(defined PJ_GRADPQ4 || defined PJ_GRADPQ2 || defined PJ_GRADP || \
1957 defined DJ_GRADPS) && defined RHO_SURF && defined SOLVE3D
1958!
1959 IF (Master) WRITE (stdout,20) 'RHO_SURF', &
1960 & 'Include difference between rho0 and surface density'
1961 is=LEN_TRIM(Coptions)+1
1962 Coptions(is:is+10)=' RHO_SURF,'
1963#endif
1964#if defined RPCG && defined WEAK_CONSTRAINT
1965!
1966 IF (Master) WRITE (stdout,20) 'RPCG', &
1967 & 'Restricted B-preconditioned Lanczos minimization'
1968 is=LEN_TRIM(Coptions)+1
1969 Coptions(is:is+6)=' RPCG,'
1970#endif
1971#if defined RP_AVERAGES && defined TL_IOMS
1972!
1973 IF (Master) WRITE (stdout,20) 'RP_AVERAGES', &
1974 & 'Writing out time-averaged representer model fields'
1975 is=LEN_TRIM(Coptions)+1
1976 Coptions(is:is+13)=' RP_AVERAGES,'
1977#endif
1978#ifdef RPM_DRIVER
1979!
1980 IF (Master) WRITE (stdout,20) 'RPM_DRIVER', &
1981 & 'Generic representers tangent linear model driver'
1982 is=LEN_TRIM(Coptions)+1
1983 Coptions(is:is+12)=' RPM_DRIVER,'
1984 idriver=idriver+1
1985#endif
1986#ifdef RPM_RELAXATION
1987!
1988 IF (Master) WRITE (stdout,20) 'RPM_RELAXATION', &
1989 & 'Diffusive Relaxation of RPM in Picard Iterations'
1990 is=LEN_TRIM(Coptions)+1
1991 Coptions(is:is+16)=' RPM_RELAXATION,'
1992#endif
1993#ifdef RST_SINGLE
1994!
1995 IF (Master) WRITE (stdout,20) 'RST_SINGLE', &
1996 & 'Single precision fields in restart NetCDF file'
1997 is=LEN_TRIM(Coptions)+1
1998 Coptions(is:is+12)=' RST_SINGLE,'
1999#else
2000!
2001 IF (Master) WRITE (stdout,20) '!RST_SINGLE', &
2002 & 'Double precision fields in restart NetCDF file'
2003 is=LEN_TRIM(Coptions)+1
2004 Coptions(is:is+13)=' !RST_SINGLE,'
2005#endif
2006#ifdef SALINITY
2007!
2008 IF (Master) WRITE (stdout,20) 'SALINITY', &
2009 & 'Using salinity'
2010 is=LEN_TRIM(Coptions)+1
2011 Coptions(is:is+10)=' SALINITY,'
2012#endif
2013#ifdef SANITY_CHECK
2014!
2015 IF (Master) WRITE (stdout,20) 'SANITY_CHECK', &
2016 & 'Tangent Linear and Adjoint Models Correctness Check'
2017 is=LEN_TRIM(Coptions)+1
2018 Coptions(is:is+14)=' SANITY_CHECK,'
2019 idriver=idriver+1
2020#endif
2021#ifdef SCORRECTION
2022!
2023 IF (Master) WRITE (stdout,20) 'SCORRECTION', &
2024 & 'Surface salinity flux correction'
2025 is=LEN_TRIM(Coptions)+1
2026 Coptions(is:is+13)=' SCORRECTION,'
2027#endif
2028#ifdef SEDIMENT
2029!
2030 IF (Master) WRITE (stdout,20) 'SEDIMENT', &
2031 & 'Cohesive and noncohesive sediments'
2032 is=LEN_TRIM(Coptions)+1
2033 Coptions(is:is+10)=' SEDIMENT,'
2034# ifdef SED_DENS
2035!
2036 IF (Master) WRITE (stdout,20) 'SED_DENS', &
2037 & 'Include density of suspended sediment in equation of state'
2038 is=LEN_TRIM(Coptions)+1
2039 Coptions(is:is+10)=' SED_DENS,'
2040# endif
2041# ifdef SED_MORPH
2042!
2043 IF (Master) WRITE (stdout,20) 'SED_MORPH', &
2044 & 'Allow bottom model elevation to evolve'
2045 is=LEN_TRIM(Coptions)+1
2046 Coptions(is:is+11)=' SED_MORPH,'
2047# endif
2048# ifdef SUSPLOAD
2049!
2050 IF (Master) WRITE (stdout,20) 'SUSPLOAD', &
2051 & 'Activate suspended sediment transport'
2052 is=LEN_TRIM(Coptions)+1
2053 Coptions(is:is+10)=' SUSPLOAD,'
2054# endif
2055#endif
2056#ifdef SG_BBL
2057!
2058 IF (Master) WRITE (stdout,20) 'SG_BBL', &
2059 & 'Styles and Glenn Bottom Boundary Layer'
2060 is=LEN_TRIM(Coptions)+1
2061 Coptions(is:is+8)=' SG_BBL,'
2062 ibbl=ibbl+1
2063# ifdef SG_CALC_UB
2064!
2065 IF (Master) WRITE (stdout,20) 'SG_CALC_UB', &
2066 & 'Internal computation of bottom orbital velocity'
2067 is=LEN_TRIM(Coptions)+1
2068 Coptions(is:is+12)=' SG_CALC_UB,'
2069# endif
2070# ifdef SG_CALC_ZNOT
2071!
2072 IF (Master) WRITE (stdout,20) 'SG_CALC_ZNOT', &
2073 & 'Internal computation of bottom roughness'
2074 is=LEN_TRIM(Coptions)+1
2075 Coptions(is:is+14)=' SG_CALC_ZNOT,'
2076# endif
2077# ifdef SG_LOGINT
2078!
2079 IF (Master) WRITE (stdout,20) 'SG_LOGINT', &
2080 & 'Bottom currents logarithmic interpolation'
2081 is=LEN_TRIM(Coptions)+1
2082 Coptions(is:is+11)=' SG_LOGINT,'
2083# endif
2084#endif
2085#ifdef SINGLE_PRECISION
2086!
2087 IF (Master) WRITE (stdout,20) 'SINGLE_PRECISION', &
2088 & 'Single precision arithmetic numerical kernel.'
2089 is=LEN_TRIM(Coptions)+1
2090 Coptions(is:is+18)=' SINGLE_PRECISION,'
2091#endif
2092#if defined SKIP_NLM && defined SENSITIVITY_4DVAR
2093!
2094 IF (Master) WRITE (stdout,20) 'SKIP_NLM', &
2095 & 'Skipping running NLM, reading NLM state trajectory'
2096 is=LEN_TRIM(Coptions)+1
2097 Coptions(is:is+10)=' SKIP_NLM,'
2098#endif
2099#ifdef SRELAXATION
2100!
2101 IF (Master) WRITE (stdout,20) 'SRELAXATION', &
2102 & 'Surface salinity relaxation as surface flux'
2103 is=LEN_TRIM(Coptions)+1
2104 Coptions(is:is+13)=' SRELAXATION,'
2105#endif
2106#ifdef SOLAR_SOURCE
2107!
2108 IF (Master) WRITE (stdout,20) 'SOLAR_SOURCE', &
2109 & 'Solar Radiation Source Term'
2110 is=LEN_TRIM(Coptions)+1
2111 Coptions(is:is+14)=' SOLAR_SOURCE,'
2112#endif
2113#ifdef SOLVE3D
2114!
2115 IF (Master) WRITE (stdout,20) 'SOLVE3D', &
2116 & 'Solving 3D Primitive Equations'
2117 is=LEN_TRIM(Coptions)+1
2118 Coptions(is:is+9)=' SOLVE3D,'
2119#endif
2120#ifdef SO_SEMI
2121!
2122 IF (Master) WRITE (stdout,20) 'SO_SEMI', &
2123 & 'Stochastic Optimals Propagator, Semi-norm Estimation'
2124 is=LEN_TRIM(Coptions)+1
2125 Coptions(is:is+9)=' SO_SEMI,'
2126 idriver=idriver+1
2127#endif
2128#ifdef SO_TRACE
2129!
2130 IF (Master) WRITE (stdout,20) 'SO_TRACE', &
2131 & 'Stochastic Optimals Propagator, Randomized Trace Estimation'
2132 is=LEN_TRIM(Coptions)+1
2133 Coptions(is:is+10)=' SO_TRACE,'
2134 idriver=idriver+1
2135#endif
2136#ifdef SO_SEMI
2137# ifdef SO_SEMI_WHITE
2138!
2139 IF (Master) WRITE (stdout,20) 'SO_SEMI_WHITE', &
2140 & 'Stochastic Optimals, white noise processes'
2141 is=LEN_TRIM(Coptions)+1
2142 Coptions(is:is+15)=' SO_SEMI_WHITE,'
2143# else
2144!
2145 IF (Master) WRITE (stdout,20) '!SO_WHITE', &
2146 & 'Stochastic Optimals, red noise processes'
2147 is=LEN_TRIM(Coptions)+1
2148 Coptions(is:is+16)=' !SO_SEMI_WHITE,'
2149# endif
2150#endif
2151#if defined SPLINES_VCONV && defined FOUR_DVAR && defined VCONVOLUTION
2152!
2153 IF (Master) WRITE (stdout,20) 'IMPLICIT_VCONV', &
2154 & 'Implicit, Parabolic Splines Vertical Convolution Algorithm'
2155 is=LEN_TRIM(Coptions)+1
2156 Coptions(is:is+16)=' SPLINES_VCONV,'
2157#endif
2158#if defined SPLINES_VDIFF && defined SOLVE3D
2159!
2160 IF (Master) WRITE (stdout,20) 'SPLINES_VDIFF', &
2161 & 'Parabolic Spline Reconstruction for Vertical Diffusion'
2162 is=LEN_TRIM(Coptions)+1
2163 Coptions(is:is+15)=' SPLINES_VDIFF,'
2164#endif
2165#if defined SPLINES_VVISC && defined SOLVE3D
2166!
2167 IF (Master) WRITE (stdout,20) 'SPLINES_VVISC', &
2168 & 'Parabolic Spline Reconstruction for Vertical Viscosity'
2169 is=LEN_TRIM(Coptions)+1
2170 Coptions(is:is+15)=' SPLINES_VVISC,'
2171#endif
2172#ifdef SPHERICAL
2173!
2174 IF (Master) WRITE (stdout,20) 'SPHERICAL', &
2175 & 'Spherical grid configuration'
2176 is=LEN_TRIM(Coptions)+1
2177 Coptions(is:is+11)=' SPHERICAL,'
2178#endif
2179#if defined SSH_TIDES
2180!
2181 IF (Master) WRITE (stdout,20) 'SSH_TIDES', &
2182 & 'Add tidal elevation to SSH climatology'
2183 is=LEN_TRIM(Coptions)+1
2184 Coptions(is:is+11)=' SSH_TIDES,'
2185#endif
2186#ifdef SSW_BBL
2187!
2188 IF (Master) WRITE (stdout,20) 'SSW_BBL', &
2189 & 'Styles and Glenn Bottom Boundary Layer - modified'
2190 is=LEN_TRIM(Coptions)+1
2191 Coptions(is:is+8)=' SSW_BBL,'
2192 ibbl=ibbl+1
2193# ifdef SSW_CALC_UB
2194!
2195 IF (Master) WRITE (stdout,20) 'SSW_CALC_UB', &
2196 & 'Internal computation of bottom orbital velocity'
2197 is=LEN_TRIM(Coptions)+1
2198 Coptions(is:is+14)=' SSW_CALC_UB,'
2199# endif
2200# ifdef SSW_CALC_ZNOT
2201!
2202 IF (Master) WRITE (stdout,20) 'SSW_CALC_ZNOT', &
2203 & 'Internal computation of bottom roughness'
2204 is=LEN_TRIM(Coptions)+1
2205 Coptions(is:is+14)=' SSW_CALC_ZNOT,'
2206# endif
2207# ifdef SSW_FORM_DRAG_COR
2208!
2209 IF (Master) WRITE (stdout,20) 'SSW_FORM_DRAG_COR', &
2210 & 'Form drag coefficient'
2211 is=LEN_TRIM(Coptions)+1
2212 Coptions(is:is+19)=' SSW_FORM_DRAG_COR,'
2213# endif
2214# ifdef SSW_ZOBIO
2215!
2216 IF (Master) WRITE (stdout,20) 'SSW_Z0BIO', &
2217 & 'Biogenic bedfrom roughness from ripples'
2218 is=LEN_TRIM(Coptions)+1
2219 Coptions(is:is+11)=' SSW_Z0BIO,'
2220# endif
2221# ifdef SSW_ZOBL
2222!
2223 IF (Master) WRITE (stdout,20) 'SSW_Z0BL', &
2224 & 'Bedload roughness from ripples'
2225 is=LEN_TRIM(Coptions)+1
2226 Coptions(is:is+10)=' SSW_Z0BL,'
2227# endif
2228# ifdef SSW_ZORIP
2229!
2230 IF (Master) WRITE (stdout,20) 'SSW_Z0RIP', &
2231 & 'Bedfrom roughness from ripples'
2232 is=LEN_TRIM(Coptions)+1
2233 Coptions(is:is+11)=' SSW_Z0RIP,'
2234# endif
2235# ifdef SSW_LOGINT
2236!
2237 IF (Master) WRITE (stdout,20) 'SSW_LOGINT', &
2238 & 'Bottom currents logarithmic interpolation'
2239 is=LEN_TRIM(Coptions)+1
2240 Coptions(is:is+11)=' SSW_LOGINT,'
2241# endif
2242#endif
2243#ifdef STATIONS
2244!
2245 IF (Master) WRITE (stdout,20) 'STATIONS', &
2246 & 'Writing out station data'
2247 is=LEN_TRIM(Coptions)+1
2248 Coptions(is:is+10)=' STATIONS,'
2249#endif
2250#if defined STATIONS_CGRID && defined STATIONS
2251!
2252 IF (Master) WRITE (stdout,20) 'STATIONS_CGRID', &
2253 & 'Extracting station data at native C-grid locations'
2254 is=LEN_TRIM(Coptions)+1
2255 Coptions(is:is+16)=' STATIONS_CGRID,'
2256#endif
2257#ifdef STOCHASTIC_OPT
2258!
2259 IF (Master) WRITE (stdout,20) 'STOCHASTIC_OPT', &
2260 & 'Stochastic Optimals Propagator'
2261 is=LEN_TRIM(Coptions)+1
2262 Coptions(is:is+16)=' STOCHASTIC_OPT,'
2263 idriver=idriver+1
2264# ifdef STOCH_OPT_WHITE
2265!
2266 IF (Master) WRITE (stdout,20) 'STOCH_OPT_WHITE', &
2267 & 'Stochastic Optimals, white noise processes'
2268 is=LEN_TRIM(Coptions)+1
2269 Coptions(is:is+17)=' STOCH_OPT_WHITE,'
2270# else
2271!
2272 IF (Master) WRITE (stdout,20) '!STOCH_OPT_WHITE', &
2273 & 'Stochastic Optimals, red noise processes'
2274 is=LEN_TRIM(Coptions)+1
2275 Coptions(is:is+18)=' !STOCH_OPT_WHITE,'
2276# endif
2277#endif
2278#if defined SURFACE_DO_SATURATION && defined HYPOXIA_SRM
2279!
2280 IF (Master) WRITE (stdout,20) 'SURFACE_DO_SATURATION', &
2281 & 'Use surface dissolved oxygen saturation'
2282 is=LEN_TRIM(Coptions)+1
2283 Coptions(is:is+23)=' SURFACE_DO_SATURATION,'
2284#endif
2285#ifdef SWAN_COUPLING
2286!
2287 IF (Master) WRITE (stdout,20) 'SWAN_COUPLING', &
2288 & 'Two-way SWAN/ROMS coupling'
2289 is=LEN_TRIM(Coptions)+1
2290 Coptions(is:is+15)=' SWAN_COUPLING,'
2291#endif
2292#if defined CARBON && defined BIO_FENNEL
2293# ifdef TALK_NONCONSERV
2294!
2295 IF (Master) WRITE (stdout,20) 'TALK_NONCONSERV', &
2296 & 'Alkalinity is affected by changes in nitrate or ammonium'
2297 is=LEN_TRIM(Coptions)+1
2298 Coptions(is:is+17)=' TALK_NONCONSERV,'
2299# else
2300!
2301 IF (Master) WRITE (stdout,20) '!TALK_NONCONSERV', &
2302 & 'Alkalinity is passive and unaffected by nitrate or ammonium'
2303 is=LEN_TRIM(Coptions)+1
2304 Coptions(is:is+18)=' !TALK_NONCONSERV,'
2305# endif
2306#endif
2307#ifdef TANGENT
2308!
2309 IF (Master) WRITE (stdout,20) 'TANGENT', &
2310 & 'Tangent Linear Model'
2311 is=LEN_TRIM(Coptions)+1
2312 Coptions(is:is+9)=' TANGENT,'
2313#endif
2314#if defined TIME_CONV && defined WEAK_CONSTRAINT
2315!
2316 IF (Master) WRITE (stdout,20) 'TIME_CONV', &
2317 & 'Weak-constraint 4D-Var time convolution'
2318 is=LEN_TRIM(Coptions)+1
2319 Coptions(is:is+11)=' TIME_CONV,'
2320#endif
2321#if defined TIME_INTERP && defined MODEL_COUPLING
2322!
2323 IF (Master) WRITE (stdout,20) 'TIME_INTERP', &
2324 & 'Time interpolation from coupling snapshots arrays'
2325 is=LEN_TRIM(Coptions)+1
2326 Coptions(is:is+13)=' TIME_INTERP,'
2327#endif
2328#if defined TIME_INTERP_FLUX && defined NESTING && defined SOLVE3D
2329!
2330 IF (Master) WRITE (stdout,20) 'TIME_INTERP_FLUX', &
2331 & 'Time interpolate coaser grid mass flux in refinement'
2332 is=LEN_TRIM(Coptions)+1
2333 Coptions(is:is+18)=' TIME_INTERP_FLUX,'
2334#endif
2335#if defined TL_AVERAGES && defined TANGENT
2336!
2337 IF (Master) WRITE (stdout,20) 'TL_AVERAGES', &
2338 & 'Writing out time-averaged tangent linear model fields'
2339 is=LEN_TRIM(Coptions)+1
2340 Coptions(is:is+13)=' TL_AVERAGES,'
2341#endif
2342#ifdef TLM_DRIVER
2343!
2344 IF (Master) WRITE (stdout,20) 'TLM_DRIVER', &
2345 & 'Generic tangent linear model driver'
2346 is=LEN_TRIM(Coptions)+1
2347 Coptions(is:is+12)=' TLM_DRIVER,'
2348 idriver=idriver+1
2349#endif
2350#if defined GLS_MIXING && defined TKE_WAVEDISS
2351!
2352 IF (Master) WRITE (stdout,20) 'TKE_WAVEDISS', &
2353 & 'Wave breaking surface tke flux based on wave amplitude'
2354 is=LEN_TRIM(Coptions)+1
2355 Coptions(is:is+14)=' TKE_WAVEDISS,'
2356#endif
2357#ifdef TL_IOMS
2358!
2359 IF (Master) WRITE (stdout,20) 'TL_IOMS', &
2360 & 'Representers Tangent Linear Model'
2361 is=LEN_TRIM(Coptions)+1
2362 Coptions(is:is+9)=' TL_IOMS,'
2363#endif
2364#ifdef TLM_CHECK
2365!
2366 IF (Master) WRITE (stdout,20) 'TLM_CHECK', &
2367 & 'Tangent Linear Model Linearization Check'
2368 is=LEN_TRIM(Coptions)+1
2369 Coptions(is:is+11)=' TLM_CHECK,'
2370#endif
2371#ifdef SOLVE3D
2372# if defined T_PASSIVE
2373!
2374 IF (Master) WRITE (stdout,20) 'T_PASSIVE', &
2375 & 'Advecting and diffusing inert passive tracer'
2376 is=LEN_TRIM(Coptions)+1
2377 Coptions(is:is+11)=' T_PASSIVE,'
2378# endif
2379# if defined TS_MIX_CLIMA && \
2380 (defined TS_DIF2 || defined TS_DIF4)
2381!
2382 IF (Master) WRITE (stdout,20) 'TS_MIX_CLIMA', &
2383 & 'Horizontal diffusion of tracer perturbation (T-Tclm)'
2384 is=LEN_TRIM(Coptions)+1
2385 Coptions(is:is+14)=' TS_MIX_CLIMA,'
2386# endif
2387# if defined TS_MIX_MAX_SLOPE && defined MIX_ISO_TS && \
2388 (defined TS_DIF2 || defined TS_DIF4)
2389!
2390 IF (Master) WRITE (stdout,20) 'TS_MIX_MAX_SLOPE', &
2391 & 'Maximum density slope in isopycnal diffusion'
2392 is=LEN_TRIM(Coptions)+1
2393 Coptions(is:is+18)=' TS_MIX_MAX_SLOPE,'
2394# endif
2395# if defined TS_MIX_MAX_SLOPE && defined MIX_ISO_TS && \
2396 (defined TS_DIF2 || defined TS_DIF4)
2397!
2398 IF (Master) WRITE (stdout,20) 'TS_MIX_MAX_STRAT', &
2399 & 'Minimum density stratification in isopycnal diffusion'
2400 is=LEN_TRIM(Coptions)+1
2401 Coptions(is:is+18)=' TS_MIX_MAX_STRAT,'
2402# endif
2403# if defined TS_MIX_STABILITY && \
2404 (defined TS_DIF2 || defined TS_DIF4)
2405!
2406 IF (Master) WRITE (stdout,20) 'TS_MIX_STABILITY', &
2407 & 'Weighting diffusion between two time levels'
2408 is=LEN_TRIM(Coptions)+1
2409 Coptions(is:is+18)=' TS_MIX_STABILITY,'
2410# endif
2411# ifdef TS_MPDATA
2412!
2413 IF (Master) WRITE (stdout,20) 'TS_MPDATA', &
2414 & 'Recursive flux corrected MPDATA 3D advection of tracers'
2415 is=LEN_TRIM(Coptions)+1
2416 Coptions(is:is+11)=' TS_MPDATA,'
2417 itrcHadv=itrcHadv+1
2418 itrcVadv=itrcVadv+1
2419# ifdef TS_MPDATA_LIMIT
2420!
2421 IF (Master) WRITE (stdout,20) 'TS_MPDATA_LIMIT', &
2422 & 'Further limiter in upwind corrector fluxes for stability'
2423 is=LEN_TRIM(Coptions)+1
2424 Coptions(is:is+17)=' TS_MPDATA_LIMIT,'
2425# endif
2426# endif
2427# ifdef TS_A4HADVECTION
2428!
2429 IF (Master) WRITE (stdout,20) 'TS_A4HADVECTION', &
2430 & 'Fourth-order Akima horizontal advection of tracers'
2431 is=LEN_TRIM(Coptions)+1
2432 Coptions(is:is+17)=' TS_A4HADVECTION,'
2433 itrcHadv=itrcHadv+1
2434# endif
2435# if defined TS_A4HADVECTION_TL && \
2436 (defined TANGENT || defined ADJOINT || defined TL_IOMS)
2437!
2438 IF (Master) WRITE (stdout,20) 'TS_A4HADVECTION_TL', &
2439 & 'TL/AD fourth-order Akima horizontal tracer advection'
2440 is=LEN_TRIM(Coptions)+1
2441 Coptions(is:is+20)=' TS_A4HADVECTION_TL,'
2442 itrcHadvtl=itrcHadvtl+1
2443# endif
2444# ifdef TS_C2HADVECTION
2445!
2446 IF (Master) WRITE (stdout,20) 'TS_C2HADVECTION', &
2447 & 'Second-order centered horizontal advection of tracers'
2448 is=LEN_TRIM(Coptions)+1
2449 Coptions(is:is+17)=' TS_C2HADVECTION,'
2450 itrcHadv=itrcHadv+1
2451# endif
2452# if defined TS_C2HADVECTION_TL && \
2453 (defined TANGENT || defined ADJOINT || defined TL_IOMS)
2454!
2455 IF (Master) WRITE (stdout,20) 'TS_C2HADVECTION_TL', &
2456 & 'TL/AD second-order centered horizontal tracer advection'
2457 is=LEN_TRIM(Coptions)+1
2458 Coptions(is:is+20)=' TS_C2HADVECTION_TL,'
2459 itrcHadvtl=itrcHadvtl+1
2460# endif
2461# if defined TS_C4HADVECTION || defined TS_U3ADV_SPLIT
2462!
2463 IF (Master) WRITE (stdout,20) 'TS_C4HADVECTION', &
2464 & 'Fourth-order centered horizontal advection of tracers'
2465 is=LEN_TRIM(Coptions)+1
2466 Coptions(is:is+17)=' TS_C4HADVECTION,'
2467 itrcHadv=itrcHadv+1
2468# endif
2469# if defined TS_C4HADVECTION_TL && \
2470 (defined TANGENT || defined ADJOINT || defined TL_IOMS)
2471!
2472 IF (Master) WRITE (stdout,20) 'TS_C4HADVECTION_TL', &
2473 & 'TL/AD fourth-order centered horizontal tracer advection'
2474 is=LEN_TRIM(Coptions)+1
2475 Coptions(is:is+20)=' TS_C4HADVECTION_TL,'
2476 itrcHadvtl=itrcHadvtl+1
2477# endif
2478# ifdef TS_U3HADVECTION
2479!
2480 IF (Master) WRITE (stdout,20) 'TS_U3HADVECTION', &
2481 & 'Third-order upstream horizontal advection of tracers'
2482 is=LEN_TRIM(Coptions)+1
2483 Coptions(is:is+17)=' TS_U3HADVECTION,'
2484 itrcHadv=itrcHadv+1
2485# endif
2486# if defined TS_U3HADVECTION_TL && \
2487 (defined TANGENT || defined ADJOINT || defined TL_IOMS)
2488!
2489 IF (Master) WRITE (stdout,20) 'TS_U3HADVECTION_TL', &
2490 & 'TL/AD third-order upstream horizontal tracer advection'
2491 is=LEN_TRIM(Coptions)+1
2492 Coptions(is:is+20)=' TS_U3HADVECTION_TL,'
2493 itrcHadvtl=itrcHadvtl+1
2494# endif
2495# if !(defined TS_MPDATA || defined TS_A4HADVECTION || \
2496 defined TS_C2HADVECTION || defined TS_C4HADVECTION || \
2497 defined TS_U3HADVECTION)
2498!
2499 IF (Master) WRITE (stdout,20) 'TS_C4HADVECTION', &
2500 & 'Fourth-order centered horizontal advection of tracers'
2501 is=LEN_TRIM(Coptions)+1
2502 Coptions(is:is+17)=' TS_C4HADVECTION,'
2503 itrcHadv=itrcHadv+1
2504# endif
2505# ifdef TS_A4VADVECTION
2506!
2507 IF (Master) WRITE (stdout,20) 'TS_A4VADVECTION', &
2508 & 'Fourth-order Akima vertical advection of tracers'
2509 is=LEN_TRIM(Coptions)+1
2510 Coptions(is:is+17)=' TS_A4VADVECTION,'
2511 itrcVadv=itrcVadv+1
2512# endif
2513# if defined TS_A4VADVECTION_TL && \
2514 (defined TANGENT || defined ADJOINT || defined TL_IOMS)
2515!
2516 IF (Master) WRITE (stdout,20) 'TS_A4VADVECTION_TL', &
2517 & 'TL/AD fourth-order Akima vertical tracer advection'
2518 is=LEN_TRIM(Coptions)+1
2519 Coptions(is:is+20)=' TS_A4VADVECTION_TL,'
2520 itrcVadvtl=itrcVadvtl+1
2521# endif
2522# ifdef TS_C2VADVECTION
2523!
2524 IF (Master) WRITE (stdout,20) 'TS_C2VADVECTION', &
2525 & 'Second-order centered vertical advection of tracers'
2526 is=LEN_TRIM(Coptions)+1
2527 Coptions(is:is+17)=' TS_C2VADVECTION,'
2528 itrcVadv=itrcVadv+1
2529# endif
2530# if defined TS_C2VADVECTION_TL && \
2531 (defined TANGENT || defined ADJOINT || defined TL_IOMS)
2532!
2533 IF (Master) WRITE (stdout,20) 'TS_C2VADVECTION_TL', &
2534 & 'TL/AD second-order centered vertical tracer advection'
2535 is=LEN_TRIM(Coptions)+1
2536 Coptions(is:is+20)=' TS_C2VADVECTION_TL,'
2537 itrcVadvtl=itrcVadvtl+1
2538# endif
2539# if defined TS_C4VADVECTION || defined TS_U3ADV_SPLIT
2540!
2541 IF (Master) WRITE (stdout,20) 'TS_C4VADVECTION', &
2542 & 'Fourth-order centered vertical advection of tracers'
2543 is=LEN_TRIM(Coptions)+1
2544 Coptions(is:is+17)=' TS_C4VADVECTION,'
2545 itrcVadv=itrcVadv+1
2546# endif
2547# if defined TS_C4VADVECTION_TL && \
2548 (defined TANGENT || defined ADJOINT || defined TL_IOMS)
2549!
2550 IF (Master) WRITE (stdout,20) 'TS_C4VADVECTION_TL', &
2551 & 'TL/AD fourth-order centered vertical tracer advection'
2552 is=LEN_TRIM(Coptions)+1
2553 Coptions(is:is+20)=' TS_C4VADVECTION_TL,'
2554 itrcVadvtl=itrcVadvtl+1
2555# endif
2556# ifdef TS_SVADVECTION
2557!
2558 IF (Master) WRITE (stdout,20) 'TS_SVADVECTION', &
2559 & 'Parabolic splines vertical advection of tracers'
2560 is=LEN_TRIM(Coptions)+1
2561 Coptions(is:is+16)=' TS_SVADVECTION,'
2562 itrcVadv=itrcVadv+1
2563# endif
2564# if defined TS_SVADVECTION_TL && \
2565 (defined TANGENT || defined ADJOINT || defined TL_IOMS)
2566!
2567 IF (Master) WRITE (stdout,20) 'TS_SVADVECTION_TL', &
2568 & 'TL/AD parabolic splines vertical tracer advection'
2569 is=LEN_TRIM(Coptions)+1
2570 Coptions(is:is+19)=' TS_SVADVECTION_TL,'
2571 itrcVadvtl=itrcVadvtl+1
2572# endif
2573# if !(defined TS_MPDATA || defined TS_A4VADVECTION || \
2574 defined TS_C2VADVECTION || defined TS_C4VADVECTION || \
2575 defined TS_SVADVECTION)
2576!
2577 IF (Master) WRITE (stdout,20) 'TS_C4VADVECTION', &
2578 & 'Fourth-order centered vertical advection of tracers'
2579 is=LEN_TRIM(Coptions)+1
2580 Coptions(is:is+17)=' TS_C4VADVECTION,'
2581 itrcVadv=itrcVadv+1
2582# endif
2583# ifdef TS_U3ADV_SPLIT
2584!
2585 IF (Master) WRITE (stdout,20) 'TS_U3ADV_SPLIT', &
2586 & 'Split third-order upstream advection of tracers'
2587 is=LEN_TRIM(Coptions)+1
2588 Coptions(is:is+16)=' TS_U3ADV_SPLIT,'
2589# endif
2590#endif
2591#if defined TS_DIF2 && defined SOLVE3D
2592!
2593 IF (Master) WRITE (stdout,20) 'TS_DIF2', &
2594 & 'Harmonic mixing of tracers'
2595 is=LEN_TRIM(Coptions)+1
2596 Coptions(is:is+9)=' TS_DIF2,'
2597#endif
2598#if defined TS_DIF4 && defined SOLVE3D
2599!
2600 IF (Master) WRITE (stdout,20) 'TS_DIF4', &
2601 & 'Biharmonic mixing of tracers'
2602 is=LEN_TRIM(Coptions)+1
2603 Coptions(is:is+9)=' TS_DIF4,'
2604#endif
2605#ifdef TS_FIXED
2606!
2607 IF (Master) WRITE (stdout,20) 'TS_FIXED', &
2608 & 'Diagnostic configuration, no evolution of tracer'
2609 is=LEN_TRIM(Coptions)+1
2610 Coptions(is:is+10)=' TS_FIXED,'
2611#endif
2612#if defined TS_SMAGORINSKY && (defined TS_DIF2 || defined TS_DIF4)
2613!
2614 IF (Master) WRITE (stdout,20) 'TS_SMAGORINSKY', &
2615 & 'Smagorinksy-like time-dependent diffusion coefficients'
2616 is=LEN_TRIM(Coptions)+1
2617 Coptions(is:is+16)=' TS_SMAGORINSKY,'
2618#endif
2619#ifdef UV_ADV
2620!
2621 IF (Master) WRITE (stdout,20) 'UV_ADV', &
2622 & 'Advection of momentum'
2623 is=LEN_TRIM(Coptions)+1
2624 Coptions(is:is+8)=' UV_ADV,'
2625#endif
2626#ifdef UV_COR
2627!
2628 IF (Master) WRITE (stdout,20) 'UV_COR', &
2629 & 'Coriolis term'
2630 is=LEN_TRIM(Coptions)+1
2631 Coptions(is:is+8)=' UV_COR,'
2632#endif
2633#ifdef UV_ADV
2634# ifdef UV_C2ADVECTION
2635!
2636 IF (Master) WRITE (stdout,20) 'UV_C2ADVECTION', &
2637 & 'Second-order centered differences advection of momentum'
2638 is=LEN_TRIM(Coptions)+1
2639 Coptions(is:is+16)=' UV_C2ADVECTION,'
2640 ivelHadv=ivelHadv+1
2641 ivelVadv=ivelVadv+1
2642# endif
2643# if defined UV_C4ADVECTION || defined UV_U3ADV_SPLIT
2644!
2645 IF (Master) WRITE (stdout,20) 'UV_C4ADVECTION', &
2646 & 'Fourth-order centered differences advection of momentum'
2647 is=LEN_TRIM(Coptions)+1
2648 Coptions(is:is+16)=' UV_C4ADVECTION,'
2649 ivelHadv=ivelHadv+1
2650 ivelVadv=ivelVadv+1
2651# endif
2652# ifdef SOLVE3D
2653# if !(defined UV_C2ADVECTION || defined UV_C4ADVECTION)
2654!
2655 IF (Master) WRITE (stdout,20) 'UV_U3HADVECTION', &
2656 & 'Third-order upstream horizontal advection of 3D momentum'
2657 is=LEN_TRIM(Coptions)+1
2658 Coptions(is:is+17)=' UV_U3HADVECTION,'
2659 ivelHadv=ivelHadv+1
2660# endif
2661# if !(defined UV_C2ADVECTION || defined UV_C4ADVECTION || \
2662 defined UV_SADVECTION)
2663!
2664 IF (Master) WRITE (stdout,20) 'UV_C4VADVECTION', &
2665 & 'Fourth-order centered vertical advection of momentum'
2666 is=LEN_TRIM(Coptions)+1
2667 Coptions(is:is+16)=' UV_C4VADVECTION,'
2668 ivelVadv=ivelVadv+1
2669# endif
2670# ifdef UV_SADVECTION
2671!
2672 IF (Master) WRITE (stdout,20) 'UV_SADVECTION', &
2673 & 'Parabolic splines vertical advection of momentum'
2674 is=LEN_TRIM(Coptions)+1
2675 Coptions(is:is+15)=' UV_SADVECTION,'
2676 ivelVadv=ivelVadv+1
2677# endif
2678# ifdef UV_U3ADV_SPLIT
2679!
2680 IF (Master) WRITE (stdout,20) 'UV_U3ADV_SPLIT', &
2681 & 'Split third-order upstream advection of momentum'
2682 is=LEN_TRIM(Coptions)+1
2683 Coptions(is:is+16)=' UV_U3ADV_SPLIT,'
2684# endif
2685# endif
2686#endif
2687#ifdef UV_DRAG_GRID
2688!
2689 IF (Master) WRITE (stdout,20) 'UV_DRAG_GRID', &
2690# if defined UV_LOGDRAG
2691 & 'Spatially varying bottom roughness length'
2692# elif defined UV_LDRAG
2693 & 'Spatially varying linear drag coefficient'
2694# elif defined UV_QDRAG
2695 & 'Spatially varying quadratic drag coefficient'
2696# endif
2697 is=LEN_TRIM(Coptions)+1
2698 Coptions(is:is+14)=' UV_DRAG_GRID,'
2699#endif
2700#ifdef UV_LDRAG
2701!
2702 IF (Master) WRITE (stdout,20) 'UV_LDRAG', &
2703 & 'Linear bottom stress'
2704 is=LEN_TRIM(Coptions)+1
2705 Coptions(is:is+10)=' UV_LDRAG,'
2706 ibbl=ibbl+1
2707#endif
2708#ifdef UV_LOGDRAG
2709!
2710 IF (Master) WRITE (stdout,20) 'UV_LOGDRAG', &
2711 & 'Logarithmic bottom stress'
2712 is=LEN_TRIM(Coptions)+1
2713 Coptions(is:is+12)=' UV_LOGDRAG,'
2714 ibbl=ibbl+1
2715#endif
2716#ifdef UV_QDRAG
2717!
2718 IF (Master) WRITE (stdout,20) 'UV_QDRAG', &
2719 & 'Quadratic bottom stress'
2720 is=LEN_TRIM(Coptions)+1
2721 Coptions(is:is+10)=' UV_QDRAG,'
2722 ibbl=ibbl+1
2723#endif
2724#if defined UV_TIDES
2725!
2726 IF (Master) WRITE (stdout,20) 'UV_TIDES', &
2727 & 'Add tidal currents to 2D momentum climatologies'
2728 is=LEN_TRIM(Coptions)+1
2729 Coptions(is:is+10)=' UV_TIDES,'
2730#endif
2731#ifdef UV_VIS2
2732!
2733 IF (Master) WRITE (stdout,20) 'UV_VIS2', &
2734 & 'Harmonic mixing of momentum'
2735 is=LEN_TRIM(Coptions)+1
2736 Coptions(is:is+9)=' UV_VIS2,'
2737#endif
2738#ifdef UV_VIS4
2739!
2740 IF (Master) WRITE (stdout,20) 'UV_VIS4', &
2741 & 'Biharmonic mixing of momentum'
2742 is=LEN_TRIM(Coptions)+1
2743 Coptions(is:is+9)=' UV_VIS4,'
2744#endif
2745#if defined UV_SMAGORINSKY && (defined UV_VIS2 || defined UV_VIS4)
2746!
2747 IF (Master) WRITE (stdout,20) 'UV_SMAGORINSKY', &
2748 & 'Smagorinksy-like time-dependent viscosity coefficients'
2749 is=LEN_TRIM(Coptions)+1
2750 Coptions(is:is+16)=' UV_SMAGORINSKY,'
2751#endif
2752#if defined VAR_RHO_2D && defined SOLVE3D
2753!
2754 IF (Master) WRITE (stdout,20) 'VAR_RHO_2D', &
2755 & 'Variable density barotropic mode'
2756 is=LEN_TRIM(Coptions)+1
2757 Coptions(is:is+12)=' VAR_RHO_2D,'
2758#endif
2759#if defined UV_VIS2 || defined UV_VIS4
2760# ifdef VISC_GRID
2761!
2762 IF (Master) WRITE (stdout,20) 'VISC_GRID', &
2763 & 'Horizontal viscosity coefficient scaled by grid size'
2764 is=LEN_TRIM(Coptions)+1
2765 Coptions(is:is+11)=' VISC_GRID,'
2766# endif
2767#endif
2768#if defined VCONVOLUTION && defined FOUR_DVAR && defined SOLVE3D
2769!
2770 IF (Master) WRITE (stdout,20) 'VCONVOLUTION', &
2771 & 'Include vertical correlations in convolutions'
2772 is=LEN_TRIM(Coptions)+1
2773 Coptions(is:is+14)=' VCONVOLUTION,'
2774#endif
2775#ifdef VERIFICATION
2776!
2777 IF (Master) WRITE (stdout,20) 'VERIFICATION', &
2778 & 'Proccess model solution at observation locations'
2779 is=LEN_TRIM(Coptions)+1
2780 Coptions(is:is+14)=' VERIFICATION,'
2781#endif
2782#if defined FLOATS && defined FLOAT_VWALK && defined SOLVE3D
2783# ifdef VWALK_FORWARD
2784!
2785 IF (Master) WRITE (stdout,20) 'VWALK_FORWARD', &
2786 & 'Lagrangian drifters, forward stepping random walk'
2787 is=LEN_TRIM(Coptions)+1
2788 Coptions(is:is+15)=' VWALK_FORWARD,'
2789# else
2790!
2791 IF (Master) WRITE (stdout,20) '!VWALK_FORWARD', &
2792 & 'Lagrangian drifters, predictor/corrector random walk'
2793 is=LEN_TRIM(Coptions)+1
2794 Coptions(is:is+16)=' !VWALK_FORWARD,'
2795# endif
2796#endif
2797#if defined VISC_3DCOEF
2798!
2799 IF (Master) WRITE (stdout,20) 'VISC_3DCOEF', &
2800 & 'Horizontal, time-dependent 3D viscosity coefficient'
2801 is=LEN_TRIM(Coptions)+1
2802 Coptions(is:is+13)=' VISC_3DCOEF,'
2803#endif
2804#ifdef W4DPSAS
2805!
2806 IF (Master) WRITE (stdout,20) 'W4DPSAS', &
2807 & 'Weak constraint 4D-PSAS data assimilation'
2808 is=LEN_TRIM(Coptions)+1
2809 Coptions(is:is+9)=' W4DPSAS,'
2810 idriver=idriver+1
2811#endif
2812#ifdef W4DPSAS_SENSITIVITY
2813!
2814 IF (Master) WRITE (stdout,20) 'W4DPSAS_SENSITIVITY', &
2815 & 'Weak constraint 4D-PSAS observation sensitivity'
2816 is=LEN_TRIM(Coptions)+1
2817 Coptions(is:is+21)=' W4DPSAS_SENSITIVITY,'
2818 idriver=idriver+1
2819#endif
2820#ifdef W4DVAR
2821!
2822 IF (Master) WRITE (stdout,20) 'W4DVAR', &
2823 & 'Weak constraint 4DVAR data assimilation'
2824 is=LEN_TRIM(Coptions)+1
2825 Coptions(is:is+8)=' W4DVAR,'
2826 idriver=idriver+1
2827#endif
2828#ifdef W4DVAR_SENSITIVITY
2829!
2830 IF (Master) WRITE (stdout,20) 'W4DVAR_SENSITIVITY', &
2831 & 'Weak constraint 4DVAR observation sensitivity'
2832 is=LEN_TRIM(Coptions)+1
2833 Coptions(is:is+20)=' W4DVAR_SENSITIVITY,'
2834 idriver=idriver+1
2835#endif
2836#ifdef WAV_COUPLING
2837!
2838 IF (Master) WRITE (stdout,20) 'WAV_COUPLING', &
2839 & 'Two-way wave-ocean models coupling'
2840 is=LEN_TRIM(Coptions)+1
2841 Coptions(is:is+13)=' WAV_COUPLING,'
2842#endif
2843#ifdef WEAK_CONSTRAINT
2844!
2845 IF (Master) WRITE (stdout,20) 'WEAK_CONSTRAINT', &
2846 & 'Activated weak constraint assimilation set-up'
2847 is=LEN_TRIM(Coptions)+1
2848 Coptions(is:is+17)=' WEAK_CONSTRAINT,'
2849#endif
2850#if defined WRITE_WATER && defined MASKING
2851!
2852 IF (Master) WRITE (stdout,20) 'WRITE_WATER', &
2853 & 'Writing data at water points only'
2854 is=LEN_TRIM(Coptions)+1
2855 Coptions(is:is+13)=' WRITE_WATER,'
2856#endif
2857#ifdef WET_DRY
2858!
2859 IF (Master) WRITE (stdout,20) 'WET_DRY', &
2860 & 'Wetting and drying activated'
2861 is=LEN_TRIM(Coptions)+1
2862 Coptions(is:is+9)=' WET_DRY,'
2863#endif
2864#ifdef WIND_MINUS_CURRENT && defined BULK_FLUXES && defined SOLVE3D
2865!
2866 IF (Master) WRITE (stdout,20) 'WIND_MINUS_CURRENT', &
2867 & 'Compute effective wind by removing surface ocean current'
2868 is=LEN_TRIM(Coptions)+1
2869 Coptions(is:is+20)=' WIND_MINUS_CURRENT,'
2870#endif
2871#ifdef WIND_WAVES
2872!
2873 IF (Master) WRITE (stdout,20) 'WIND_WAVES', &
2874 & 'Wind-induced wave data available'
2875 is=LEN_TRIM(Coptions)+1
2876 Coptions(is:is+11)=' WIND_WAVES,'
2877#endif
2878#if !(defined PJ_GRADPQ4 || defined PJ_GRADPQ2 || defined PJ_GRADP || \
2879 defined DJ_GRADPS) && defined WJ_GRADP
2880!
2881 IF (Master) WRITE (stdout,20) 'WJ_GRADP', &
2882 & 'Weighted Jacobians pressure gradient adjustment'
2883 is=LEN_TRIM(Coptions)+1
2884 Coptions(is:is+10)=' WJ_GRADP,'
2885#endif
2886#ifdef WRF_COUPLING
2887!
2888 IF (Master) WRITE (stdout,20) 'WRF_COUPLING', &
2889 & 'Atmosphere coupling with WRF'
2890 is=LEN_TRIM(Coptions)+1
2891 Coptions(is:is+14)=' WRF_COUPLING,'
2892 iatms=iatms+1
2893# ifdef WRF_TIMEAVG
2894!
2895 IF (Master) WRITE (stdout,20) 'WRF_TIMEAVG', &
2896 & 'WRF Exports time-averaged fields over the coupling interval'
2897 is=LEN_TRIM(Coptions)+1
2898 Coptions(is:is+13)=' WRF_TIMEAVG,'
2899# endif
2900#endif
2901#if defined WTYPE_GRID && \
2902 (defined LMD_SKPP || defined SOLAR_SOURCE) && \
2903 !defined ANA_WTYPE
2904!
2905 IF (Master) WRITE (stdout,20) 'WTYPE_GRID', &
2906 & 'Spatially varying Jerlov water type index'
2907 is=LEN_TRIM(Coptions)+1
2908 Coptions(is:is+12)=' WTYPE_GRID,'
2909#endif
2910#if defined ZETA_ELLIPTIC && defined BALANCE_OPERATOR && \
2911 defined FOUR_DVAR
2912!
2913 IF (Master) WRITE (stdout,20) 'ZETA_ELLIPTIC', &
2914 & 'Solving SSH elliptic equation in balance operator'
2915 is=LEN_TRIM(Coptions)+1
2916 Coptions(is:is+15)=' ZETA_ELLIPTIC,'
2917#endif
2918#ifdef ZOS_HSIG
2919!
2920 IF (Master) WRITE (stdout,20) 'ZOS_HSIG', &
2921 & 'Wave amplitude used for Zos calculation'
2922 is=LEN_TRIM(Coptions)+1
2923 Coptions(is:is+14)=' ZOS_HSIG,'
2924#endif
2925!
2926!-----------------------------------------------------------------------
2927! Stop if unsupported C-preprocessing options or report issues with
2928! particular options.
2929!-----------------------------------------------------------------------
2930!
2931 CALL checkadj
2932!
2933!-----------------------------------------------------------------------
2934! Check C-preprocessing options.
2935!-----------------------------------------------------------------------
2936!
2937! Stop if more than one vertical closure scheme is selected.
2938!
2939 IF (Master.and.(ivmix.gt.1)) THEN
2940 WRITE (stdout,30)
2941 30 FORMAT (/,' CHECKDEFS - only one vertical closure scheme', &
2942 & ' is allowed.')
2943 exit_flag=5
2944 END IF
2945!
2946! Stop if more that one bottom stress formulation is selected.
2947!
2948 IF (Master.and.(ibbl.gt.1)) THEN
2949 WRITE (stdout,40)
2950 40 FORMAT (/,' CHECKDEFS - only one bottom stress formulation is', &
2951 & ' allowed.')
2952 exit_flag=5
2953 END IF
2954!
2955! Stop if no bottom stress formulation is selected.
2956!
2957 IF (Master.and.(ibbl.eq.0)) THEN
2958 WRITE (stdout,50)
2959 50 FORMAT (/,' CHECKDEFS - no bottom stress formulation is', &
2960 & ' selected.')
2961 exit_flag=5
2962 END IF
2963!
2964! Stop if more than one biological module is selected.
2965!
2966 IF (Master.and.(ibiology.gt.1)) THEN
2967 WRITE (stdout,60)
2968 60 FORMAT (/,' CHECKDEFS - only one biology MODULE is allowed.')
2969 exit_flag=5
2970 END IF
2971!
2972! Stop if more that one model driver is selected.
2973!
2974 IF (Master.and.(idriver.gt.1)) THEN
2975 WRITE (stdout,70)
2976 70 FORMAT (/,' CHECKDEFS - only one model example is allowed.')
2977 exit_flag=5
2978 END IF
2979
2980#ifndef SOLVE3D
2981!
2982! Stop it explicit time-step splitting on shallow water set-up.
2983!
2984 DO ng=1,Ngrids
2985 IF (Master.and.(ndtfast(ng).gt.1)) THEN
2986 WRITE (stdout,80)
2987 80 FORMAT (/,' CHECKDEFS - explicit time-step splitting is ', &
2988 & ' inconsistent.', &
2989 & /,13x,'Change parameter NDTFAST to unity.')
2990 exit_flag=5
2991 END IF
2992 END DO
2993#endif
2994#if defined ADJOINT && defined _OPENMP
2995 IF (Master) THEN
2996 WRITE (stdout,90)
2997 90 FORMAT (/,' CHECKDEFS - cannot run the adjoint model in', &
2998 & ' shared-memory mode.')
2999 exit_flag=5
3000 END IF
3001#endif
3002#if defined NEMURO && defined HOLLING_GRAZING && defined IVLEV_EXPLICIT
3003!
3004! Stop if using more than one grazing algorithm.
3005!
3006 IF (Master) THEN
3007 WRITE (stdout,100)
3008 100 FORMAT (/,' CHECKDEFS - More than one grazing algorithm', &
3009 & ' selected for Nemuro model.')
3010 exit_flag=5
3011 END IF
3012#endif
3013#if defined FOUR_DVAR && defined VCONVOLUTION
3014# if defined IMPLICIT_VCONV && defined SPLINES_VCONV
3015!
3016! Stop if using more than vertical convolution algorithm.
3017!
3018 IF (Master) THEN
3019 WRITE (stdout,110)
3020 110 FORMAT (/,' CHECKDEFS - More than one vertical convolution', &
3021 & ' algorithm selected.')
3022 exit_flag=5
3023 END IF
3024# endif
3025#endif
3026#if defined MODEL_COUPLING && (defined ESMF_LIB && defined MCT_LIB)
3027 IF (Master) THEN
3028 WRITE (stdout,120)
3029 120 FORMAT (/,' CHECKDEFS - More than one coupling library', &
3030 & ' selected.')
3031 exit_flag=5
3032 END IF
3033#endif
3034#if defined POSTERIOR_ERROR_F && defined POSTERIOR_ERROR_I && \
3035 defined WEAK_CONSTRAINT
3036 IF (Master) THEN
3037 WRITE (stdout,130)
3038 130 FORMAT (/,' CHECKDEFS - Both initial and final posterior', &
3039 & ' error covariance analysis selected, choose one.')
3040 exit_flag=5
3041 END IF
3042#endif
3043#ifdef UV_ADV
3044!
3045! Stop if more than one advection scheme has been activated.
3046!
3047 IF (Master.and.(ivelHadv.gt.1)) THEN
3048 WRITE (stdout,140) 'horizontal','momentum','ivelHadv =',ivelHadv
3049 exit_flag=5
3050 END IF
3051# ifdef SOLVE3D
3052 IF (Master.and.(ivelVadv.gt.1)) THEN
3053 WRITE (stdout,140) 'vertical','momentum','ivelVadv =',ivelVadv
3054 exit_flag=5
3055 END IF
3056# endif
3057#endif
3058#ifdef SOLVE3D
3059 IF (Master.and.(itrcHadv.gt.1)) THEN
3060 WRITE (stdout,140) 'horizontal','tracers','itrcHadv =',itrcHadv
3061 exit_flag=5
3062 END IF
3063 IF (Master.and.(itrcVadv.gt.1)) THEN
3064 WRITE (stdout,140) 'vertical','tracers','itrcVadv =',itrcVadv
3065 exit_flag=5
3066 END IF
3067# if defined TANGENT || defined TL_IOMS || defined ADJOINT
3068 IF (Master.and.(itrcHadvtl.gt.1)) THEN
3069 WRITE (stdout,140) 'TL/AD horizontal','tracers','itrcHadvtl =', &
3070 & itrcHadvtl
3071 exit_flag=5
3072 END IF
3073 IF (Master.and.(itrcVadvtl.gt.1)) THEN
3074 WRITE (stdout,140) 'TL/AD vertical','tracers','itrcVadvtl =', &
3075 & itrcVadvtl
3076 exit_flag=5
3077 END IF
3078# endif
3079#endif
3080 140 FORMAT (/,' CHECKDEFS - only one ',a,' advection scheme', &
3081 & /,13x,'is allowed for ',a,', ',a,1x,i1)
3082#if defined SOLVE3D && defined NEMURO
3083# if !(defined IVLEV_EXPLICIT || defined HOLLING_GRAZING)
3084 IF (Master) THEN
3085 WRITE (stdout,150) uppercase('ivlev_explicit'), &
3086 & uppercase('holling_grazing')
3087 150 FORMAT (/,' CHECKDEFS - Need to choose a zooplankton grazing', &
3088 & ' option;',/,13x,'use either ',a,' or implicit ',a, &
3089 & '.',/,13x,'The default implicit IVLEV algorithm', &
3090 & ' does not work well yet.')
3091 exit_flag=5
3092 END IF
3093# endif
3094#endif
3095#ifdef NEARSHORE
3096!
3097! Stop if more that one radiation stress formulation is activated.
3098!
3099 IF (Master.and.(nearshore.gt.1)) THEN
3100 WRITE (stdout,160)
3101 160 FORMAT (/,' CHECKDEFS - only one radiation stress formulation' &
3102 & ' is allowed.')
3103 exit_flag=5
3104 END IF
3105#endif
3106#ifdef PARALLEL_IO
3107# if !(defined HDF5 || defined PNETCDF)
3108 IF (Master) THEN
3109 WRITE (stdout,170) uppercase('hdf5'), &
3110 & uppercase('pnetcdf')
3111 170 FORMAT (/,' CHECKDEFS - Need to activate either ',a,' or ',a, &
3112 & ' options',/,13x,'for parallel I/O processing.')
3113 exit_flag=5
3114 END IF
3115# endif
3116# if defined HDF5 && defined PNETCDF
3117 IF (Master) THEN
3118 WRITE (stdout,180) uppercase('hdf5'), &
3119 & uppercase('pnetcdf')
3120 180 FORMAT (/,' CHECKDEFS - Both ',a,' and ',a,' options', &
3121 & ' selected',/,13x,'for parallel I/O processing.', &
3122 & /,13x,'Choose only one.')
3123 exit_flag=5
3124 END IF
3125# endif
3126#endif
3127#if defined WRITE_WATER && defined WET_DRY
3128!
3129! Stop if writting only water points when wetting and drying is
3130! activated. This is not possible since the Land/Sea masking is
3131! time dependent.
3132!
3133 IF (Master) THEN
3134 WRITE (stdout,190) uppercase('write_water'), &
3135 & uppercase('wet_dry')
3136 190 FORMAT (/,' CHECKDEFS - cannot activate ',a,' and ',a, &
3137 & ' together',/,13x,'because of time dependent ', &
3138 & ' Land/Sea masking.')
3139 exit_flag=5
3140 END IF
3141#endif
3142#if ((defined AD_AVERAGES && defined ADJOINT) && defined AVERAGES) || \
3143 ((defined RP_AVERAGES && defined TL_IOMS) && defined AVERAGES) || \
3144 ((defined TL_AVERAGES && defined TANGENT) && defined AVERAGES) || \
3145 (defined AD_AVERAGES && defined TL_AVERAGES) || \
3146 (defined AD_AVERAGES && defined RP_AVERAGES) || \
3147 (defined RP_AVERAGES && defined TL_AVERAGES)
3148!
3149! Stop if activating more that one time-averaged option. This is not
3150! possible in the same executable because the same internal arrays
3151! are used to store the cummulative sums.
3152!
3153 IF (Master) THEN
3154 WRITE (stdout,200) uppercase('averages'), &
3155 & uppercase('ad_averages'), &
3156 & uppercase('rp_averages'), &
3157 & uppercase('tl_averages')
3158 200 FORMAT (/,' CHECKDEFS - cannot activate ',a,' ',a,' ',a, &
3159 & ' or',a,/,13x,'at the same time. Choose one!')
3160 exit_flag=5
3161 END IF
3162#endif
3163#if !defined DISTRIBUTE && defined TS_MPDATA
3164!
3165! Stop if activating MPDATA in serial with partitions or shared-
3166! memory.
3167!
3168 IF (Master) THEN
3169 DO ng=1,Ngrids
3170 IF (NtileX(ng)*NtileE(ng).gt.1) THEN
3171 WRITE (stdout,210) uppercase('ts_mpdata')
3172 exit_flag=5
3173 EXIT
3174 END IF
3175 END DO
3176 210 FORMAT (/,' CHECKDEFS - cannot activate option: ',a, &
3177 & /,13x,'in serial with partitions or shared-memory...', &
3178 & /,13x,'Use distributed-memory (MPI) in parallel runs.')
3179 END IF
3180#endif
3181#ifdef Q_PSOURCE
3182!
3183! Stop if activating obsolete mass point Sources/Sinks option. This
3184! capability is now activated with standard input switch "LwSrc".
3185!
3186 IF (Master) THEN
3187 WRITE (stdout,220) uppercase('q_psource'), 'LwSrc'
3188 220 FORMAT (/,' CHECKDEFS - cannot use obsolete option: ',a, &
3189 & /,13x,'Use instead standard input switch: ',a, &
3190 & /,13x,'Edit header file or build script!')
3191 exit_flag=5
3192 END IF
3193#endif
3194#if defined TS_PSOURCE && defined SOLVE3D
3195!
3196! Stop if activating obsolete tracers point Sources/Sinks option. This
3197! capability is now activated with standard input switch "LtracerSrc".
3198!
3199 IF (Master) THEN
3200 WRITE (stdout,230) uppercase('ts_psource'), 'LtracerSrc'
3201 230 FORMAT (/,' CHECKDEFS - cannot use obsolete option: ',a, &
3202 & /,13x,'Use instead standard input switch: ',a, &
3203 & /,13x,'Edit header file or build script!')
3204 exit_flag=5
3205 END IF
3206#endif
3207#ifdef UV_PSOURCE
3208!
3209! Stop if activating obsolete mass point Sources/Sinks option. This
3210! capability is now activated with standard input switch "LwSrc".
3211!
3212 IF (Master) THEN
3213 WRITE (stdout,240) uppercase('uv_psource'), 'LuvSrc'
3214 240 FORMAT (/,' CHECKDEFS - cannot use obsolete option: ',a, &
3215 & /,13x,'Use instead standard input switch: ',a, &
3216 & /,13x,'Edit header file or build script!')
3217 exit_flag=5
3218 END IF
3219#endif
3220#if defined SPLINES && defined SOLVE3D
3221!
3222! Stop if activating parabolic splines reconstruction with deprecated
3223! option. See https://www.myroms.org/projects/src/ticket/681 for more
3224! details.
3225!
3226 IF (Master) THEN
3227 WRITE (stdout,250) uppercase('splines'), &
3228 & 'https://www.myroms.org/projects/src/ticket/681'
3229 250 FORMAT (/,' CHECKDEFS - cannot use obsolete option: ',a, &
3230 & /,13x,'See following trac ticket for details: ', &
3231 & /,13x,a,/,13x,'please change header file accordingly.')
3232 exit_flag=5
3233 END IF
3234#endif
3235#if !defined DISTRIBUTE && defined NESTING
3236!
3237! Stop if activating nesting in serial with partitions or shared-
3238! memory.
3239!
3240 IF (Master) THEN
3241 DO ng=1,Ngrids
3242 IF (NtileX(ng)*NtileE(ng).gt.1) THEN
3243 WRITE (stdout,260) uppercase('nesting')
3244 exit_flag=5
3245 EXIT
3246 END IF
3247 END DO
3248 260 FORMAT (/,' CHECKDEFS - cannot activate option: ',a, &
3249 & /,13x,'in serial with partitions or shared-memory...', &
3250 & /,13x,'There bugs in shared-memory that need fixing.', &
3251 & /,13x,'Use distributed-memory (MPI) in parallel runs.')
3252 END IF
3253#endif
3254#ifdef ATM_COUPLING
3255!
3256! Stop if more than one atmosphere model is selected for coupling.
3257!
3258 IF (Master.and.(iatms.gt.1)) THEN
3259 WRITE (stdout,270)
3260 270 FORMAT (/,' CHECKDEFS - only one atmosphere model coupling', &
3261 & ' is allowed.')
3262 exit_flag=5
3263 END IF
3264#endif
3265
3266 RETURN
3267 END SUBROUTINE checkdefs