1 | *************** |
---|
2 | Oceanic tracers |
---|
3 | *************** |
---|
4 | |
---|
5 | .. todo:: |
---|
6 | |
---|
7 | |
---|
8 | |
---|
9 | .. contents:: |
---|
10 | :local: |
---|
11 | |
---|
12 | TOP (Tracers in the Ocean Paradigm) is the NEMO hardwired interface toward |
---|
13 | biogeochemical models and provide the physical constraints/boundaries for oceanic tracers. |
---|
14 | It consists of a modular framework to handle multiple ocean tracers, |
---|
15 | including also a variety of built-in modules. |
---|
16 | |
---|
17 | This component of the NEMO framework allows one to exploit available modules (see below) and |
---|
18 | further develop a range of applications, spanning from the implementation of a dye passive tracer to |
---|
19 | evaluate dispersion processes (by means of MY_TRC), track water masses age (AGE module), |
---|
20 | assess the ocean interior penetration of persistent chemical compounds |
---|
21 | (e.g., gases like CFC or even PCBs), up to the full set of equations involving |
---|
22 | marine biogeochemical cycles. |
---|
23 | |
---|
24 | Structure |
---|
25 | ========= |
---|
26 | |
---|
27 | TOP interface has the following location in the source code :file:`./src/TOP` and |
---|
28 | the following modules are available: |
---|
29 | |
---|
30 | :file:`TRP` |
---|
31 | Interface to NEMO physical core for computing tracers transport |
---|
32 | |
---|
33 | :file:`CFC` |
---|
34 | Inert carbon tracers (CFC11,CFC12,SF6) |
---|
35 | |
---|
36 | :file:`C14` |
---|
37 | Radiocarbon passive tracer |
---|
38 | |
---|
39 | :file:`AGE` |
---|
40 | Water age tracking |
---|
41 | |
---|
42 | :file:`MY_TRC` |
---|
43 | Template for creation of new modules and external BGC models coupling |
---|
44 | |
---|
45 | :file:`PISCES` |
---|
46 | Built in BGC model. See :cite:`gmd-8-2465-2015` for a throughout description. |
---|
47 | |
---|
48 | The usage of TOP is activated |
---|
49 | *i)* by including in the configuration definition the component ``TOP`` and |
---|
50 | *ii)* by adding the macro ``key_top`` in the configuration CPP file |
---|
51 | (see for more details :forge:`"Learn more about the model" <wiki/Users>`). |
---|
52 | |
---|
53 | As an example, the user can refer to already available configurations in the code, |
---|
54 | ``GYRE_PISCES`` being the NEMO biogeochemical demonstrator and |
---|
55 | ``GYRE_BFM`` to see the required configuration elements to couple with an external biogeochemical model |
---|
56 | (see also Section 4) . |
---|
57 | |
---|
58 | Note that, since version 4.0, |
---|
59 | TOP interface core functionalities are activated by means of logical keys and |
---|
60 | all submodules preprocessing macros from previous versions were removed. |
---|
61 | |
---|
62 | Here below the list of preprocessing keys that applies to the TOP interface (beside ``key_top``): |
---|
63 | |
---|
64 | ``key_iomput`` |
---|
65 | use XIOS I/O |
---|
66 | |
---|
67 | ``key_agrif`` |
---|
68 | enable AGRIF coupling |
---|
69 | |
---|
70 | ``key_trdtrc`` & ``key_trdmxl_trc`` |
---|
71 | trend computation for tracers |
---|
72 | |
---|
73 | Synthetic Workflow |
---|
74 | ================== |
---|
75 | |
---|
76 | A synthetic description of the TOP interface workflow is given below to |
---|
77 | summarize the steps involved in the computation of biogeochemical and physical trends and |
---|
78 | their time integration and outputs, |
---|
79 | by reporting also the principal Fortran subroutine herein involved. |
---|
80 | |
---|
81 | Model initialization (:file:`./src/OCE/nemogcm.F90`) |
---|
82 | ---------------------------------------------------- |
---|
83 | |
---|
84 | Call to ``trc_init`` subroutine (:file:`./src/TOP/trcini.F90`) to initialize TOP. |
---|
85 | |
---|
86 | .. literalinclude:: ../../../src/TOP/trcini.F90 |
---|
87 | :language: fortran |
---|
88 | :lines: 41-86 |
---|
89 | :emphasize-lines: 21,30-32,38-40 |
---|
90 | :caption: ``trc_init`` subroutine |
---|
91 | |
---|
92 | Time marching procedure (:file:`./src/OCE/step.F90`) |
---|
93 | ---------------------------------------------------- |
---|
94 | |
---|
95 | Call to ``trc_stp`` subroutine (:file:`./src/TOP/trcstp.F90`) to compute/update passive tracers. |
---|
96 | |
---|
97 | .. literalinclude:: ../../../src/TOP/trcstp.F90 |
---|
98 | :language: fortran |
---|
99 | :lines: 46-125 |
---|
100 | :emphasize-lines: 42,55-57 |
---|
101 | :caption: ``trc_stp`` subroutine |
---|
102 | |
---|
103 | BGC trends computation for each submodule (:file:`./src/TOP/trcsms.F90`) |
---|
104 | ------------------------------------------------------------------------ |
---|
105 | |
---|
106 | .. literalinclude:: ../../../src/TOP/trcsms.F90 |
---|
107 | :language: fortran |
---|
108 | :lines: 21 |
---|
109 | :caption: :file:`trcsms` snippet |
---|
110 | |
---|
111 | Physical trends computation (:file:`./src/TOP/TRP/trctrp.F90`) |
---|
112 | -------------------------------------------------------------- |
---|
113 | |
---|
114 | .. literalinclude:: ../../../src/TOP/TRP/trctrp.F90 |
---|
115 | :language: fortran |
---|
116 | :lines: 46-95 |
---|
117 | :emphasize-lines: 17,21,29,33-35 |
---|
118 | :caption: ``trc_trp`` subroutine |
---|
119 | |
---|
120 | Namelists walkthrough |
---|
121 | ===================== |
---|
122 | |
---|
123 | :file:`namelist_top` |
---|
124 | -------------------- |
---|
125 | |
---|
126 | Here below are listed the features/options of the TOP interface accessible through |
---|
127 | the :file:`namelist_top_ref` and modifiable by means of :file:`namelist_top_cfg` |
---|
128 | (as for NEMO physical ones). |
---|
129 | |
---|
130 | Note that ``##`` is used to refer to a number in an array field. |
---|
131 | |
---|
132 | .. literalinclude:: ../../namelists/namtrc_run |
---|
133 | :language: fortran |
---|
134 | |
---|
135 | .. literalinclude:: ../../namelists/namtrc |
---|
136 | :language: fortran |
---|
137 | |
---|
138 | .. literalinclude:: ../../namelists/namtrc_dta |
---|
139 | :language: fortran |
---|
140 | |
---|
141 | .. literalinclude:: ../../namelists/namtrc_adv |
---|
142 | :language: fortran |
---|
143 | |
---|
144 | .. literalinclude:: ../../namelists/namtrc_ldf |
---|
145 | :language: fortran |
---|
146 | |
---|
147 | .. literalinclude:: ../../namelists/namtrc_rad |
---|
148 | :language: fortran |
---|
149 | |
---|
150 | .. literalinclude:: ../../namelists/namtrc_snk |
---|
151 | :language: fortran |
---|
152 | |
---|
153 | .. literalinclude:: ../../namelists/namtrc_dmp |
---|
154 | :language: fortran |
---|
155 | |
---|
156 | .. literalinclude:: ../../namelists/namtrc_ice |
---|
157 | :language: fortran |
---|
158 | |
---|
159 | .. literalinclude:: ../../namelists/namtrc_trd |
---|
160 | :language: fortran |
---|
161 | |
---|
162 | .. literalinclude:: ../../namelists/namtrc_bc |
---|
163 | :language: fortran |
---|
164 | |
---|
165 | .. literalinclude:: ../../namelists/namtrc_bdy |
---|
166 | :language: fortran |
---|
167 | |
---|
168 | .. literalinclude:: ../../namelists/namage |
---|
169 | :language: fortran |
---|
170 | |
---|
171 | Two main types of data structure are used within TOP interface |
---|
172 | to initialize tracer properties (1) and |
---|
173 | to provide related initial and boundary conditions (2). |
---|
174 | |
---|
175 | 1. TOP tracers initialization: ``sn_tracer`` (``&namtrc``) |
---|
176 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
---|
177 | |
---|
178 | Beside providing name and metadata for tracers, |
---|
179 | here are also defined the use of initial (``sn_tracer%llinit``) and |
---|
180 | boundary (``sn_tracer%llsbc, sn_tracer%llcbc, sn_tracer%llobc``) conditions. |
---|
181 | |
---|
182 | In the following, an example of the full structure definition is given for |
---|
183 | two idealized tracers both with initial conditions given, |
---|
184 | while the first has only surface boundary forcing and |
---|
185 | the second both surface and coastal forcings: |
---|
186 | |
---|
187 | .. code-block:: fortran |
---|
188 | |
---|
189 | ! ! name ! title of the field ! units ! initial data ! sbc ! cbc ! obc ! |
---|
190 | sn_tracer(1) = 'TRC1' , 'Tracer 1 Concentration ', ' - ' , .true. , .true., .false., .true. |
---|
191 | sn_tracer(2) = 'TRC2 ' , 'Tracer 2 Concentration ', ' - ' , .true. , .true., .true. , .false. |
---|
192 | |
---|
193 | As tracers in BGC models are increasingly growing, |
---|
194 | the same structure can be written also in a more compact and readable way: |
---|
195 | |
---|
196 | .. code-block:: fortran |
---|
197 | |
---|
198 | ! ! name ! title of the field ! units ! initial data ! |
---|
199 | sn_tracer(1) = 'TRC1' , 'Tracer 1 Concentration ', ' - ' , .true. |
---|
200 | sn_tracer(2) = 'TRC2 ' , 'Tracer 2 Concentration ', ' - ' , .true. |
---|
201 | ! sbc |
---|
202 | sn_tracer(1)%llsbc = .true. |
---|
203 | sn_tracer(2)%llsbc = .true. |
---|
204 | ! cbc |
---|
205 | sn_tracer(2)%llcbc = .true. |
---|
206 | |
---|
207 | The data structure is internally initialized by code with dummy names and |
---|
208 | all initialization/forcing logical fields set to ``.false.`` . |
---|
209 | |
---|
210 | 2. Structures to read input initial and boundary conditions: ``&namtrc_dta`` (``sn_trcdta``), ``&namtrc_bc`` (``sn_trcsbc`` / ``sn_trccbc`` / ``sn_trcobc``) |
---|
211 | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ |
---|
212 | |
---|
213 | The overall data structure (Fortran type) is based on the general one defined for NEMO core in the SBC component |
---|
214 | (see details in ``SBC`` Chapter of :doc:`Reference Manual <cite>` on Input Data specification). |
---|
215 | |
---|
216 | Input fields are prescribed within ``&namtrc_dta`` (with ``sn_trcdta`` structure), |
---|
217 | while Boundary Conditions are applied to the model by means of ``&namtrc_bc``, |
---|
218 | with dedicated structure fields for surface (``sn_trcsbc``), riverine (``sn_trccbc``), and |
---|
219 | lateral open (``sn_trcobc``) boundaries. |
---|
220 | |
---|
221 | The following example illustrates the data structure in the case of initial condition for |
---|
222 | a single tracer contained in the file named :file:`tracer_1_data.nc` |
---|
223 | (``.nc`` is implicitly assumed in namelist filename), |
---|
224 | with a doubled initial value, and located in the :file:`usr/work/model/inputdata` folder: |
---|
225 | |
---|
226 | .. code-block:: fortran |
---|
227 | |
---|
228 | ! ! file name ! frequency (hours) ! variable ! time interp. ! clim ! 'yearly'/ ! weights ! rotation ! land/sea mask ! |
---|
229 | ! ! ! (if <0 months) ! name ! (logical) ! (T/F) ! 'monthly' ! filename ! pairing ! filename ! |
---|
230 | sn_trcdta(1) = 'tracer_1_data' , -12 , 'TRC1' , .false. , .true. , 'yearly' , '' , '' , '' |
---|
231 | rf_trfac(1) = 2.0 |
---|
232 | cn_dir = 'usr/work/model/inputdata/' |
---|
233 | |
---|
234 | Note that, the Lateral Open Boundaries conditions are applied on |
---|
235 | the segments defined for the physical core of NEMO |
---|
236 | (see ``BDY`` description in the :doc:`Reference Manual <cite>`). |
---|
237 | |
---|
238 | :file:`namelist_trc` |
---|
239 | -------------------- |
---|
240 | |
---|
241 | Here below the description of :file:`namelist_trc_ref` used to handle Carbon tracers modules, |
---|
242 | namely CFC and C14. |
---|
243 | |
---|
244 | .. literalinclude:: ../../../cfgs/SHARED/namelist_trc_ref |
---|
245 | :language: fortran |
---|
246 | :lines: 7,17,26,34 |
---|
247 | :caption: :file:`namelist_trc_ref` snippet |
---|
248 | |
---|
249 | ``MY_TRC`` interface for coupling external BGC models |
---|
250 | ===================================================== |
---|
251 | |
---|
252 | The generalized interface is pivoted on MY_TRC module that contains template files to |
---|
253 | build the coupling between |
---|
254 | NEMO and any external BGC model. |
---|
255 | |
---|
256 | The call to MY_TRC is activated by setting ``ln_my_trc = .true.`` (in ``&namtrc``) |
---|
257 | |
---|
258 | The following 6 fortran files are available in MY_TRC with the specific purposes here described. |
---|
259 | |
---|
260 | :file:`par_my_trc.F90` |
---|
261 | This module allows to define additional arrays and public variables to |
---|
262 | be used within the MY_TRC interface |
---|
263 | |
---|
264 | :file:`trcini_my_trc.F90` |
---|
265 | Here are initialized user defined namelists and |
---|
266 | the call to the external BGC model initialization procedures to populate general tracer array |
---|
267 | (``trn`` and ``trb``). |
---|
268 | Here are also likely to be defined support arrays related to system metrics that |
---|
269 | could be needed by the BGC model. |
---|
270 | |
---|
271 | :file:`trcnam_my_trc.F90` |
---|
272 | This routine is called at the beginning of ``trcini_my_trc`` and |
---|
273 | should contain the initialization of additional namelists for the BGC model or user-defined code. |
---|
274 | |
---|
275 | :file:`trcsms_my_trc.F90` |
---|
276 | The routine performs the call to Boundary Conditions and its main purpose is to |
---|
277 | contain the Source-Minus-Sinks terms due to the biogeochemical processes of the external model. |
---|
278 | Be aware that lateral boundary conditions are applied in trcnxt routine. |
---|
279 | |
---|
280 | .. warning:: |
---|
281 | The routines to compute the light penetration along the water column and |
---|
282 | the tracer vertical sinking should be defined/called in here, |
---|
283 | as generalized modules are still missing in the code. |
---|
284 | |
---|
285 | :file:`trcice_my_trc.F90` |
---|
286 | Here it is possible to prescribe the tracers concentrations in the sea-ice that |
---|
287 | will be used as boundary conditions when ice melting occurs (``nn_ice_tr = 1`` in ``&namtrc_ice``). |
---|
288 | See e.g. the correspondent PISCES subroutine. |
---|
289 | |
---|
290 | :file:`trcwri_my_trc.F90` |
---|
291 | This routine performs the output of the model tracers (only those defined in ``&namtrc``) using |
---|
292 | IOM module (see chapter “Output and Diagnostics” in the :doc:`Reference Manual <cite>`). |
---|
293 | It is possible to place here the output of additional variables produced by the model, |
---|
294 | if not done elsewhere in the code, using the call to ``iom_put``. |
---|
295 | |
---|
296 | Coupling an external BGC model using NEMO framework |
---|
297 | =================================================== |
---|
298 | |
---|
299 | The coupling with an external BGC model through the NEMO compilation framework can be achieved in |
---|
300 | different ways according to the degree of coding complexity of the Biogeochemical model, like e.g., |
---|
301 | the whole code is made only by one file or |
---|
302 | it has multiple modules and interfaces spread across several subfolders. |
---|
303 | |
---|
304 | Beside the 6 core files of MY_TRC module, let’s assume an external BGC model named *MYBGC* and |
---|
305 | constituted by a rather essential coding structure, likely few Fortran files. |
---|
306 | The new coupled configuration name is *NEMO_MYBGC*. |
---|
307 | |
---|
308 | The best solution is to have all files (the modified ``MY_TRC`` routines and the BGC model ones) |
---|
309 | placed in a unique folder with root ``MYBGCPATH`` and |
---|
310 | to use the makenemo external readdressing of ``MY_SRC`` folder. |
---|
311 | |
---|
312 | The coupled configuration listed in :file:`work_cfgs.txt` will look like |
---|
313 | |
---|
314 | :: |
---|
315 | |
---|
316 | NEMO_MYBGC OCE TOP |
---|
317 | |
---|
318 | and the related ``cpp_MYBGC.fcm`` content will be |
---|
319 | |
---|
320 | .. code-block:: perl |
---|
321 | |
---|
322 | bld::tool::fppkeys key_iomput key_mpp_mpi key_top |
---|
323 | |
---|
324 | the compilation with :file:`makenemo` will be executed through the following syntax |
---|
325 | |
---|
326 | .. code-block:: console |
---|
327 | |
---|
328 | $ makenemo -n 'NEMO_MYBGC' -m '<arch_my_machine>' -j 8 -e '<MYBGCPATH>' |
---|
329 | |
---|
330 | The makenemo feature ``-e`` was introduced to |
---|
331 | readdress at compilation time the standard MY_SRC folder (usually found in NEMO configurations) with |
---|
332 | a user defined external one. |
---|
333 | |
---|
334 | The compilation of more articulated BGC model code & infrastructure, |
---|
335 | like in the case of BFM (|BFM man|_), requires some additional features. |
---|
336 | |
---|
337 | As before, let’s assume a coupled configuration name *NEMO_MYBGC*, |
---|
338 | but in this case MYBGC model root becomes :file:`MYBGC` path that |
---|
339 | contains 4 different subfolders for biogeochemistry, |
---|
340 | named :file:`initialization`, :file:`pelagic`, and :file:`benthic`, |
---|
341 | and a separate one named :file:`nemo_coupling` including the modified `MY_SRC` routines. |
---|
342 | The latter folder containing the modified NEMO coupling interface will be still linked using |
---|
343 | the makenemo ``-e`` option. |
---|
344 | |
---|
345 | In order to include the BGC model subfolders in the compilation of NEMO code, |
---|
346 | it will be necessary to extend the configuration :file:`cpp_NEMO_MYBGC.fcm` file to include the specific paths of :file:`MYBGC` folders, as in the following example |
---|
347 | |
---|
348 | .. code-block:: perl |
---|
349 | |
---|
350 | bld::tool::fppkeys key_iomput key_mpp_mpi key_top |
---|
351 | |
---|
352 | src::MYBGC::initialization <MYBGCPATH>/initialization |
---|
353 | src::MYBGC::pelagic <MYBGCPATH>/pelagic |
---|
354 | src::MYBGC::benthic <MYBGCPATH>/benthic |
---|
355 | |
---|
356 | bld::pp::MYBGC 1 |
---|
357 | bld::tool::fppflags::MYBGC %FPPFLAGS |
---|
358 | bld::tool::fppkeys %bld::tool::fppkeys MYBGC_MACROS |
---|
359 | |
---|
360 | where *MYBGC_MACROS* is the space delimited list of macros used in *MYBGC* model for |
---|
361 | selecting/excluding specific parts of the code. |
---|
362 | The BGC model code will be preprocessed in the configuration :file:`BLD` folder as for NEMO, |
---|
363 | but with an independent path, like :file:`NEMO_MYBGC/BLD/MYBGC/<subforlders>`. |
---|
364 | |
---|
365 | The compilation will be performed similarly to in the previous case with the following |
---|
366 | |
---|
367 | .. code-block:: console |
---|
368 | |
---|
369 | $ makenemo -n 'NEMO_MYBGC' -m '<arch_my_machine>' -j 8 -e '<MYBGCPATH>/nemo_coupling' |
---|
370 | |
---|
371 | .. note:: |
---|
372 | The additional lines specific for the BGC model source and build paths can be written into |
---|
373 | a separate file, e.g. named :file:`MYBGC.fcm`, |
---|
374 | and then simply included in the :file:`cpp_NEMO_MYBGC.fcm` as follow |
---|
375 | |
---|
376 | .. code-block:: perl |
---|
377 | |
---|
378 | bld::tool::fppkeys key_zdftke key_dynspg_ts key_iomput key_mpp_mpi key_top |
---|
379 | inc <MYBGCPATH>/MYBGC.fcm |
---|
380 | |
---|
381 | This will enable a more portable compilation structure for all MYBGC related configurations. |
---|
382 | |
---|
383 | .. warning:: |
---|
384 | The coupling interface contained in :file:`nemo_coupling` cannot be added using the FCM syntax, |
---|
385 | as the same files already exists in NEMO and they are overridden only with |
---|
386 | the readdressing of MY_SRC contents to avoid compilation conflicts due to duplicate routines. |
---|
387 | |
---|
388 | All modifications illustrated above, can be easily implemented using shell or python scripting |
---|
389 | to edit the NEMO configuration :file:`CPP.fcm` file and |
---|
390 | to create the BGC model specific FCM compilation file with code paths. |
---|
391 | |
---|
392 | .. |BFM man| replace:: BFM-NEMO coupling manual |
---|