ROMS
Loading...
Searching...
No Matches
globaldefs.h
Go to the documentation of this file.
1/*
2** include file "globaldef.h"
3**
4** git $id$
5********************************************************** hernan g. arango ***
6** copyright(c) 2002-2025 the roms group alexander f. shchepetkin **
7** licensed under a mit/x style license **
8** see license_roms.md **
9*******************************************************************************
10** **
11** warning: this file contains a set of predetermined macro definitions **
12** ======= which are inserted into the individual files by c-preprocessor. **
13** it is strongly recommended to not modify any of the definitions below. **
14** **
15*******************************************************************************
16*/
17
18/*
19** set assumed-shape array switch. imported arrays with dummy
20** arguments that takes the shape of the actual argument passed
21** to it. If off, all the arrays are explicit-shape. in some
22** computer explicit-shape arrays slow down performacnce because
23** the arrays are copied when passed by arguments.
24*/
25
26#if !((defined G95 && defined I686) || defined UNICOS_SN)
27# define ASSUMED_SHAPE
28#endif
29
30/*
31** set switch for computer lacking 4-byte(32 bit) floating point
32** representation, like some crays. this becomes important when
33** defining attributes for 4-byte float variables in netcdf files.
34** we need to have the _fillvalue attribute of the same type as
35** as the netcdf variable.
36*/
37
38#if defined UNICOS_SN
39# define NO_4BYTE_REALS
40#endif
41
42/*
43** set internal distributed-memory switch.
44*/
45
46#if defined MPI
47# define DISTRIBUTE
48#endif
49
50/*
51** make sure that either "mpi_allgather", "mpi_allreduce" or lower
52** level point-to-point comunications send/recv are used in
53** "mp_collect". Use "mpi_allreduce" as default since it is more
54** efficient in mostly all computers.
55*/
56
57#ifdef DISTRIBUTE
58# if !(defined ASSEMBLE_ALLGATHER || \
59 defined assemble_allreduce || \
60 defined assemble_sendrecv)
61# define ASSEMBLE_ALLREDUCE
62# endif
63#endif
64
65/*
66** make sure that either "mpi_allgather" or "mpi_allreduce" are used
67** in "mp_boundary". Use "mpi_allreduce" as default since it is more
68** efficient in mostly all computers.
69*/
70
71#ifdef DISTRIBUTE
72# if !(defined BOUNDARY_ALLGATHER || \
73 defined boundary_allreduce)
74# define BOUNDARY_ALLREDUCE
75# endif
76#endif
77
78/*
79** make sure that either "mpi_allgather", "mpi_allreduce" or lower
80** level point-to-point comunications send/recv are used in
81** "mp_collect". Use "mpi_allreduce" as default since it is more
82** efficient in mostly all computers.
83*/
84
85#ifdef DISTRIBUTE
86# if !(defined COLLECT_ALLGATHER || \
87 defined collect_allreduce || \
88 defined collect_sendrecv)
89# define COLLECT_ALLREDUCE
90# endif
91#endif
92
93/*
94** make sure that either "mpi_allgather", "mpi_allreduce" or lower
95** level point-to-point comunications send/recv are used in
96** "mp_reduce". Use "mpi_allreduce" as default since it is more
97** efficient in mostly all computers.
98*/
99
100#ifdef DISTRIBUTE
101# if !(defined REDUCE_ALLGATHER || \
102 defined reduce_allreduce || \
103 defined reduce_sendrecv)
104# define REDUCE_ALLREDUCE
105# endif
106#endif
107
108/*
109** turn on/off time profiling.
110*/
111
112#define PROFILE
113
114/*
115** set default time-averaging filter for barotropic fields.
116**
117*/
118
119#ifdef SOLVE3D
120# undef COSINE2
121# define POWER_LAW
122#endif
123
124/*
125** turn on/off switch to include/disregard the difference between
126** rho0 and surface density in the computation of baroclinic pressure
127** term.
128*/
129
130#define RHO_SURF
131
132/*
133** turn on/off double precision arithmetic in numerical kernel (default)
134** and floating-point type variables and associated intrinsic functions.
135*/
136
137#ifdef SINGLE_PRECISION
138# ifdef OUT_DOUBLE
139# undef OUT_DOUBLE
140# endif
141# ifndef RST_SINGLE
142# define RST_SINGLE
143# endif
144#else
145# define DOUBLE_PRECISION
146#endif
147
148/*
149** turn on masking when wetting and drying is activated.
150*/
151
152#if !defined MASKING && defined WET_DRY
153# define MASKING
154#endif
155
156/*
157** If wetting and drying, activate limiting of bottom stress.
158*/
159
160#if !defined LIMIT_BSTRESS && defined WET_DRY
161# define LIMIT_BSTRESS
162#endif
163
164/*
165** define macro for the first 2d time-step.
166*/
167
168#ifdef SOLVE3D
169# define FIRST_2D_STEP iif(ng).eq.1
170# define FIRST_TIME_STEP iic(ng).eq.ntfirst(ng)
171#else
172# define FIRST_2D_STEP iic(ng).eq.ntfirst(ng)
173#endif
174
175/*
176** set switch for distributed-memory applications to gather and scatter
177** i/o data in 2d slabs. this is necessary on some platforms to conserve
178** memory.
179*/
180
181#if defined DISTRIBUTE
182# if defined UNICOS_SN
183# define INLINE_2DIO
184# endif
185#endif
186
187/*
188** remove openmp directives in serial and distributed memory
189** applications. this definition will be used in conjunction with
190** the pearl script "cpp_clean" to remove the full directive.
191*/
192
193#if !defined _OPENMP
194# define $OMP !
195#endif
196
197/*
198** set tile range for distributed- or shared-memory configurations.
199*/
200
201#ifdef DISTRIBUTE
202# define THREAD_RANGE MyRank,MyRank
203#else
204# define THREAD_RANGE 0,numthreads-1
205#endif
206
207/*
208** choice of double/single precision for real type variables and
209** associated intrinsic functions.
210*/
211
212#if (defined CRAY || defined CRAYT3E) && !defined CRAYX1
213# ifdef DOUBLE_PRECISION
214# undef DOUBLE_PRECISION
215# endif
216#endif
217
218#ifdef DOUBLE_PRECISION
219# ifdef DISTRIBUTE
220# define PDNAUPD pdnaupd
221# define PDNEUPD pdneupd
222# define PDSAUPD pdsaupd
223# define PDSEUPD pdseupd
224# define PDNORM2 pdnorm2
225# else
226# define DNAUPD dnaupd
227# define DNEUPD dneupd
228# define DSAUPD dsaupd
229# define DSEUPD dseupd
230# define DNRM2 dnrm2
231# endif
232# define DAXPY daxpy
233# define DSTEQR dsteqr
234#else
235# ifdef DISTRIBUTE
236# define PDNAUPD psnaupd
237# define PDNEUPD psneupd
238# define PDSAUPD pssaupd
239# define PDSEUPD psseupd
240# define PDNORM2 psnorm2
241# else
242# define DNAUPD snaupd
243# define DNEUPD sneupd
244# define DSAUPD ssaupd
245# define DSEUPD sseupd
246# define DNRM2 snrm2
247# endif
248# define DAXPY saxpy
249# define DSTEQR ssteqr
250#endif
251
252/*
253** single intrinsic fortran functions.
254*/
255
256#ifdef SINGLE_PRECISION
257# define DSIGN SIGN
258#endif
259
260/*
261** check for 4d-var deprecated cpp options.
262*/
263
264#ifdef IS4DVAR
265# ifndef I4DVAR
266# define I4DVAR
267# endif
268#endif
269
270#ifdef IS4DVAR_SENSITIVITY
271# ifndef I4DVAR_ANA_SENSITIVITY
272# define I4DVAR_ANA_SENSITIVITY
273# endif
274#endif
275
276#ifdef W4DPSAS
277# ifndef RBL4DVAR
278# define RBL4DVAR
279# endif
280#endif
281
282#ifdef W4DPSAS_SENSITIVITY
283# ifndef RBL4DVAR_ANA_SENSITIVITY
284# define RBL4DVAR_ANA_SENSITIVITY
285# endif
286#endif
287
288#ifdef W4DPSAS_FCT_SENSITIVITY
289# ifndef RBL4DVAR_FCT_SENSITIVITY
290# define RBL4DVAR_FCT_SENSITIVITY
291# endif
292#endif
293
294#ifdef W4DVAR
295# ifndef R4DVAR
296# define R4DVAR
297# endif
298#endif
299
300#ifdef W4DVAR_SENSITIVITY
301# ifndef R4DVAR_ANA_SENSITIVITY
302# define R4DVAR_ANA_SENSITIVITY
303# endif
304#endif
305
306/*
307** set multiple excutables split 4d-var.
308*/
309
310#if defined SPLIT_I4DVAR || \
311 defined split_rbl4dvar || \
312 defined split_r4dvar || \
313 defined split_sp4dvar
314# define SPLIT_4DVAR
315#endif
316
317/*
318** If split 4d-var, activate the unsplit option since both share
319** identical configuration to avoid too many directives changes.
320*/
321
322#if !defined I4DVAR && defined SPLIT_I4DVAR
323# define I4DVAR
324#endif
325
326#if !defined RBL4DVAR && defined SPLIT_RBL4DVAR
327# define RBL4DVAR
328#endif
329
330#if !defined R4DVAR && defined SPLIT_R4DVAR
331# define R4DVAR
332#endif
333
334#if !defined SP4DVAR && defined SPLIT_SP4DVAR
335# define SP4DVAR
336#endif
337
338
339/*
340** set 4d-var sensitivity switch.
341*/
342
343#if defined RBL4DVAR_ANA_SENSITIVITY || \
344 defined rbl4dvar_fct_sensitivity || \
345 defined r4dvar_ana_sensitivity
346# define SENSITIVITY_4DVAR
347#endif
348
349#if (defined RBL4DVAR && \
350 defined obs_space) || \
351 (defined split_rbl4dvar && \
352 defined obs_space)
353# undef OBS_SPACE
354#endif
355
356/*
357** set perturbation tangent linear, fine amplitude tangent linear,
358** and adjoint model switches.
359*/
360
361#if defined ARRAY_MODES || \
362 defined clipping || \
363 defined correlation || \
364 defined forcing_sv || \
365 defined ft_eigenmodes || \
366 defined hessian_fsv || \
367 defined hessian_so || \
368 defined hessian_sv || \
369 defined inner_product || \
370 defined i4dvar || \
371 defined i4dvar_ana_sensitivity || \
372 defined jedi || \
373 defined opt_perturbation || \
374 defined opt_observations || \
375 defined picard_test || \
376 defined rbl4dvar || \
377 defined rpm_driver || \
378 defined r4dvar || \
379 defined r_symmetry || \
380 defined sanity_check || \
381 defined sensitivity_4dvar || \
382 defined split_i4dvar || \
383 defined split_rbl4dvar || \
384 defined split_r4dvar || \
385 defined split_sp4dvar || \
386 defined sp4dvar || \
387 defined stochastic_opt || \
388 defined tlm_check || \
389 defined tlm_driver || \
390 defined tl_rbl4dvar || \
391 defined tl_r4dvar
392# define TANGENT
393#endif
394
395#if defined AD_SENSITIVITY || \
396 defined adm_driver || \
397 defined aft_eigenmodes || \
398 defined array_modes || \
399 defined clipping || \
400 defined correlation || \
401 defined forcing_sv || \
402 defined hessian_so || \
403 defined hessian_fsv || \
404 defined hessian_sv || \
405 defined inner_product || \
406 defined i4dvar || \
407 defined i4dvar_ana_sensitivity || \
408 defined jedi || \
409 defined opt_perturbation || \
410 defined opt_observations || \
411 defined rbl4dvar || \
412 defined r4dvar || \
413 defined r_symmetry || \
414 defined sanity_check || \
415 defined sensitivity_4dvar || \
416 defined so_semi || \
417 defined split_i4dvar || \
418 defined split_rbl4dvar || \
419 defined split_r4dvar || \
420 defined split_sp4dvar || \
421 defined sp4dvar || \
422 defined stochastic_opt || \
423 defined tlm_check || \
424 defined tl_rbl4dvar || \
425 defined tl_r4dvar
426# define ADJOINT
427#endif
428
429#if defined ARRAY_MODES || \
430 defined clipping || \
431 defined picard_test || \
432 defined rpm_driver || \
433 defined tl_r4dvar || \
434 defined r4dvar || \
435 defined r4dvar_ana_sensitivity
436# define TL_IOMS
437#endif
438
439#if !defined ANA_PERTURB && \
440 (defined correlation || \
441 defined sanity_check || \
442 defined r_symmetry)
443# define ANA_PERTURB
444#endif
445
446/*
447** turn off nonlinear model switch.
448*/
449
450#define NONLINEAR
451#if defined AD_SENSITIVITY || \
452 defined aft_eigenmodes || \
453 defined forcing_sv || \
454 defined ft_eigenmodes || \
455 defined hessian_fsv || \
456 defined hessian_so || \
457 defined hessian_sv || \
458 defined inner_product || \
459 defined opt_observations || \
460 defined opt_perturbation || \
461 defined picard_test || \
462 defined sanity_check || \
463 defined so_semi || \
464 defined stochastic_opt
465# undef NONLINEAR
466#endif
467
468/*
469** activate switch for full adjoint output solution. due to the
470** predictor/corrector and multiple time level schemes, pieces of
471** the adjoint solution are in two-time levels and need to be added
472** in the "_sol" arrays for output purposes.
473*/
474
475#ifdef ADJOINT
476# if !defined AD_OUTPUT_STATE && \
477 (defined stochastic_opt && !defined STOCH_OPT_WHITE)
478# define AD_OUTPUT_STATE
479# endif
480#endif
481
482/*
483** activate bacroclinic pressure gradient response due to the
484** perturbation of free-surface in the presence of stratification
485** and bathymetry. this option does not pass the sanity check
486** in adjoint and tangent linear applications, so we use not_yet
487** in tlm, rpm, and adm kernels.
488*/
489
490#ifdef SOLVE3D
491# define VAR_RHO_2D
492#endif
493
494/*
495** set output index for multi-time levels variables.
496*/
497
498#ifdef SOLVE3D
499# if defined TANGENT || defined TL_IOMS
500# define TKOUT kstp(ng)
501# define KOUT kstp(ng)
502# define NOUT nrhs(ng)
503# else
504# define KOUT kstp(ng)
505# define NOUT nrhs(ng)
506# endif
507# ifdef ICE_MODEL
508# define IOUT linew(ng)
509# define IUOUT liunw(ng)
510# define IEOUT lienw(ng)
511# endif
512#else
513# if defined TANGENT || defined TL_IOMS
514# define TKOUT kstp(ng)
515# endif
516# define KOUT knew(ng)
517#endif
518
519/*
520** set internal switch for the need of a propagator driver.
521*/
522
523#if defined AFT_EIGENMODES || \
524 defined ensemble || \
525 defined forcing_sv || \
526 defined ft_eigenmodes || \
527 defined hessian_fsv || \
528 defined hessian_so || \
529 defined hessian_sv || \
530 defined opt_perturbation || \
531 defined pseudospectra || \
532 defined so_semi || \
533 defined so_trace || \
534 defined stochastic_opt
535# define PROPAGATOR
536#endif
537
538/*
539** activate processing of forward vertical mixing.
540**
541*/
542
543#if !defined FORWARD_MIXING && \
544 (defined tangent || \
545 defined tl_ioms || \
546 defined adjoint) && \
547 (defined lmd_mixing || \
548 defined gls_mixing || \
549 defined my25_mixing)
550# if !defined JEDI
551 define forward_mixing
552# endif
553#endif
554
555/*
556** set internal switches for all the 4dvar schemes.
557*/
558
559#if !defined WEAK_CONSTRAINT && \
560 (defined array_modes || \
561 defined clipping || \
562 defined sp4dvar || \
563 defined rbl4dvar || \
564 defined rbl4dvar_fct_sensitivity || \
565 defined rbl4dvar_ana_sensitivity || \
566 defined r4dvar || \
567 defined r4dvar_ana_sensitivity || \
568 defined r_symmetry || \
569 defined split_rbl4dvar || \
570 defined split_r4dvar || \
571 defined split_sp4dvar || \
572 defined sp4dvar || \
573 defined tl_rbl4dvar || \
574 defined tl_r4dvar)
575# define WEAK_CONSTRAINT
576#endif
577
578#if !defined WEAK_CONSTRAINT && defined RPM_RELAXATION
579# undef RPM_RELAXATION
580#endif
581
582#if defined CORRELATION || \
583 defined hessian_fsv || \
584 defined hessian_so || \
585 defined hessian_sv || \
586 defined i4dvar || \
587 defined i4dvar_ana_sensitivity || \
588 defined opt_observations || \
589 defined tlm_check || \
590 defined weak_constraint
591# define FOUR_DVAR
592#endif
593
594#if defined I4DVAR
595# define BACKGROUND
596#endif
597
598#if !(defined RBL4DVAR || defined R4DVAR) && defined POSTERIOR_EOFS
599# undef POSTERIOR_EOFS
600#endif
601
602#if !(defined RBL4DVAR || defined R4DVAR) && defined POSTERIOR_ERROR_F
603# undef POSTERIOR_ERROR_F
604#endif
605
606#if !(defined RBL4DVAR || defined R4DVAR) && defined POSTERIOR_ERROR_I
607# undef POSTERIOR_ERROR_I
608#endif
609
610#if !(defined WEAK_CONSTRAINT || defined I4DVAR_ANA_SENSITIVITY) && \
611 defined obs_impact
612# undef OBS_IMPACT
613#endif
614
615#if !(defined OBS_IMPACT && \
616 (defined i4dvar_ana_sensitivity || \
617 defined rbl4dvar_ana_sensitivity || \
618 defined rbl4dvar_fct_sensitivity || \
619 defined r4dvar_ana_sensitivity))
620# undef IMPACT_INNER
621#endif
622
623/*
624** activate internal switch to process 4dvar observations.
625*/
626
627#if defined ARRAY_MODES || \
628 defined clipping || \
629 defined i4dvar || \
630 defined i4dvar_ana_sensitivity || \
631 defined rbl4dvar || \
632 defined r4dvar || \
633 defined sensitivity_4dvar || \
634 defined split_i4dvar || \
635 defined split_rbl4dvar || \
636 defined split_r4dvar || \
637 defined split_sp4dvar || \
638 defined sp4dvar || \
639 defined tlm_check || \
640 defined tl_rbl4dvar || \
641 defined tl_r4dvar || \
642 defined verification
643# define OBSERVATIONS
644#endif
645
646#if defined ARRAY_MODES || \
647 defined clipping || \
648 defined i4dvar || \
649 defined i4dvar_ana_sensitivity || \
650 defined rbl4dvar || \
651 defined r4dvar || \
652 defined r_symmetry || \
653 defined sensitivity_4dvar || \
654 defined sp4dvar || \
655 defined tlm_check || \
656 defined tl_rbl4dvar || \
657 defined tl_r4dvar
658# define TLM_OBS
659#endif
660
661/*
662** activate reading and writting of the basic sate.
663*/
664
665#if !defined FORWARD_READ && \
666 (defined array_modes || \
667 defined clipping || \
668 defined i4dvar || \
669 defined i4dvar_ana_sensitivity || \
670 defined propagator || \
671 defined rbl4dvar || \
672 defined r4dvar || \
673 defined sensitivity_4dvar || \
674 defined split_i4dvar || \
675 defined split_rbl4dvar || \
676 defined split_r4dvar || \
677 defined split_sp4dvar || \
678 defined sp4dvar || \
679 defined tl_rbl4dvar || \
680 defined tl_r4dvar)
681# define FORWARD_READ
682#endif
683
684#if !defined FORWARD_WRITE && \
685 (defined array_modes || \
686 defined clipping || \
687 defined i4dvar || \
688 defined i4dvar_ana_sensitivity || \
689 defined jedi || \
690 defined rbl4dvar || \
691 defined r4dvar || \
692 defined sensitivity_4dvar || \
693 defined split_i4dvar || \
694 defined split_rbl4dvar || \
695 defined split_r4dvar || \
696 defined split_sp4dvar || \
697 defined sp4dvar || \
698 defined tl_rbl4dvar || \
699 defined tl_r4dvar)
700# define FORWARD_WRITE
701#endif
702
703/*
704** set internal weak constraint switches.
705*/
706
707#ifdef WEAK_CONSTRAINT
708# define IMPULSE
709#endif
710
711/*
712** set in internal switch to activate computation of nonlinear
713** equation of state expnasion polynomial t-derivatives.
714*/
715
716#if defined ADJOINT || \
717 defined bulk_fluxes || \
718 defined lmd_bkpp || \
719 defined lmd_skpp || \
720 defined tangent || \
721 defined tl_ioms
722# define EOS_TDERIVATIVE
723#endif
724
725/*
726** If splines, deactivate horizontal and vertical smoothing of
727** richardson number horizontally and/or vertically.
728*/
729
730#ifdef RI_SPLINES
731# if defined LMD_MIXING
732# undef RI_HORAVG
733# undef RI_VERAVG
734# endif
735#endif
736
737/*
738** activate internal switch for the computation of the brunt-vaisala
739** frequency.
740*/
741
742#if defined BVF_MIXING || \
743 defined gls_mixing || \
744 defined lmd_mixing || \
745 defined lmd_skpp || \
746 defined lmd_bkpp || \
747 defined my25_mixing
748# define BV_FREQUENCY
749#endif
750
751/*
752** activate internal switch for bottom boundary layer closure.
753*/
754
755#if defined MB_BBL || \
756 defined sg_bbl || \
757 defined ssw_bbl
758# define BBL_MODEL
759#endif
760
761/*
762** check if spatially varying bottom friction parameters are needed.
763*/
764
765#if defined UV_DRAG_GRID && \
766 !(defined BBL_MODEL || \
767 defined sediment || \
768 defined uv_logdrag || \
769 defined uv_ldrag || \
770 defined uv_qdrag)
771# undef UV_DRAG_GRID
772#endif
773
774#if defined ANA_DRAG && \
775 !defined UV_DRAG_GRID
776# undef ANA_DRAG
777#endif
778
779/*
780** activate internal option for seaice model.
781*/
782
783#if defined ICE_MODEL
784# define SEAICE
785# if defined ICE_ADVECT
786# define ICE_SMOLAR
787# endif
788# if defined ICE_MOMENTUM
789# define ICE_EVP
790# endif
791# if defined ICE_THERMO
792# define ICE_MK
793# endif
794#endif
795
796/*
797** activate internal biology option when using any type of biological
798** module.
799*/
800
801#if defined BIO_FENNEL || \
802 defined ecosim || \
803 defined hypoxia_srm || \
804 defined nemuro || \
805 defined npzd_franks || \
806 defined npzd_iron || \
807 defined npzd_powell || \
808 defined red_tide
809# define BIOLOGY
810#endif
811
812/*
813** activate internal option for biological float behavior.
814*/
815
816#if defined FLOATS && \
817 defined float_oyster
818# define FLOAT_BIOLOGY
819#endif
820
821/*
822** define internal option to couple to other models.
823**
824*/
825
826#if defined COAMPS_COUPLING || \
827 defined regcm_coupling || \
828 defined wrf_coupling
829# define ATM_COUPLING
830# ifndef FRC_COUPLING
831# define FRC_COUPLING
832# endif
833#endif
834
835#if defined CICE_COUPLING
836# define ICE_COUPLING
837#endif
838
839#if defined REFDIF_COUPLING || \
840 defined swan_coupling || \
841 defined wam_coupling
842# define WAV_COUPLING
843#endif
844
845#if defined ATM_COUPLING || \
846 defined cmeps || \
847 defined data_coupling || \
848 defined ice_coupling || \
849 defined wav_coupling
850# define MODEL_COUPLING
851#endif
852
853#if defined MODEL_COUPLING && \
854 defined esmf_lib && \
855 !defined CMEPS
856# define REGRESS_STARTCLOCK
857# define ESM_SETRUNCLOCK
858#endif
859
860/*
861** define internal option for waves effect on currents.
862*/
863
864#if defined WEC_VF
865# define WEC
866#endif
867
868#if defined SSW_LOGINT && defined WEC
869# define SSW_LOGINT_STOKES
870#endif
871
872#if defined WEC
873# if defined SWAN_COUPLING
874# define SPECTRUM_STOKES
875# else
876# define BULK_STOKES
877# endif
878#endif
879
880/*
881** define internal option to process wave data.
882*/
883
884#if (defined ROLLER_SVENDSEN || defined ROLLER_MONO || \
885 defined roller_reniers) && defined wec
886# define WEC_ROLLER
887#endif
888
889#if defined BBL_MODEL || \
890 defined wav_coupling || \
891 defined wec
892# define WAVES_DIR
893# define WAVES_DIRP
894#endif
895
896#if defined BBL_MODEL && \
897 !(defined SSW_CALC_UB || \
898 defined mb_calc_ub || \
899 defined sg_calc_ub)
900# define WAVES_UB
901#endif
902
903#if (defined BBL_MODEL && \
904 !defined WAVES_UB) || \
905 defined bedload_soulsby || \
906 defined bedload_vandera || \
907 defined coare_taylor_yelland || \
908 defined drennan || \
909 defined wav_coupling || \
910 defined wec || \
911 defined zos_hsig
912# define WAVES_HEIGHT
913#endif
914
915#if defined BEDLOAD_SOULSBY || \
916 defined bedload_vandera || \
917 defined wav_coupling || \
918 defined wec
919# define WAVES_LENGTH
920#endif
921
922#if (!defined DEEPWATER_WAVES && \
923 (defined coare_taylor_yelland || \
924 defined coare_oost || \
925 defined drennan))
926# define WAVES_LENGTHP
927#endif
928
929#if defined COARE_TAYLOR_YELLAND || \
930 defined coare_oost || \
931 defined drennan || \
932 defined wec_vf || \
933 defined wav_coupling
934# define WAVES_TOP_PERIOD
935#endif
936
937#if defined BBL_MODEL || \
938 defined wav_coupling
939# define WAVES_BOT_PERIOD
940#endif
941
942#if (defined TKE_WAVEDISS || defined WEC_VF) && \
943 (!defined WDISS_THORGUZA && \
944 !defined WDISS_CHURTHOR && \
945 !defined WDISS_WAVEMOD && \
946 !defined WDISS_INWAVE)
947# define WAVES_DISS
948#endif
949
950#if defined WAVES_BOT_PERIOD || \
951 defined waves_dir || \
952 defined waves_dirp || \
953 defined waves_dspr || \
954 defined waves_length || \
955 defined waves_lengthp || \
956 defined waves_height || \
957 defined waves_top_period
958# define WAVES_OUTPUT
959#endif
960
961#if !defined WAV_COUPLING && \
962 ((defined bulk_fluxes && \
963 defined coare_taylor_yelland) || \
964 (defined bulk_fluxes && \
965 defined coare_oost) || \
966 defined tke_wavediss || \
967 defined wave_diss || \
968 defined waves_dir || \
969 defined waves_bot_period || \
970 defined waves_height || \
971 defined waves_length || \
972 defined waves_lengthp || \
973 defined waves_top_period || \
974 defined wec_roller)
975# define WAVE_DATA
976#endif
977
978/*
979** define internal option for bedload treatment.
980*/
981
982#if defined BEDLOAD_MPM || \
983 defined bedload_soulsby || \
984 defined bedload_vandera
985# define BEDLOAD
986#endif
987
988/*
989** define internal flag indicating processing of input forcing
990** netcdf file.
991*/
992
993#ifdef SOLVE3D
994# ifdef BULK_FLUXES
995# ifdef ANA_SMFLUX
996# undef ANA_SMFLUX
997# endif
998# ifdef ANA_STFLUX
999# undef ANA_STFLUX
1000# endif
1001# endif
1002# if !defined ANA_BTFLUX || \
1003 (!defined FRC_COUPLING && \
1004 !defined BULK_FLUXES && !defined ANA_SMFLUX) || \
1005 (!defined FRC_COUPLING && \
1006 !defined BULK_FLUXES && !defined ANA_STFLUX) || \
1007 ( defined biology && !defined ANA_SPFLUX) || \
1008 ( defined biology && !defined ANA_BPFLUX) || \
1009 (!defined FRC_COUPLING && \
1010 defined bulk_fluxes && !defined LONGWAVE) || \
1011 (!defined FRC_COUPLING && \
1012 defined bulk_fluxes && !defined ANA_PAIR) || \
1013 (!defined FRC_COUPLING && \
1014 defined bulk_fluxes && !defined ANA_TAIR) || \
1015 (!defined FRC_COUPLING && \
1016 defined bulk_fluxes && !defined ANA_HUMIDITY) || \
1017 (!defined FRC_COUPLING && \
1018 defined bulk_fluxes && !defined ANA_CLOUD) || \
1019 (!defined FRC_COUPLING && \
1020 defined bulk_fluxes && !defined ANA_RAIN) || \
1021 (!defined FRC_COUPLING && \
1022 defined bulk_fluxes && !defined ANA_WINDS) || \
1023 (!defined FRC_COUPLING && \
1024 defined bulk_fluxes && !defined ANA_SRFLUX) || \
1025 (!defined FRC_COUPLING && \
1026 defined lmd_skpp && !defined ANA_SRFLUX) || \
1027 (!defined FRC_COUPLING && \
1028 defined red_tide) || \
1029 (!defined ANA_BSFLUX && defined SALINITY) || \
1030 (!defined FRC_COUPLING && \
1031 defined salinity && !defined ANA_SSFLUX && \
1032 (defined bulk_fluxes && !defined EMINUSP)) || \
1033 (!defined FRC_COUPLING && \
1034 defined solar_source && !defined ANA_SRFLUX) || \
1035 ( defined bbl_model && (!defined ANA_WWAVE && \
1036 !defined WAV_COUPLING)) || \
1037 ( defined sediment && !defined ANA_SPFLUX) || \
1038 ( defined sediment && !defined ANA_BPFLUX) || \
1039 ( defined wave_data && (!defined ANA_WWAVE && \
1040 !defined WAV_COUPLING))
1041# define FRC_FILE
1042# endif
1043#else
1044# if(!defined FRC_COUPLING && !defined ANA_SMFLUX)
1045# define FRC_FILE
1046# endif
1047#endif
1048
1049/*
1050** check analytical initial conditions options.
1051*/
1052
1053#if defined ANA_BIOLOGY && \
1054 !defined BIOLOGY
1055# undef ANA_BIOLOGY
1056#endif
1057
1058#if defined ANA_PASSIVE && \
1059 !defined T_PASSIVE
1060# undef ANA_PASSIVE
1061#endif
1062
1063#if defined ANA_SEDIMENT && \
1064 !(defined SEDIMENT || \
1065 defined bbl_model)
1066# undef ANA_SEDIMENT
1067#endif
1068
1069#if !defined ANA_INITIAL || \
1070 (defined biology && \
1071 !defined ANA_BIOLOGY) || \
1072 (defined t_passive && \
1073 !defined ANA_PASSIVE) || \
1074 (defined sediment && \
1075 !defined ANA_SEDIMENT) || \
1076 (defined bbl_model && \
1077 !defined ANA_SEDIMENT)
1078# define INI_FILE
1079#endif
1080
1081/*
1082** define internal shortwave radiation option. undefine analytical
1083** shortwave option if not needed.
1084*/
1085
1086#if defined BIOLOGY || \
1087 defined bulk_fluxes || \
1088 defined lmd_skpp || \
1089 defined solar_source
1090# define SHORTWAVE
1091#endif
1092
1093#if !defined SHORTWAVE && \
1094 defined ana_srflux
1095# undef ANA_SRFLUX
1096#endif
1097
1098#if !defined SHORTWAVE && \
1099 defined diurnal_srflux
1100# undef DIURNAL_SRFLUX
1101#endif
1102
1103/*
1104** define internal clouds option. undefine analytical
1105** shortwave option if not needed.
1106*/
1107
1108#if (defined ANA_SRFLUX && \
1109 defined albedo) || \
1110 (defined bulk_fluxes && \
1111 defined longwave) || \
1112 defined ecosim
1113# define CLOUDS
1114#endif
1115
1116#if !defined CLOUDS && \
1117 defined ana_cloud
1118# undef ANA_CLOUD
1119#endif
1120
1121/*
1122** check if it is meaningful to write out momentum/tracer diagnostics
1123** and activate internal diagnostics option.
1124*/
1125
1126#if !defined SOLVE3D || \
1127 defined ts_fixed
1128# if defined DIAGNOSTICS_TS
1129# undef DIAGNOSTICS_TS
1130# endif
1131#endif
1132
1133#if defined DIAGNOSTICS_BIO && \
1134 !(defined BIO_FENNEL || \
1135 defined ecosim || \
1136 defined hypoxia_srm)
1137# undef DIAGNOSTICS_BIO
1138#endif
1139
1140#if defined DIAGNOSTICS_BIO || \
1141 defined diagnostics_ts || \
1142 defined diagnostics_uv
1143# define DIAGNOSTICS
1144#endif
1145
1146/*
1147** check if any analytical expression is defined.
1148*/
1149
1150#if defined ANA_BIOLOGY || \
1151 defined ana_bpflux || \
1152 defined ana_bsflux || \
1153 defined ana_btflux || \
1154 defined ana_cloud || \
1155 defined ana_diag || \
1156 defined ana_dqdsst || \
1157 defined ana_drag || \
1158 defined ana_fsobc || \
1159 defined ana_grid || \
1160 defined ana_humidity || \
1161 defined ana_initial || \
1162 defined ana_m2clima || \
1163 defined ana_m2obc || \
1164 defined ana_m3clima || \
1165 defined ana_m3obc || \
1166 defined ana_mask || \
1167 defined ana_nudgcoef || \
1168 defined ana_pair || \
1169 defined ana_passive || \
1170 defined ana_perturb || \
1171 defined ana_psource || \
1172 defined ana_rain || \
1173 defined ana_respiration || \
1174 defined ana_sediment || \
1175 defined ana_smflux || \
1176 defined ana_spflux || \
1177 defined ana_spinning || \
1178 defined ana_sponge || \
1179 defined ana_srflux || \
1180 defined ana_ssflux || \
1181 defined ana_ssh || \
1182 defined ana_sss || \
1183 defined ana_sst || \
1184 defined ana_stflux || \
1185 defined ana_tair || \
1186 defined ana_tclima || \
1187 defined ana_tobc || \
1188 defined ana_vmix || \
1189 defined ana_winds || \
1190 defined ana_wwave || \
1191 defined diff_grid || \
1192 defined visc_grid
1193# define ANALYTICAL
1194#endif
1195
1196/*
1197** If splitting 3rd-order upstream bias horizontal advection of
1198** momentum, activate other needed flags.
1199*/
1200
1201#ifdef UV_U3ADV_SPLIT
1202# define VISC_3DCOEF
1203# ifndef UV_C4ADVECTION
1204# define UV_C4ADVECTION
1205# endif
1206# ifndef UV_VIS4
1207# define UV_VIS4
1208# endif
1209# ifdef UV_VIS2
1210# undef UV_VIS2
1211# endif
1212# ifdef UV_SMAGORINSKY
1213# undef UV_SMAGORINSKY
1214# endif
1215#endif
1216
1217/*
1218** define internal switch for smagorinsky-like mixing.
1219*/
1220
1221#if !defined DIFF_3DCOEF && defined TS_SMAGORINSKY
1222# define DIFF_3DCOEF
1223#endif
1224#if !defined VISC_3DCOEF && defined UV_SMAGORINSKY
1225# define VISC_3DCOEF
1226#endif
subroutine ana_grid(ng, tile, model)
Definition ana_grid.h:3
subroutine initial
Definition initial.F:3
subroutine lmd_bkpp(ng, tile)
Definition lmd_bkpp.F:45
subroutine lmd_skpp(ng, tile)
Definition lmd_skpp.F:45
subroutine memory
Definition memory.F:3
subroutine output(ng)
Definition output.F:4