Previous Next Contents

5. Output Format

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:

  1. either your model's grid, mask, or bathymetry have changed; or
  2. you have been notified by the OCMIP-2 analysis center at IPSL that your output file from this subroutine did not pass the routine integrity tests.

5.1 Output routines

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:

The routine 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.  

5.2 Downloading the output routines

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.

5.3 Compiling the output routines

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).

5.4 Using the output routines

Equilibrium Output

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

  1. the OCMIP-2 model code AND your own model version indicator (in GDT 1.2 terminology, these 2 variables refer to the institution and production, respectively);
  2. dimensions;
  3. the number of seconds per year (in your model), and the number of timesteps per year;
  4. the 12 monthly means for the 3-D tracer arrays for DIC (mol/m^3) and DIC14 (mol/m^3) and for the Alk computed from eq. (8) (eq/m^3).
  5. the 12 monthly means for the 2-D arrays for surface ocean pCO2 (pCO2surf, in uatm) and the sea-air pCO2 difference (dpCO2, in uatm).
  6. the 12 monthly means for the 2-D air-sea flux for F and F14 (both in mol/(m^2*s)); and
  7. the 12 monthly means for the 2-D arrays for the surface "virtual" fluxes Fv and Fv14 (both in mol/(m^2*s));

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.

Historical Output

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

  1. the OCMIP-2 model code AND your own model version indicator (in GDT 1.2 terminology, these 2 variables refer to the institution and production, respectively);
  2. the number of records saved and the array of the times (in decimal years) at which they were saved--for monthly means, times should be set to the corresponding time at mid-month (see below for exact values).
  3. the corresponding arrays of the history of the global mean atmospheric CO2 (model input, in uatm) and global mean atmospheric C-14 (in permil, calculated from model input as an area weighted mean of your ocean grid boxes that you have identified as being in the 90S-20S, 20S-20N, and 20N-90N latitudinal bands);
  4. the corresponding array of the history of the global mean air-sea flux F (mol/m^2*s) and F14 (mol/m^2*s);
  5. the history of the global mean virtual fluxes Fv (mol/m^2*s) and Fv14 (mol/m^2*s);
  6. the history of the global mean concentrations of DIC (mol/m^3) and DIC14 (mol/m^3);
  7. the history of the global mean surface concentrations of DIC (mol/m^3) and DIC14 (mol/m^3);
  8. the history of global mean surface ocean pCO2 (pCO2surf, in uatm), and the global mean sea-air pCO2 difference (dpCO2, in uatm);
  9. the history of global mean surface ocean DC14ocn (in permil), and the whole-ocean global mean DC14ocn (in permil);
  10. the history of the global mean cumulative fluxes F and F14 (in mol/m^2, integrated since 1765.0) at the end of each month, with each month indicated by its mid-month time given in line 2; and
  11. the history of the global mean cumulative fluxes Fv and Fv14 (in mol/m^2, integrated since 1765.0) at the end of each month, with each month indicated by its mid-month time given in line 2.

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).

Future Output

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).

Pulse Output

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

Thus with this irregular spacing, models must use nrec = 301 (i.e., 120 + 90 + 90 + 1).

Control Output

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:

  1. If you will make the Pulse run, you MUST also make the equivalent Pulse Control run.
  2. If you have NOT respected the Equilibrium drift criteria you MUST make the Historical Control and Future Control runs.
  3. If you have respected the recommended Equilibrium drift criteria, you may skip making the Historical Control and Future Control runs. However, we do HIGHLY RECOMMEND that you make these simulations, if you can afford them, i.e., if they do not represent a large proportion of your annual CPU budget. Having this output will simplify analysis and eliminate guess work.
  4. If you have respected the Equilibrium drift criteria and choose not to submit Historical Control and Future Control output, you MUST still provide an indication of the drift of your model. In other words, you must use the three *ctrlH* routines (see below) to provide your output for another year. For instance, you could provide output from the 0-D, 2-D, and 3-D *ctrlH* routines for the year 1775. We would then compute your model drift and treat it as constant.

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.

  1. Historical Control output (for 1765-1999, inclusive): We save both the DIC and DIC14 related components. We use 3 routines, with the same arguments as the 0-D, 2-D, and 3-D Historical output routines.
  2. Future Control output (for 2000-2764, inclusive): We save only the DIC-related component. We use 3 routines with the same arguments as the 0-D, 2-D, and 3-D Future output routines.
  3. Pulse Control output (for 2000-2764, inclusive): We save only the DIC-related component. We use 2 routines with the same arguments as the 0-D and 2-D Pulse output routines.

Names of Output files

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

These files along with all others produced by the Abiotic routines should be transferred to IPSL. Filenames should NOT be changed. Subsequently, at IPSL, files will be (1) tested for consistency, (2) included in the OCMIP-2 data base, and (3) processed for base analysis.

5.5 Need more details?

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.


Previous Next Contents