1 | CBOP
|
---|
2 | C !ROUTINE: CPP_EEOPTIONS.h
|
---|
3 | C !INTERFACE:
|
---|
4 | C include "CPP_EEOPTIONS.h"
|
---|
5 | C
|
---|
6 | C !DESCRIPTION:
|
---|
7 | C *==========================================================*
|
---|
8 | C | CPP\_EEOPTIONS.h |
|
---|
9 | C *==========================================================*
|
---|
10 | C | C preprocessor "execution environment" supporting |
|
---|
11 | C | flags. Use this file to set flags controlling the |
|
---|
12 | C | execution environment in which a model runs - as opposed |
|
---|
13 | C | to the dynamical problem the model solves. |
|
---|
14 | C | Note: Many options are implemented with both compile time|
|
---|
15 | C | and run-time switches. This allows options to be |
|
---|
16 | C | removed altogether, made optional at run-time or |
|
---|
17 | C | to be permanently enabled. This convention helps |
|
---|
18 | C | with the data-dependence analysis performed by the |
|
---|
19 | C | adjoint model compiler. This data dependency |
|
---|
20 | C | analysis can be upset by runtime switches that it |
|
---|
21 | C | is unable to recoginise as being fixed for the |
|
---|
22 | C | duration of an integration. |
|
---|
23 | C | A reasonable way to use these flags is to |
|
---|
24 | C | set all options as selectable at runtime but then |
|
---|
25 | C | once an experimental configuration has been |
|
---|
26 | C | identified, rebuild the code with the appropriate |
|
---|
27 | C | options set at compile time. |
|
---|
28 | C *==========================================================*
|
---|
29 | CEOP
|
---|
30 |
|
---|
31 | #ifndef _CPP_EEOPTIONS_H_
|
---|
32 | #define _CPP_EEOPTIONS_H_
|
---|
33 |
|
---|
34 | C In general the following convention applies:
|
---|
35 | C ALLOW - indicates an feature will be included but it may
|
---|
36 | C CAN have a run-time flag to allow it to be switched
|
---|
37 | C on and off.
|
---|
38 | C If ALLOW or CAN directives are "undef'd" this generally
|
---|
39 | C means that the feature will not be available i.e. it
|
---|
40 | C will not be included in the compiled code and so no
|
---|
41 | C run-time option to use the feature will be available.
|
---|
42 | C
|
---|
43 | C ALWAYS - indicates the choice will be fixed at compile time
|
---|
44 | C so no run-time option will be present
|
---|
45 |
|
---|
46 | C=== Macro related options ===
|
---|
47 | C-- Control storage of floating point operands
|
---|
48 | C On many systems it improves performance only to use
|
---|
49 | C 8-byte precision for time stepped variables.
|
---|
50 | C Constant in time terms ( geometric factors etc.. )
|
---|
51 | C can use 4-byte precision, reducing memory utilisation and
|
---|
52 | C boosting performance because of a smaller working set size.
|
---|
53 | C However, on vector CRAY systems this degrades performance.
|
---|
54 | C Enable to switch REAL4_IS_SLOW from genmake2 (with LET_RS_BE_REAL4):
|
---|
55 | #ifdef LET_RS_BE_REAL4
|
---|
56 | #undef REAL4_IS_SLOW
|
---|
57 | #else /* LET_RS_BE_REAL4 */
|
---|
58 | #define REAL4_IS_SLOW
|
---|
59 | #endif /* LET_RS_BE_REAL4 */
|
---|
60 |
|
---|
61 | C-- Control use of "double" precision constants.
|
---|
62 | C Use D0 where it means REAL*8 but not where it means REAL*16
|
---|
63 | #define D0 d0
|
---|
64 |
|
---|
65 | C-- Enable some old macro conventions for backward compatibility
|
---|
66 | #undef USE_OLD_MACROS_R4R8toRSRL
|
---|
67 |
|
---|
68 | C=== IO related options ===
|
---|
69 | C-- Flag used to indicate whether Fortran formatted write
|
---|
70 | C and read are threadsafe. On SGI the routines can be thread
|
---|
71 | C safe, on Sun it is not possible - if you are unsure then
|
---|
72 | C undef this option.
|
---|
73 | #undef FMTFTN_IO_THREAD_SAFE
|
---|
74 |
|
---|
75 | C-- Flag used to indicate whether Binary write to Local file (i.e.,
|
---|
76 | C a different file for each tile) and read are thread-safe.
|
---|
77 | #undef LOCBIN_IO_THREAD_SAFE
|
---|
78 |
|
---|
79 | C-- Flag to turn off the writing of error message to ioUnit zero
|
---|
80 | #undef DISABLE_WRITE_TO_UNIT_ZERO
|
---|
81 |
|
---|
82 | C-- Alternative formulation of BYTESWAP, faster than
|
---|
83 | C compiler flag -byteswapio on the Altix.
|
---|
84 | #undef FAST_BYTESWAP
|
---|
85 |
|
---|
86 | C-- Flag to turn on old default of opening scratch files with the
|
---|
87 | C STATUS='SCRATCH' option. This method, while perfectly FORTRAN-standard,
|
---|
88 | C caused filename conflicts on some multi-node/multi-processor platforms
|
---|
89 | C in the past and has been replace by something (hopefully) more robust.
|
---|
90 | #undef USE_FORTRAN_SCRATCH_FILES
|
---|
91 |
|
---|
92 | C-- Flag defined for eeboot_minimal.F, eeset_parms.F and open_copy_data_file.F
|
---|
93 | C to write STDOUT, STDERR and scratch files from process 0 only.
|
---|
94 | C WARNING: to use only when absolutely confident that the setup is working
|
---|
95 | C since any message (error/warning/print) from any proc <> 0 will be lost.
|
---|
96 | #undef SINGLE_DISK_IO
|
---|
97 |
|
---|
98 | C=== MPI, EXCH and GLOBAL_SUM related options ===
|
---|
99 | C-- Flag turns off MPI_SEND ready_to_receive polling in the
|
---|
100 | C gather_* subroutines to speed up integrations.
|
---|
101 | #undef DISABLE_MPI_READY_TO_RECEIVE
|
---|
102 |
|
---|
103 | C-- Control MPI based parallel processing
|
---|
104 | CXXX We no longer select the use of MPI via this file (CPP_EEOPTIONS.h)
|
---|
105 | CXXX To use MPI, use an appropriate genmake2 options file or use
|
---|
106 | CXXX genmake2 -mpi .
|
---|
107 | CXXX #undef ALLOW_USE_MPI
|
---|
108 |
|
---|
109 | C-- Control use of communication that might overlap computation.
|
---|
110 | C Under MPI selects/deselects "non-blocking" sends and receives.
|
---|
111 | #define ALLOW_ASYNC_COMMUNICATION
|
---|
112 | #undef ALLOW_ASYNC_COMMUNICATION
|
---|
113 | #undef ALWAYS_USE_ASYNC_COMMUNICATION
|
---|
114 | C-- Control use of communication that is atomic to computation.
|
---|
115 | C Under MPI selects/deselects "blocking" sends and receives.
|
---|
116 | #define ALLOW_SYNC_COMMUNICATION
|
---|
117 | #undef ALWAYS_USE_SYNC_COMMUNICATION
|
---|
118 |
|
---|
119 | C-- Control XY periodicity in processor to grid mappings
|
---|
120 | C Note: Model code does not need to know whether a domain is
|
---|
121 | C periodic because it has overlap regions for every box.
|
---|
122 | C Model assume that these values have been
|
---|
123 | C filled in some way.
|
---|
124 | #undef ALWAYS_PREVENT_X_PERIODICITY
|
---|
125 | #undef ALWAYS_PREVENT_Y_PERIODICITY
|
---|
126 | #define CAN_PREVENT_X_PERIODICITY
|
---|
127 | #define CAN_PREVENT_Y_PERIODICITY
|
---|
128 |
|
---|
129 | C-- disconnect tiles (no exchange between tiles, just fill-in edges
|
---|
130 | C assuming locally periodic subdomain)
|
---|
131 | #undef DISCONNECTED_TILES
|
---|
132 |
|
---|
133 | C-- Always cumulate tile local-sum in the same order by applying MPI allreduce
|
---|
134 | C to array of tiles ; can get slower with large number of tiles (big set-up)
|
---|
135 | #define GLOBAL_SUM_ORDER_TILES
|
---|
136 |
|
---|
137 | C-- Alternative way of doing global sum without MPI allreduce call
|
---|
138 | C but instead, explicit MPI send & recv calls. Expected to be slower.
|
---|
139 | #undef GLOBAL_SUM_SEND_RECV
|
---|
140 |
|
---|
141 | C-- Alternative way of doing global sum on a single CPU
|
---|
142 | C to eliminate tiling-dependent roundoff errors. Note: This is slow.
|
---|
143 | #undef CG2D_SINGLECPU_SUM
|
---|
144 |
|
---|
145 | C=== Other options (to add/remove pieces of code) ===
|
---|
146 | C-- Flag to turn on checking for errors from all threads and procs
|
---|
147 | C (calling S/R STOP_IF_ERROR) before stopping.
|
---|
148 | #define USE_ERROR_STOP
|
---|
149 |
|
---|
150 | C-- Control use of communication with other component:
|
---|
151 | C allow to import and export from/to Coupler interface.
|
---|
152 | #undef COMPONENT_MODULE
|
---|
153 |
|
---|
154 | C-- Options used to couple MITgcm and ISSM
|
---|
155 | C Eventually this option can probably be merged with COMPONENT_MODULE
|
---|
156 | #define ALLOW_CPL_ISSM
|
---|
157 |
|
---|
158 | C-- Activate some pieces of code for coupling to GEOS AGCM
|
---|
159 | #undef HACK_FOR_GMAO_CPL
|
---|
160 |
|
---|
161 | #endif /* _CPP_EEOPTIONS_H_ */
|
---|
162 |
|
---|
163 | #include "CPP_EEMACROS.h"
|
---|
164 |
|
---|