Each modeling group must provide their output in the standard OCMIP-2 format. Model output that does not follow these formatting conventions cannot be included for analysis during OCMIP-2. Model groups must use the standard routines that we have developed specifically for writing output in standard form for OCMIP-2.
If this is the first OCMIP-2 simulation you have made, you will need to recuperate the routine write_nc_MaskAreaBathy.f to write out characteristics of your model grid, mask, and bathymetry using the standard OCMIP-2 format. Use of this routine is detailed in the CFC HOWTO (section 5.1).
Otherwise if you have submitted OCMIP-2 model output previously, you will only need to resubmit the output file produced by write_nc_MaskAreaBathy.f under two conditions:
Each modeling group must use the routines listed in the following table to store results in standard OCMIP-2 format for the Equilibrium Output, Historical Output, Future Output, Pulse Output, and Control Output.
Input to these routines consists of your model's output and
characteristics. The first routine write_nc_Abiotic_equil.f must
be called ONLY once, at the end of model spin-up. We define the final
output of that run to be the initial conditions (at
1765.0) for the transient runs. The Historical routines
(write_nc_Abiotic_hist_year_3D.f
write_nc_Abiotic_hist_year_2D.f) must be called for the
appropriate output years of the Historical run (see previous
section
Output type and frequency);
conversely the Historical routine
(write_nc_Abiotic_hist_year_0D.f is called only once, after
builiding a 1-D time series of global mean information.
The same strategy holds for
the output routines for the other Abiotic transient runs:
write_nc_Abiotic_futr_year_3D.f,
write_nc_Abiotic_futr_year_2D.f, and
write_nc_Abiotic_futr_year_0D.f);write_nc_Abiotic_puls_year_2D.f, and
write_nc_Abiotic_puls_year_0D.f); and write_nc_Abiotic_ctrlH_year_3D.f,
write_nc_Abiotic_ctrlH_year_2D.f, and
write_nc_Abiotic_ctrlH_year_0D.f; write_nc_Abiotic_ctrlF_year_3D.f,
write_nc_Abiotic_ctrlF_year_2D.f, and
write_nc_Abiotic_ctrlF_year_0D.f; andwrite_nc_Abiotic_ctrlP_year_2D.f, and
write_nc_Abiotic_ctrlP_year_0D.f).write_nc_Abiotic_TS_year.f should be called only once for offline
models; for online models, it should also be called a second time, in
the year 1990.
-------------------------------------------------------------------------------
Routine Input Units Comments
-------------------------------------------------------------------------------
write_nc_Abiotic_equil.f 1) Conc. of DIC mol/m^3 (*)
2) Conc. of DIC14 mol/m^3
3) Alk from eq. (8) eq/m^3
4) Surf. ocean pCO2 uatm
5) Delta pCO2 (dpCO2) uatm
6) Gas Exch. Flux of DIC mol/(m^2*s)
7) Gas Exch. Flux of DIC14 mol/(m^2*s)
8) Virtual Flux of DIC mol/(m^2*s)
9) Virtual Flux of DIC14 mol/(m^2*s)
write_nc_Abiotic_hist_year_3D.f 1) Conc. of DIC mol/m^3
2) Conc. of DIC14 mol/m^3
write_nc_Abiotic_hist_year_2D.f 1) Surf. ocean pCO2 uatm
2) Delta pCO2 (dpCO2) uatm
3) Gas Exch. Flux of DIC mol/(m^2*s)
4) Gas Exch. Flux of DIC14 mol/(m^2*s)
5) Virtual Flux of DIC mol/(m^2*s)
6) Virtual Flux of DIC14 mol/(m^2*s)
7) Surface DIC mol/m^3
8) Surface Delta C-14 permil
9) Vert. Integral of DIC mol/m^2
10) Vert. Integral of DC-14ocn permil*m
11) Cum. Gas Flux of DIC mol/m^2 1765->
12) Cum. Gas Flux of DIC14 mol/m^2 1765->
13) Cum. Virt. Flux of DIC mol/m^2 1765->
14) Cum. Virt. Flux of DIC14 mol/m^2 1765->
write_nc_Abiotic_hist_year_0D.f 1) Glob_mean (Gm) pCO2atm uatm
2) Gm Delta C-14 atm permil
3) Gm Gas Ex. Flux of DIC mol/(m^2*s)
4) Gm Gas Ex. Flux of DIC14 mol/(m^2*s)
5) Gm Virtual Flux of DIC mol/(m^2*s)
6) Gm Virtual Flux of DIC14 mol/(m^2*s)
7) Gm DIC mol/m^3
8) Gm DIC14 mol/m^3
9) Gm Surface DIC mol/m^3
10) Gm Surface DIC-14 mol/m^3
11) Gm pCO2surf uatm
12) Gm Delta pCO2 (dpCO2) uatm
13) Gm Surface Delta C-14 permil
14) Gm Delta C-14 permil
15) Gm Cum. Gas Flux of DIC mol/m^2 1765->
16) Gm Cum. Gas Flux of DIC14 mol/m^2 1765->
17) Gm Cum. Virt. Flux of DIC mol/m^2 1765->
18) Gm Cum. Virt. Flux of DIC14 mol/m^2 1765->
write_nc_Abiotic_futr_year_3D.f 1) Conc. of DIC mol/m^3
write_nc_Abiotic_futr_year_2D.f 1) Surf. ocean pCO2 uatm
2) Delta pCO2 (dpCO2) uatm
3) Gas Exch. Flux of DIC mol/(m^2*s)
4) Virtual Flux of DIC mol/(m^2*s)
5) Surface DIC mol/m^3
6) Vert. Integral of DIC mol/m^2
7) Cum. Gas Flux of DIC mol/m^2 1765->
8) Cum. Virt. Flux of DIC mol/m^2 1765->
write_nc_Abiotic_futr_year_0D.f 1) Glob_mean (Gm) pCO2atm uatm
2) Gm Gas Ex. Flux of DIC mol/(m^2*s)
3) Gm Virtual Flux of DIC mol/(m^2*s)
4) Gm DIC mol/m^3
5) Gm Surface DIC mol/m^3
6) Gm pCO2surf uatm
7) Gm Delta pCO2 (dpCO2) uatm
8) Gm Cum. Gas Flux of DIC mol/m^2 1765->
9) Gm Cum. Virt. Flux of DIC mol/m^2 1765->
write_nc_Abiotic_puls_year_2D.f 1) Surf. ocean pCO2 uatm
2) Delta pCO2 (dpCO2) uatm
3) Gas Exch. Flux of DIC mol/(m^2*s)
4) Virtual Flux of DIC mol/(m^2*s)
5) Surface DIC mol/m^3
6) Vert. Integral of DIC mol/m^2
7) Cum. Gas Flux of DIC mol/m^2 1765->
8) Cum. Virt. Flux of DIC mol/m^2 1765->
write_nc_Abiotic_puls_year_0D.f 1) Glob_mean (Gm) pCO2atm uatm
2) Gm Gas Ex. Flux of DIC mol/(m^2*s)
3) Gm Virtual Flux of DIC mol/(m^2*s)
4) Gm DIC mol/m^3
5) Gm Surface DIC mol/m^3
6) Gm pCO2surf uatm
7) Gm Delta pCO2 (dpCO2) uatm
8) Gm Cum. Gas Flux of DIC mol/m^2 1765->
9) Gm Cum. Virt. Flux of DIC mol/m^2 1765->
write_nc_Abiotic_TS_year.f 1) Potential temperature degrees C (*)
2) Salinity psu
write_nc_Abiotic_ctrlE_year_3D.f -> Same args as "write_nc_Abiotic_hist_year_3D.f"
write_nc_Abiotic_ctrlE_year_2D.f -> Same args as "write_nc_Abiotic_hist_year_2D.f"
write_nc_Abiotic_ctrlE_year_0D.f -> Same args as "write_nc_Abiotic_hist_year_0D.f"
write_nc_Abiotic_ctrlL_year_3D.f -> Same args as "write_nc_Abiotic_futr_year_3D.f"
write_nc_Abiotic_ctrlL_year_2D.f -> Same args as "write_nc_Abiotic_futr_year_2D.f"
write_nc_Abiotic_ctrlL_year_0D.f -> Same args as "write_nc_Abiotic_futr_year_0D.f"
write_nc_Abiotic_ctrlP_year_2D.f -> Same args as "write_nc_Abiotic_puls_year_2D.f"
write_nc_Abiotic_ctrlP_year_0D.f -> Same args as "write_nc_Abiotic_puls_year_0D.f"
-------------------------------------------------------------------------------
(*) For the equilibrium run: for online models, all 2- and 3-D fields
should be averaged for each month over the last year of the
simulation.
The output routines can be transferred to your machine by clicking on the links below, while holding down the Shift key.
You will also need to transfer the subroutine handle_errors.f to properly deal with possible errors while you are writing your netCDF files.
Here is a an example of how you would compile one of the output routines:
f77 -c -O -L/usr/local/lib -lnetcdf -I/usr/local/include \
write_nc_Abiotic_equil.f
Because we have made these routines F77 compatible, you may need a function len_trim.f (from F90), which we also provide and which returns the length of a character string (after neglecting trailing blanks).
The Abiotic-run output routines store your model results following the naming and output conventions (netCDF, GDT version 1.2) chosen for OCMIP-2. The output filename is constructed automatically within each routine from three of the arguments: the tracer name, the year, and the standard model code used during OCMIP-2 to identify your group.
For example, after compiling and linking the OCMIP-2 output routines, we add the following code to the IPSL routines to store output in standard OCMIP-2 form
call write_nc_Abiotic_equil("IPSL","NGL46_SI",
& imt, jmt, kmt,
& 60*60*24*365, 1200,
& MDIC, MDIC14, Alk,
& MpCO2surf, MdpCO2,
& MF, MF14,
& MFv, MFv14)
By line, the arguments include
When do I call the above Equilibrium output routine? It should be called only once, at the end of the simulation after building monthly arrays (12 members) for each of the 2-D and 3-D spatial fields given as arguments.
We need to use a slightly different routines for saving transient results from the Historical run. Unlike the equilibrium run, we separately store 3-D, 2-D, and 0-D data. The reason is that we store the higher dimensional data less often, to save space.
For your 3-D model output for the Abiotic Historical run, use
call write_nc_Abiotic_hist_year_3D("IPSL","NL46_SI",
& imt, jmt, kmt, nt,
& 1985, 60*60*24*365, 1200,
& MDIC, MDIC14)
Note that we have also added the dimension nt on line 2. You must use nt to signal if you are passing annual means (nt=1) or monthly means (nt=12). The argument nt is used in the same fashion for routines that follow. The 3-D input arrays MDIC and MDIC14 are as described for the Equilibrium run.
When do I call the above 3-D Historical output routine? It should be called for each of the following times:
For your 2-D Historical output, use
call write_nc_Abiotic_hist_year_2D("IPSL","NL46_SI",
& imt, jmt, nt,
& 1985, 60*60*24*365, 1200,
& MpCO2surf, MdpCO2,
& MF, MF14,
& MFv, MFv14,
& Ms_DIC, Ms_DC14ocn,
& Mi_DIC, Mi_DC14ocn,
& CF_F, CF_F14,
& CF_Fv, CF_Fv14)
For 2-D output, we no longer need the dimension kmt, formerly in line 2. Conversely, we need supplemental 2-D model output for the Historical run which was not included in the equilibrium output. This supplemental 2-D output is needed to due to the Historical run's transient nature and our asynchronous saving of its 2-D and 3-D output. Supplemental 2-D Historical output includes
Cumulative fluxes (lines 9 and 10 above) must be initialized to zero and integrated with respect to time (i.e., each time step) from year=1765.0. Note that these values should be output only at the end of each year, regardless of whether nt=12 or nt=1.
When do I call the above 2-D Historical output routine? It should be called with nt=12 for each of the following years: 1838, 1839, 1900, and every year for 1948-1999 (inclusive).
For 0-D (1-D with time) Historical output, use
call write_nc_Abiotic_hist_year_0D("IPSL","NL46_SI",
& nrec, times,
& G_pCO2atm, G_DC14atm
& G_F, G_F14,
& G_Fv, G_Fv14,
& Gv_DIC, Gv_DIC14,
& G_DIC, G_DIC14,
& G_pCO2surf, G_dpCO2,
& G_DC14ocn, Gv_DC14ocn,
& G_CF_F, G_CF_F14,
& G_CF_Fv, G_CF_Fv14)
By line, the arguments include
When do I call the above 0-D Historical output routine? It should be called only once, after constructing 1-D (in time) arrays from all of your model output. The time storage frequency is regular: every month throughout the entire run (i.e., all years 1765-1999, inclusive). Thus modelers must use nrec = 2820, and fill the 1-D temporal array times with the appropriate values (i.e., 1765.04167, 1765.125, 1765.2083, 1765.29167, 1765.375, ... 1999.875, 1999.9583).
Another similar set of 3 routines is needed for storing results from the Future runs CIS92A and S650. Here we have removed arguments related to C-14 and added an argument for indicating which future run (CIS92A or S650) is appropriate (see line 2). Note that this argument must be given in UPPER case. These 3 routines are given below (details of other arguments are the same as given above):
call write_nc_Abiotic_futr_year_3D("IPSL","NL46_SI",
& "S650",
& imt, jmt, kmt, nt,
& 2000, 60*60*24*365, 1200,
& MDIC)
call write_nc_Abiotic_futr_year_2D("IPSL","NL46_SI",
& "S650",
& imt, jmt, nt,
& 2000, 60*60*24*365, 1200,
& MpCO2surf, MdpCO2,
& MF,
& MFv,
& Ms_DIC,
& Mi_DIC,
& CF_F,
& CF_Fv)
When do I call the above 2-D and 3-D Future output routines? They should both be called for each of the following times:
call write_nc_Abiotic_futr_year_0D("IPSL","NL46_SI",
& "S650",
& nrec, times,
& G_pCO2atm,
& G_F,
& G_Fv,
& Gv_DIC,
& G_DIC,
& G_pCO2surf, G_dpCO2,
& G_CF_F,
& G_CF_Fv)
When do I call the above 0-D Future output routine? It should be called only once, after constructing 1-D (in time) arrays from all of your model output. The time storage frequency is regular: every month throughout the entire run (i.e., all years 1990-2299, inclusive). Thus modelers must use nrec = 3720, and they must fill the 1-D temporal array times) with appropriate corresponding values (i.e., 1990.04167, 1990.125, 1990.2083, 1990.29167, 1990.375, ..., 2299.875, 2299.9583).
Another set of 2 routines is needed for storing the 2-D and 0-D results from the Pulse run; for that run there is NO 3-D output. Differences relative to the Pulse output routines are
call write_nc_Abiotic_puls_year_2D("IPSL","NL46_SI",
& imt, jmt,
& 1, 60*60*24*365, 1200,
& MpCO2surf, MdpCO2,
& MF,
& MFv,
& Ms_DIC,
& Mi_DIC,
& CF_F,
& CF_Fv)
When do I call the above 2-D Pulse output routine? It should be called using annual means, for each of the following years: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 200, 300, 400, 500, 600, 700, 800, 900, and 999. These details are given in a structured way in the previous section (Output type and Frequency).
call write_nc_Abiotic_puls_year_0D("IPSL","NL46_SI",
& nrec, times,
& G_pCO2atm,
& G_F,
& G_Fv,
& Gv_DIC,
& G_DIC,
& G_pCO2surf, G_dpCO2,
& G_CF_F,
& G_CF_Fv)
When do I call the above 0-D Pulse output routine? It should be called only once, after constructing 1-D (in time) arrays from all of your model output. The time storage frequency (spacing between individual members of the array times) is NOT regularly spaced in time. For the 0-D Pulse run, output as specified by times must be given for
Finally we need to store output for the control run. The control run is necessary because 3-D tracer fields and associated fluxes in our Equilibrium run never reach perfect equilibrium. The associated drift affects results for the transient runs. Correcting for drift may be important when comparing model differences, particularly integrated quantities, over long time periods. The control run is needed to drift-correct models, before comparison. It is desirable that all groups make all three control runs, but this may not be possible for some, due to CPU requirements. Below are a few guidelines to help you decide when the Control runs are necessary and what shortcuts can be taken:
Those who will be making all the CO2 Injection simulations can economize a little. That is, with those runs, one automatically makes make both the Late Control and the Pulse Control runs, simultaneoulsy. The first of the ten Injection tracers is the control tracer. Unfortunately, the Injection runs do NOT offer an opportunity to skip the Historical Control run. For more details, see the final version of the Injection HOWTO.
Arguments of the Control output routines are the same as those used in the Historical, Future, and Pulse output routines, as described below.
All arguments of the Abiotic routines are input; none are output. With the arguments as listed in the nine routines above, The corresponding output netCDF files are
"IPSL_Abiotic_equil.nc";"IPSL_Abiotic_hist_1985_3D.nc",
"IPSL_Abiotic_hist_1985_2D.nc",
"IPSL_Abiotic_hist_global_0D.nc";"IPSL_Abiotic_S650_2000_3D.nc",
"IPSL_Abiotic_S650_2000_2D.nc",
"IPSL_Abiotic_S650_global_0D.nc"; "IPSL_Abiotic_puls_0001_2D.nc",
"IPSL_Abiotic_puls_global_0D.nc"."IPSL_Abiotic_ctrlH_1985_3D.nc",
"IPSL_Abiotic_ctrlH_1985_2D.nc",
"IPSL_Abiotic_ctrlH_global_0D.nc";"IPSL_Abiotic_ctrlF_2000_3D.nc",
"IPSL_Abiotic_ctrlF_2000_2D.nc",
"IPSL_Abiotic_ctrlF_global_0D.nc"; "IPSL_Abiotic_ctrlP_0001_2D.nc",
"IPSL_Abiotic_ctrlP_global_0D.nc".See http://www.ipsl.jussieu.fr/OCMIP/tech. for additional information about the format netCDF and other conventions (COARDS, GDT) chosen for storing OCMIP-2 model output.
If you have other questions, please contact orr@cea.fr or Patrick.Brockmann@ipsl.jussieu.fr.