/*********************************************************************
 *
 * Copyright (C) 2022, Northwestern University
 * See COPYRIGHT notice in top-level directory.
 *
 *********************************************************************/

#include <stdlib.h>
#include <stdio.h>
#include <string.h>

#include <mpi.h>
#include <netcdf.h>
#include <netcdf_par.h>

#define ERR { \
    if (err != NC_NOERR) { \
        printf("Error at %s:%d : %s\n", __FILE__,__LINE__, nc_strerror(err)); \
        exit(1); \
    } \
}

static void def(int ncid);

int main(int argc, char *argv[])
{
   int err=NC_NOERR, ncid, cmode;

   MPI_Init(&argc, &argv);

   cmode = NC_CLOBBER | NC_NETCDF4;
#ifdef NC_NODIMSCALE_ATTACH
   cmode |= NC_NODIMSCALE_ATTACH;
#endif

   err = nc_create_par("testfile.nc", cmode, MPI_COMM_WORLD, MPI_INFO_NULL, &ncid); ERR
   err = nc_set_fill(ncid, NC_NOFILL, NULL); ERR

   /* define global attributes, dimensions, variables */
   def(ncid);

   err = nc_enddef(ncid); ERR
   err = nc_close(ncid); ERR

   MPI_Finalize();
   return err;
}

#define DEF_VAR(name, xtype, nDims, dimids, itype, decomid) {             \
    err = nc_def_var(ncid, name, xtype, nDims, dimids, &varid);           \
    ERR                                                                   \
}
#define PUT_ATTR_TXT(name, buf) {                                         \
    err = nc_put_att(ncid, varid, name, NC_CHAR, strlen(buf), buf);       \
    ERR                                                                   \
}
#define PUT_ATTR_FILL(val) {                                              \
    int xtype;                                                            \
    err = nc_inq_vartype(ncid, varid, &xtype);                            \
    ERR                                                                   \
    if (xtype == NC_FLOAT) {                                              \
        float buf = (float)val;                                           \
        err = nc_put_att_float(ncid, varid, "_FillValue", xtype, 1, &buf);\
    }                                                                     \
    else if (xtype == NC_INT) {                                           \
        int buf = (int)val;                                               \
        err = nc_put_att_int(ncid, varid, "_FillValue", xtype, 1, &buf);  \
    }                                                                     \
    else if (xtype == NC_DOUBLE) {                                        \
        double buf = (double)val;                                         \
        err = nc_put_att_double(ncid, varid,"_FillValue", xtype, 1, &buf);\
    }                                                                     \
    ERR                                                                   \
}
#define PUT_ATTR_INT1(name, val) {                                        \
    int buf = val;                                                        \
    err = nc_put_att_int(ncid, varid, name, NC_INT, 1, &buf);             \
    ERR                                                                   \
}
#define PUT_ATTR_FLT1(name, val) {                                        \
    float buf = val;                                                      \
    err = nc_put_att_float(ncid, varid, name, NC_FLOAT, 1, &buf);         \
    ERR                                                                   \
}

static void def(int ncid) {
    int err=NC_NOERR, varid, dimids[4];
    char buf[16];
    float fillv = 1.e+36f, missv = 1.e+36f;
    int dim_time, dim_lon, dim_lat, dim_gridcell, dim_topounit, dim_landunit;
    int dim_column, dim_pft, dim_levgrnd, dim_levurb, dim_levlak, dim_numrad;
    int dim_month, dim_levsno, dim_ltype, dim_nvegwcs, dim_natpft, dim_nblobs;
    int dim_string_length, dim_levdcmp, dim_levtrc, dim_hist_interval;
    MPI_Offset lon, lat, levgrnd, levdcmp, levlak, ltype, natpft, string_length, hist_interval;

    /* 28 global attributes: */
    varid = NC_GLOBAL;
    PUT_ATTR_TXT("title", "ELM History file information")
    PUT_ATTR_TXT("source", "E3SM Land Model")
    PUT_ATTR_TXT("source_id", "6eb829238a")
    PUT_ATTR_TXT("product", "model-output")
    PUT_ATTR_TXT("realm", "land")
    PUT_ATTR_TXT("case", "I1850GSWCNPRDCTCBC_hcru_hcru")
    PUT_ATTR_TXT("username", "E3SM")
    PUT_ATTR_TXT("hostname", "cori-knl")
    PUT_ATTR_TXT("git_version", "6eb829238a")
    PUT_ATTR_TXT("history", "created on 07/13/21 20:37:15")
    PUT_ATTR_TXT("institution_id", "E3SM-Project")
    PUT_ATTR_TXT("institution", "LLNL (Lawrence Livermore National Laboratory, Livermore, CA 94550, USA); ANL (Argonne National Laboratory, Argonne, IL 60439, USA); BNL (Brookhaven National Laboratory, Upton, NY 11973, USA); LANL (Los Alamos National Laboratory, Los Alamos, NM 87545, USA); LBNL (Lawrence Berkeley National Laboratory, Berkeley, CA 94720, USA); ORNL (Oak Ridge National Laboratory, Oak Ridge, TN 37831, USA); PNNL (Pacific Northwest National Laboratory, Richland, WA 99352, USA); SNL (Sandia National Laboratories, Albuquerque, NM 87185, USA). Mailing address: LLNL Climate Program, c/o David C. Bader, Principal Investigator, L-103, 7000 East Avenue, Livermore, CA 94550, USA")
    PUT_ATTR_TXT("contact", "e3sm-data-support@listserv.llnl.gov")
    PUT_ATTR_TXT("Conventions", "CF-1.7")
    PUT_ATTR_TXT("comment", "NOTE: None of the variables are weighted by land fraction!")
    PUT_ATTR_TXT("Surface_dataset", "surfdata_360x720cru_simyr1850_c180216.nc")
    PUT_ATTR_TXT("Initial_conditions_dataset", "arbitrary initialization")
    PUT_ATTR_TXT("PFT_physiological_constants_dataset", "clm_params_c180524.nc")
    PUT_ATTR_INT1("ltype_vegetated_or_bare_soil", 1)
    PUT_ATTR_INT1("ltype_crop", 2)
    PUT_ATTR_INT1("ltype_landice", 3)
    PUT_ATTR_INT1("ltype_landice_multiple_elevation_classes", 4)
    PUT_ATTR_INT1("ltype_deep_lake", 5)
    PUT_ATTR_INT1("ltype_wetland", 6)
    PUT_ATTR_INT1("ltype_urban_tbd", 7)
    PUT_ATTR_INT1("ltype_urban_hd", 8)
    PUT_ATTR_INT1("ltype_urban_md", 9)
    { /* h1 only */
        PUT_ATTR_TXT("Time_constant_3Dvars_filenamae", "./I1850GSWCNPRDCTCBC_hcru_hcru.elm.h0.0001-01-01-00000.nc")
        PUT_ATTR_TXT("Time_constant_3Dvars", "ZSOI:DZSOI:WATSAT:SUCSAT:BSW:HKSAT:ZLAKE:DZLAKE")
    }

    lon           = 720;
    lat           = 360;
    levgrnd       =  15;
    levdcmp       =  15;
    levlak        =  10;
    ltype         =   9;
    natpft        =  17;
    string_length =  16;
    hist_interval =   2;

    err = nc_def_dim(ncid, "time",           NC_UNLIMITED, &dim_time); ERR
    err = nc_def_dim(ncid, "lon",                     lon, &dim_lon); ERR
    err = nc_def_dim(ncid, "lat",                     lat, &dim_lat); ERR
    err = nc_def_dim(ncid, "gridcell",              62482, &dim_gridcell); ERR
    err = nc_def_dim(ncid, "topounit",              62482, &dim_topounit); ERR
    err = nc_def_dim(ncid, "landunit",             271014, &dim_landunit); ERR
    err = nc_def_dim(ncid, "column",              1020642, &dim_column); ERR
    err = nc_def_dim(ncid, "pft",                 2020354, &dim_pft); ERR
    err = nc_def_dim(ncid, "levgrnd",             levgrnd, &dim_levgrnd); ERR
    err = nc_def_dim(ncid, "levurb",                    5, &dim_levurb); ERR
    err = nc_def_dim(ncid, "levlak",               levlak, &dim_levlak); ERR
    err = nc_def_dim(ncid, "numrad",                    2, &dim_numrad); ERR
    err = nc_def_dim(ncid, "month",                    12, &dim_month); ERR
    err = nc_def_dim(ncid, "levsno",                    5, &dim_levsno); ERR
    err = nc_def_dim(ncid, "ltype",                 ltype, &dim_ltype); ERR
    err = nc_def_dim(ncid, "nvegwcs",                   4, &dim_nvegwcs); ERR
    err = nc_def_dim(ncid, "natpft",               natpft, &dim_natpft); ERR
    err = nc_def_dim(ncid, "string_length", string_length, &dim_string_length); ERR
    err = nc_def_dim(ncid, "levdcmp",             levdcmp, &dim_levdcmp); ERR
    err = nc_def_dim(ncid, "levtrc",                   10, &dim_levtrc); ERR
    err = nc_def_dim(ncid, "hist_interval", hist_interval, &dim_hist_interval); ERR

    /* float levgrnd(levgrnd) */
    DEF_VAR("levgrnd", NC_FLOAT, 1, &dim_levgrnd, REC_ITYPE, -1)
    PUT_ATTR_TXT("long_name", "coordinate soil levels")
    PUT_ATTR_TXT("units", "m")

    /* float levlak(levlak) */
    DEF_VAR("levlak", NC_FLOAT, 1, &dim_levlak, REC_ITYPE, -1)
    PUT_ATTR_TXT("long_name", "coordinate lake levels")
    PUT_ATTR_TXT("units", "m")

    /* float levdcmp(levdcmp) */
    DEF_VAR("levdcmp", NC_FLOAT, 1, &dim_levdcmp, REC_ITYPE, -1)
    PUT_ATTR_TXT("long_name", "coordinate soil levels")
    PUT_ATTR_TXT("units", "m")

    /* float time(time) */
    DEF_VAR("time", NC_FLOAT, 1, &dim_time, REC_ITYPE, -1)
    PUT_ATTR_TXT("long_name", "time")
    PUT_ATTR_TXT("units", "days since 0001-01-01 00:00:00")
    PUT_ATTR_TXT("calendar", "noleap")
    PUT_ATTR_TXT("bounds", "time_bounds")

    /* int mcdate(time) */
    DEF_VAR("mcdate", NC_INT, 1, &dim_time, MPI_INT, -1)
    PUT_ATTR_TXT("long_name", "current date (YYYYMMDD)")

    /* int mcsec(time) */
    DEF_VAR("mcsec", NC_INT, 1, &dim_time, MPI_INT, -1)
    PUT_ATTR_TXT("long_name", "current seconds of current date")
    PUT_ATTR_TXT("units", "s")

    /* int mdcur(time) */
    DEF_VAR("mdcur", NC_INT, 1, &dim_time, MPI_INT, -1)
    PUT_ATTR_TXT("long_name", "current day (from base day)")

    /* int mscur(time) */
    DEF_VAR("mscur", NC_INT, 1, &dim_time, MPI_INT, -1)
    PUT_ATTR_TXT("long_name", "current seconds of current day")

    /* int nstep(time) */
    DEF_VAR("nstep", NC_INT, 1, &dim_time, MPI_INT, -1)
    PUT_ATTR_TXT("long_name", "time step")

    /* double time_bounds(time, hist_interval) */
    dimids[0] = dim_time;
    dimids[1] = dim_hist_interval;
    DEF_VAR("time_bounds", NC_DOUBLE, 2, dimids, MPI_DOUBLE, -1)
    PUT_ATTR_TXT("long_name", "history time interval endpoints")

    /* char date_written(time, string_length) */
    dimids[0] = dim_time;
    dimids[1] = dim_string_length;
    DEF_VAR("date_written", NC_CHAR, 2, dimids, MPI_CHAR, -1)

    /* char time_written(time, string_length) */
    dimids[0] = dim_time;
    dimids[1] = dim_string_length;
    DEF_VAR("time_written", NC_CHAR, 2, dimids, MPI_CHAR, -1)

    /* float lon(lon) */
    DEF_VAR("lon", NC_FLOAT, 1, &dim_lon, REC_ITYPE, -1)
    PUT_ATTR_TXT("long_name", "coordinate longitude")
    PUT_ATTR_TXT("units", "degrees_east")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float lat(lat) */
    DEF_VAR("lat", NC_FLOAT, 1, &dim_lat, REC_ITYPE, -1)
    PUT_ATTR_TXT("long_name", "coordinate latitude")
    PUT_ATTR_TXT("units", "degrees_north")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float area(lat, lon) */
    dimids[0] = dim_lat;
    dimids[1] = dim_lon;
    DEF_VAR("area", NC_FLOAT, 2, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "grid cell areas")
    PUT_ATTR_TXT("units", "km^2")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float topo(lat, lon) */
    dimids[0] = dim_lat;
    dimids[1] = dim_lon;
    DEF_VAR("topo", NC_FLOAT, 2, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "grid cell topography")
    PUT_ATTR_TXT("units", "m")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float landfrac(lat, lon) */
    dimids[0] = dim_lat;
    dimids[1] = dim_lon;
    DEF_VAR("landfrac", NC_FLOAT, 2, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "land fraction")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* int landmask(lat, lon) */
    dimids[0] = dim_lat;
    dimids[1] = dim_lon;
    DEF_VAR("landmask", NC_INT, 2, dimids, MPI_INT, 0)
    PUT_ATTR_TXT("long_name", "land/ocean mask (0.=ocean and 1.=land)")
    PUT_ATTR_FILL(-9999)
    PUT_ATTR_INT1("missing_value", -9999)

    /* int pftmask(lat, lon) */
    dimids[0] = dim_lat;
    dimids[1] = dim_lon;
    DEF_VAR("pftmask", NC_INT, 2, dimids, MPI_INT, 0)
    PUT_ATTR_TXT("long_name", "pft real/fake mask (0.=fake and 1.=real)")
    PUT_ATTR_FILL(-9999)
    PUT_ATTR_INT1("missing_value", -9999)

    {  /* h0 only */
        /* float ZSOI(levgrnd, lat, lon) */
        dimids[0] = dim_levgrnd;
        dimids[1] = dim_lat;
        dimids[2] = dim_lon;
        DEF_VAR("ZSOI", NC_FLOAT, 3, dimids, REC_ITYPE, 1)
        PUT_ATTR_TXT("long_name", "soil depth")
        PUT_ATTR_TXT("units", "m")
        PUT_ATTR_FILL(fillv)
        PUT_ATTR_FLT1("missing_value", missv)

        /* float DZSOI(levgrnd, lat, lon) */
        dimids[0] = dim_levgrnd;
        dimids[1] = dim_lat;
        dimids[2] = dim_lon;
        DEF_VAR("DZSOI", NC_FLOAT, 3, dimids, REC_ITYPE, 1)
        PUT_ATTR_TXT("long_name", "soil thickness")
        PUT_ATTR_TXT("units", "m")
        PUT_ATTR_FILL(fillv)
        PUT_ATTR_FLT1("missing_value", missv)

        /* float WATSAT(levgrnd, lat, lon) */
        dimids[0] = dim_levgrnd;
        dimids[1] = dim_lat;
        dimids[2] = dim_lon;
        DEF_VAR("WATSAT", NC_FLOAT, 3, dimids, REC_ITYPE, 1)
        PUT_ATTR_TXT("long_name", "saturated soil water content (porosity)")
        PUT_ATTR_TXT("units", "mm3/mm3")
        PUT_ATTR_FILL(fillv)
        PUT_ATTR_FLT1("missing_value", missv)

        /* float SUCSAT(levgrnd, lat, lon) */
        dimids[0] = dim_levgrnd;
        dimids[1] = dim_lat;
        dimids[2] = dim_lon;
        DEF_VAR("SUCSAT", NC_FLOAT, 3, dimids, REC_ITYPE, 1)
        PUT_ATTR_TXT("long_name", "saturated soil matric potential")
        PUT_ATTR_TXT("units", "mm")
        PUT_ATTR_FILL(fillv)
        PUT_ATTR_FLT1("missing_value", missv)

        /* float BSW(levgrnd, lat, lon) */
        dimids[0] = dim_levgrnd;
        dimids[1] = dim_lat;
        dimids[2] = dim_lon;
        DEF_VAR("BSW", NC_FLOAT, 3, dimids, REC_ITYPE, 1)
        PUT_ATTR_TXT("long_name", "slope of soil water retention curve")
        PUT_ATTR_TXT("units", "1")
        PUT_ATTR_FILL(fillv)
        PUT_ATTR_FLT1("missing_value", missv)

        /* float HKSAT(levgrnd, lat, lon) */
        dimids[0] = dim_levgrnd;
        dimids[1] = dim_lat;
        dimids[2] = dim_lon;
        DEF_VAR("HKSAT", NC_FLOAT, 3, dimids, REC_ITYPE, 1)
        PUT_ATTR_TXT("long_name", "saturated hydraulic conductivity")
        PUT_ATTR_TXT("units", "1")
        PUT_ATTR_FILL(fillv)
        PUT_ATTR_FLT1("missing_value", missv)

        /* float ZLAKE(levlak, lat, lon) */
        dimids[0] = dim_levlak;
        dimids[1] = dim_lat;
        dimids[2] = dim_lon;
        DEF_VAR("ZLAKE", NC_FLOAT, 3, dimids, REC_ITYPE, 2)
        PUT_ATTR_TXT("long_name", "lake layer node depth")
        PUT_ATTR_TXT("units", "m")
        PUT_ATTR_FILL(fillv)
        PUT_ATTR_FLT1("missing_value", missv)

        /* float DZLAKE(levlak, lat, lon) */
        dimids[0] = dim_levlak;
        dimids[1] = dim_lat;
        dimids[2] = dim_lon;
        DEF_VAR("DZLAKE", NC_FLOAT, 3, dimids, REC_ITYPE, 2)
        PUT_ATTR_TXT("long_name", "lake layer thickness")
        PUT_ATTR_TXT("units", "m")
        PUT_ATTR_FILL(fillv)
        PUT_ATTR_FLT1("missing_value", missv)
    }

    /* float ACTUAL_IMMOB(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("ACTUAL_IMMOB", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "actual N immobilization")
    PUT_ATTR_TXT("units", "gN/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float ACTUAL_IMMOB_P(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("ACTUAL_IMMOB_P", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "actual P immobilization")
    PUT_ATTR_TXT("units", "gP/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float ADSORBTION_P(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("ADSORBTION_P", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "adsorb P flux")
    PUT_ATTR_TXT("units", "gP/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float AGNPP(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("AGNPP", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "aboveground NPP")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float AGWDNPP(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("AGWDNPP", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "aboveground wood NPP")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float ALT(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("ALT", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "current active layer thickness")
    PUT_ATTR_TXT("units", "m")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float ALTMAX(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("ALTMAX", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "maximum annual active layer thickness")
    PUT_ATTR_TXT("units", "m")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float ALTMAX_LASTYEAR(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("ALTMAX_LASTYEAR", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "maximum prior year active layer thickness")
    PUT_ATTR_TXT("units", "m")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float AR(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("AR", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "autotrophic respiration (MR + GR)")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float AVAILC(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("AVAILC", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "C flux available for allocation")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float AVAIL_RETRANSP(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("AVAIL_RETRANSP", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "P flux available from retranslocation pool")
    PUT_ATTR_TXT("units", "gP/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float BAF_CROP(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("BAF_CROP", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "fractional area burned for crop")
    PUT_ATTR_TXT("units", "proportion/sec")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float BAF_PEATF(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("BAF_PEATF", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "fractional area burned in peatland")
    PUT_ATTR_TXT("units", "proportion/sec")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float BCDEP(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("BCDEP", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total BC deposition (dry+wet) from atmosphere")
    PUT_ATTR_TXT("units", "kg/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float BGNPP(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("BGNPP", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "belowground NPP")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float BIOCHEM_PMIN(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("BIOCHEM_PMIN", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "biochemical rate of P mineralization")
    PUT_ATTR_TXT("units", "gP/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float BIOCHEM_PMIN_TO_PLANT(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("BIOCHEM_PMIN_TO_PLANT", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "plant uptake of biochemical P mineralization")
    PUT_ATTR_TXT("units", "gP/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float BTRAN(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("BTRAN", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "transpiration beta factor")
    PUT_ATTR_TXT("units", "1")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float BUILDHEAT(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("BUILDHEAT", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "heat flux from urban building interior to walls and roof")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float CH4PROD(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("CH4PROD", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "Gridcell total production of CH4")
    PUT_ATTR_TXT("units", "gC/m2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float CH4_SURF_AERE_SAT(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("CH4_SURF_AERE_SAT", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "aerenchyma surface CH4 flux for inundated area; (+ to atm)")
    PUT_ATTR_TXT("units", "mol/m2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float CH4_SURF_AERE_UNSAT(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("CH4_SURF_AERE_UNSAT", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "aerenchyma surface CH4 flux for non-inundated area; (+ to atm)")
    PUT_ATTR_TXT("units", "mol/m2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float CH4_SURF_DIFF_SAT(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("CH4_SURF_DIFF_SAT", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "diffusive surface CH4 flux for inundated / lake area; (+ to atm)")
    PUT_ATTR_TXT("units", "mol/m2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float CH4_SURF_DIFF_UNSAT(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("CH4_SURF_DIFF_UNSAT", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "diffusive surface CH4 flux for non-inundated area; (+ to atm)")
    PUT_ATTR_TXT("units", "mol/m2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float CH4_SURF_EBUL_SAT(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("CH4_SURF_EBUL_SAT", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "ebullition surface CH4 flux for inundated / lake area; (+ to atm)")
    PUT_ATTR_TXT("units", "mol/m2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float CH4_SURF_EBUL_UNSAT(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("CH4_SURF_EBUL_UNSAT", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "ebullition surface CH4 flux for non-inundated area; (+ to atm)")
    PUT_ATTR_TXT("units", "mol/m2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float COL_PTRUNC(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("COL_PTRUNC", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "column-level sink for P truncation")
    PUT_ATTR_TXT("units", "gP/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float CONC_CH4_SAT(time, levgrnd, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levgrnd;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("CONC_CH4_SAT", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "CH4 soil Concentration for inundated / lake area")
    PUT_ATTR_TXT("units", "mol/m3")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float CONC_CH4_UNSAT(time, levgrnd, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levgrnd;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("CONC_CH4_UNSAT", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "CH4 soil Concentration for non-inundated area")
    PUT_ATTR_TXT("units", "mol/m3")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float CONC_O2_SAT(time, levgrnd, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levgrnd;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("CONC_O2_SAT", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "O2 soil Concentration for inundated / lake area")
    PUT_ATTR_TXT("units", "mol/m3")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float CONC_O2_UNSAT(time, levgrnd, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levgrnd;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("CONC_O2_UNSAT", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "O2 soil Concentration for non-inundated area")
    PUT_ATTR_TXT("units", "mol/m3")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float CPOOL(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("CPOOL", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "temporary photosynthate C pool")
    PUT_ATTR_TXT("units", "gC/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float CWDC(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("CWDC", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "CWD C")
    PUT_ATTR_TXT("units", "gC/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float CWDC_HR(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("CWDC_HR", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "coarse woody debris C heterotrophic respiration")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float CWDC_LOSS(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("CWDC_LOSS", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "coarse woody debris C loss")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float CWDC_TO_LITR2C(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("CWDC_TO_LITR2C", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "decomp. of coarse woody debris C to litter 2 C")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float CWDC_TO_LITR3C(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("CWDC_TO_LITR3C", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "decomp. of coarse woody debris C to litter 3 C")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float CWDC_vr(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("CWDC_vr", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "CWD C (vertically resolved)")
    PUT_ATTR_TXT("units", "gC/m^3")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float CWDN(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("CWDN", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "CWD N")
    PUT_ATTR_TXT("units", "gN/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float CWDN_TO_LITR2N(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("CWDN_TO_LITR2N", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "decomp. of coarse woody debris N to litter 2 N")
    PUT_ATTR_TXT("units", "gN/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float CWDN_TO_LITR3N(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("CWDN_TO_LITR3N", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "decomp. of coarse woody debris N to litter 3 N")
    PUT_ATTR_TXT("units", "gN/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float CWDN_vr(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("CWDN_vr", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "CWD N (vertically resolved)")
    PUT_ATTR_TXT("units", "gN/m^3")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float CWDP(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("CWDP", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "CWD P")
    PUT_ATTR_TXT("units", "gP/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float CWDP_TO_LITR2P(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("CWDP_TO_LITR2P", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "decomp. of coarse woody debris P to litter 2 N")
    PUT_ATTR_TXT("units", "gP/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float CWDP_TO_LITR3P(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("CWDP_TO_LITR3P", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "decomp. of coarse woody debris P to litter 3 N")
    PUT_ATTR_TXT("units", "gP/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float CWDP_vr(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("CWDP_vr", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "CWD P (vertically resolved)")
    PUT_ATTR_TXT("units", "gP/m^3")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float DEADCROOTC(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("DEADCROOTC", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "dead coarse root C")
    PUT_ATTR_TXT("units", "gC/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float DEADCROOTN(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("DEADCROOTN", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "dead coarse root N")
    PUT_ATTR_TXT("units", "gN/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float DEADCROOTP(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("DEADCROOTP", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "dead coarse root P")
    PUT_ATTR_TXT("units", "gP/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float DEADSTEMC(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("DEADSTEMC", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "dead stem C")
    PUT_ATTR_TXT("units", "gC/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float DEADSTEMN(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("DEADSTEMN", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "dead stem N")
    PUT_ATTR_TXT("units", "gN/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float DEADSTEMP(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("DEADSTEMP", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "dead stem P")
    PUT_ATTR_TXT("units", "gP/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float DEFICIT(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("DEFICIT", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "runoff supply deficit")
    PUT_ATTR_TXT("units", "mm/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float DENIT(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("DENIT", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total rate of denitrification")
    PUT_ATTR_TXT("units", "gN/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float DESORPTION_P(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("DESORPTION_P", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "desorp P flux")
    PUT_ATTR_TXT("units", "gP/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float DISPVEGC(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("DISPVEGC", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "displayed veg carbon, excluding storage and cpool")
    PUT_ATTR_TXT("units", "gC/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float DISPVEGN(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("DISPVEGN", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "displayed vegetation nitrogen")
    PUT_ATTR_TXT("units", "gN/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float DISPVEGP(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("DISPVEGP", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "displayed vegetation phosphorus")
    PUT_ATTR_TXT("units", "gP/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float DSTDEP(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("DSTDEP", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total dust deposition (dry+wet) from atmosphere")
    PUT_ATTR_TXT("units", "kg/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float DSTFLXT(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("DSTFLXT", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total surface dust emission")
    PUT_ATTR_TXT("units", "kg/m2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float DWB(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("DWB", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "net change in total water mass")
    PUT_ATTR_TXT("units", "mm/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float DWT_CONV_CFLUX_DRIBBLED(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("DWT_CONV_CFLUX_DRIBBLED", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "conversion C flux (immediate loss to atm), dribbled throughout the year")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float DWT_CONV_CFLUX_GRC(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("DWT_CONV_CFLUX_GRC", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "conversion C flux (immediate loss to atm) (0 at all times except first timestep of year)")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float DWT_CONV_NFLUX_GRC(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("DWT_CONV_NFLUX_GRC", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "conversion C flux (immediate loss to atm) (0 at all times except first timestep of year)")
    PUT_ATTR_TXT("units", "gN/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float DWT_CONV_PFLUX_GRC(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("DWT_CONV_PFLUX_GRC", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "conversion C flux (immediate loss to atm) (0 at all times except first timestep of year)")
    PUT_ATTR_TXT("units", "gP/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float DWT_SLASH_CFLUX(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("DWT_SLASH_CFLUX", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "slash C flux to litter and CWD due to land use")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float DWT_SLASH_NFLUX(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("DWT_SLASH_NFLUX", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "slash N flux to litter and CWD due to land use")
    PUT_ATTR_TXT("units", "gN/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float DWT_SLASH_PFLUX(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("DWT_SLASH_PFLUX", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "slash P flux to litter and CWD due to land use")
    PUT_ATTR_TXT("units", "gP/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float EFLX_DYNBAL(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("EFLX_DYNBAL", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "dynamic land cover change conversion energy flux")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float EFLX_GRND_LAKE(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("EFLX_GRND_LAKE", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "net heat flux into lake/snow surface, excluding light transmission")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float EFLX_LH_TOT(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("EFLX_LH_TOT", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total latent heat flux [+ to atm]")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float EFLX_LH_TOT_R(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("EFLX_LH_TOT_R", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "Rural total evaporation")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float EFLX_LH_TOT_U(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("EFLX_LH_TOT_U", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "Urban total evaporation")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float ELAI(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("ELAI", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "exposed one-sided leaf area index")
    PUT_ATTR_TXT("units", "m^2/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float ER(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("ER", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total ecosystem respiration, autotrophic + heterotrophic")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float ERRH2O(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("ERRH2O", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total water conservation error")
    PUT_ATTR_TXT("units", "mm")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float ERRH2OSNO(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("ERRH2OSNO", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "imbalance in snow depth (liquid water)")
    PUT_ATTR_TXT("units", "mm")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float ERRSEB(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("ERRSEB", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "surface energy conservation error")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float ERRSOI(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("ERRSOI", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "soil/lake energy conservation error")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float ERRSOL(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("ERRSOL", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "solar radiation conservation error")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float ESAI(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("ESAI", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "exposed one-sided stem area index")
    PUT_ATTR_TXT("units", "m^2/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FAREA_BURNED(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FAREA_BURNED", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "timestep fractional area burned")
    PUT_ATTR_TXT("units", "proportion")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FCEV(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FCEV", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "canopy evaporation")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FCH4(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FCH4", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "Gridcell surface CH4 flux to atmosphere (+ to atm)")
    PUT_ATTR_TXT("units", "kgC/m2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FCH4TOCO2(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FCH4TOCO2", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "Gridcell oxidation of CH4 to CO2")
    PUT_ATTR_TXT("units", "gC/m2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FCH4_DFSAT(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FCH4_DFSAT", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "CH4 additional flux due to changing fsat, vegetated landunits only")
    PUT_ATTR_TXT("units", "kgC/m2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FCOV(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FCOV", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "fractional impermeable area")
    PUT_ATTR_TXT("units", "unitless")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FCTR(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FCTR", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "canopy transpiration")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FGEV(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FGEV", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "ground evaporation")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FGR(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FGR", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "heat flux into soil/snow including snow melt and lake / snow light transmission")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FGR12(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FGR12", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "heat flux between soil layers 1 and 2")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FGR_R(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FGR_R", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "Rural heat flux into soil/snow including snow melt and snow light transmission")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FGR_U(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FGR_U", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "Urban heat flux into soil/snow including snow melt")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FH2OSFC(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FH2OSFC", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "fraction of ground covered by surface water")
    PUT_ATTR_TXT("units", "1")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FINUNDATED(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FINUNDATED", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "fractional inundated area of vegetated columns")
    PUT_ATTR_TXT("units", "1")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FINUNDATED_LAG(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FINUNDATED_LAG", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "time-lagged inundated fraction of vegetated columns")
    PUT_ATTR_TXT("units", "1")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FIRA(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FIRA", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "net infrared (longwave) radiation")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FIRA_R(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FIRA_R", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "Rural net infrared (longwave) radiation")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FIRA_U(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FIRA_U", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "Urban net infrared (longwave) radiation")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FIRE(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FIRE", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "emitted infrared (longwave) radiation")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FIRE_R(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FIRE_R", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "Rural emitted infrared (longwave) radiation")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FIRE_U(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FIRE_U", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "Urban emitted infrared (longwave) radiation")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FLDS(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FLDS", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "atmospheric longwave radiation")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FPG(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FPG", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "fraction of potential gpp due to N limitation")
    PUT_ATTR_TXT("units", "proportion")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FPG_P(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FPG_P", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "fraction of potential gpp due to P limitation")
    PUT_ATTR_TXT("units", "proportion")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FPI(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FPI", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "fraction of potential immobilization of nitrogen")
    PUT_ATTR_TXT("units", "proportion")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FPI_P(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FPI_P", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "fraction of potential immobilization of phosphorus")
    PUT_ATTR_TXT("units", "proportion")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FPI_P_vr(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("FPI_P_vr", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "fraction of potential immobilization of phosphorus")
    PUT_ATTR_TXT("units", "proportion")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FPI_vr(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("FPI_vr", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "fraction of potential immobilization of nitrogen")
    PUT_ATTR_TXT("units", "proportion")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FPSN(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FPSN", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "photosynthesis")
    PUT_ATTR_TXT("units", "umol/m2s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FPSN_WC(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FPSN_WC", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "Rubisco-limited photosynthesis")
    PUT_ATTR_TXT("units", "umol/m2s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FPSN_WJ(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FPSN_WJ", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "RuBP-limited photosynthesis")
    PUT_ATTR_TXT("units", "umol/m2s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FPSN_WP(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FPSN_WP", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "Product-limited photosynthesis")
    PUT_ATTR_TXT("units", "umol/m2s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FROOTC(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FROOTC", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "fine root C")
    PUT_ATTR_TXT("units", "gC/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FROOTC_ALLOC(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FROOTC_ALLOC", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "fine root C allocation")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FROOTC_LOSS(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FROOTC_LOSS", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "fine root C loss")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FROOTN(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FROOTN", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "fine root N")
    PUT_ATTR_TXT("units", "gN/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FROOTP(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FROOTP", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "fine root P")
    PUT_ATTR_TXT("units", "gP/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FROST_TABLE(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FROST_TABLE", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "frost table depth (vegetated landunits only)")
    PUT_ATTR_TXT("units", "m")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FSA(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FSA", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "absorbed solar radiation")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FSAT(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FSAT", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "fractional area with water table at surface")
    PUT_ATTR_TXT("units", "unitless")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FSA_R(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FSA_R", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "Rural absorbed solar radiation")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FSA_U(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FSA_U", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "Urban absorbed solar radiation")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FSDS(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FSDS", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "atmospheric incident solar radiation")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FSDSND(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FSDSND", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "direct nir incident solar radiation")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FSDSNDLN(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FSDSNDLN", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "direct nir incident solar radiation at local noon")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FSDSNI(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FSDSNI", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "diffuse nir incident solar radiation")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FSDSVD(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FSDSVD", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "direct vis incident solar radiation")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FSDSVDLN(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FSDSVDLN", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "direct vis incident solar radiation at local noon")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FSDSVI(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FSDSVI", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "diffuse vis incident solar radiation")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FSDSVILN(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FSDSVILN", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "diffuse vis incident solar radiation at local noon")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FSH(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FSH", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "sensible heat")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FSH_G(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FSH_G", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "sensible heat from ground")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FSH_NODYNLNDUSE(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FSH_NODYNLNDUSE", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "sensible heat not including correction for land use change")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FSH_R(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FSH_R", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "Rural sensible heat")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FSH_U(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FSH_U", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "Urban sensible heat")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FSH_V(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FSH_V", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "sensible heat from veg")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FSM(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FSM", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "snow melt heat flux")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FSM_R(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FSM_R", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "Rural snow melt heat flux")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FSM_U(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FSM_U", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "Urban snow melt heat flux")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FSNO(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FSNO", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "fraction of ground covered by snow")
    PUT_ATTR_TXT("units", "1")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FSNO_EFF(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FSNO_EFF", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "effective fraction of ground covered by snow")
    PUT_ATTR_TXT("units", "1")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FSR(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FSR", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "reflected solar radiation")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FSRND(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FSRND", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "direct nir reflected solar radiation")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FSRNDLN(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FSRNDLN", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "direct nir reflected solar radiation at local noon")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FSRNI(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FSRNI", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "diffuse nir reflected solar radiation")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FSRVD(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FSRVD", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "direct vis reflected solar radiation")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FSRVDLN(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FSRVDLN", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "direct vis reflected solar radiation at local noon")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float FSRVI(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("FSRVI", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "diffuse vis reflected solar radiation")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float F_CO2_SOIL(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("F_CO2_SOIL", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total soil-atm. CO2 exchange")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float F_CO2_SOIL_vr(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("F_CO2_SOIL_vr", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "total vertically resolved soil-atm. CO2 exchange")
    PUT_ATTR_TXT("units", "gC/m^3/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float F_DENIT(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("F_DENIT", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "denitrification flux")
    PUT_ATTR_TXT("units", "gN/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float F_DENIT_vr(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("F_DENIT_vr", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "denitrification flux")
    PUT_ATTR_TXT("units", "gN/m^3/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float F_N2O_DENIT(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("F_N2O_DENIT", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "denitrification N2O flux")
    PUT_ATTR_TXT("units", "gN/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float F_N2O_NIT(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("F_N2O_NIT", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "nitrification N2O flux")
    PUT_ATTR_TXT("units", "gN/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float F_NIT(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("F_NIT", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "nitrification flux")
    PUT_ATTR_TXT("units", "gN/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float F_NIT_vr(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("F_NIT_vr", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "nitrification flux")
    PUT_ATTR_TXT("units", "gN/m^3/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float GC_HEAT1(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("GC_HEAT1", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "initial gridcell total heat content")
    PUT_ATTR_TXT("units", "J/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float GC_ICE1(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("GC_ICE1", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "initial gridcell total ice content")
    PUT_ATTR_TXT("units", "mm")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float GC_LIQ1(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("GC_LIQ1", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "initial gridcell total liq content")
    PUT_ATTR_TXT("units", "mm")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float GPP(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("GPP", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "gross primary production")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float GR(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("GR", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total growth respiration")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float GROSS_NMIN(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("GROSS_NMIN", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "gross rate of N mineralization")
    PUT_ATTR_TXT("units", "gN/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float GROSS_PMIN(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("GROSS_PMIN", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "gross rate of P mineralization")
    PUT_ATTR_TXT("units", "gP/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float H2OCAN(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("H2OCAN", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "intercepted water")
    PUT_ATTR_TXT("units", "mm")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float H2OSFC(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("H2OSFC", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "surface water depth")
    PUT_ATTR_TXT("units", "mm")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float H2OSNO(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("H2OSNO", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "snow depth (liquid water)")
    PUT_ATTR_TXT("units", "mm")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float H2OSNO_TOP(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("H2OSNO_TOP", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "mass of snow in top snow layer")
    PUT_ATTR_TXT("units", "kg/m2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float H2OSOI(time, levgrnd, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levgrnd;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("H2OSOI", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "volumetric soil water (vegetated landunits only)")
    PUT_ATTR_TXT("units", "mm3/mm3")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float HC(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("HC", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "heat content of soil/snow/lake")
    PUT_ATTR_TXT("units", "MJ/m2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float HCSOI(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("HCSOI", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "soil heat content")
    PUT_ATTR_TXT("units", "MJ/m2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float HEAT_FROM_AC(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("HEAT_FROM_AC", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "sensible heat flux put into canyon due to heat removed from air conditioning")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float HR(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("HR", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total heterotrophic respiration")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float HR_vr(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("HR_vr", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "total vertically resolved heterotrophic respiration")
    PUT_ATTR_TXT("units", "gC/m^3/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float HTOP(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("HTOP", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "canopy top")
    PUT_ATTR_TXT("units", "m")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float INT_SNOW(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("INT_SNOW", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "accumulated swe (vegetated landunits only)")
    PUT_ATTR_TXT("units", "mm")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LABILEP(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("LABILEP", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "soil Labile P")
    PUT_ATTR_TXT("units", "gP/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LABILEP_TO_SECONDP(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("LABILEP_TO_SECONDP", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "LABILE P TO SECONDARY MINERAL P")
    PUT_ATTR_TXT("units", "gP/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LABILEP_vr(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("LABILEP_vr", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "soil labile P (vert. res.)")
    PUT_ATTR_TXT("units", "gp/m^3")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LAISHA(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("LAISHA", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "shaded projected leaf area index")
    PUT_ATTR_TXT("units", "1")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LAISUN(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("LAISUN", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "sunlit projected leaf area index")
    PUT_ATTR_TXT("units", "1")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LAKEICEFRAC(time, levlak, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levlak;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("LAKEICEFRAC", NC_FLOAT, 4, dimids, REC_ITYPE, 2)
    PUT_ATTR_TXT("long_name", "lake layer ice mass fraction")
    PUT_ATTR_TXT("units", "unitless")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LAKEICETHICK(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("LAKEICETHICK", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "thickness of lake ice (including physical expansion on freezing)")
    PUT_ATTR_TXT("units", "m")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LAND_UPTAKE(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("LAND_UPTAKE", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "NEE minus LAND_USE_FLUX, negative for update")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LAND_USE_FLUX(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("LAND_USE_FLUX", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total C emitted from land cover conversion and wood product pools")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LEAFC(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("LEAFC", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "leaf C")
    PUT_ATTR_TXT("units", "gC/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LEAFC_ALLOC(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("LEAFC_ALLOC", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "leaf C allocation")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LEAFC_LOSS(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("LEAFC_LOSS", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "leaf C loss")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LEAFC_TO_LITTER(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("LEAFC_TO_LITTER", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "leaf C litterfall")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LEAFN(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("LEAFN", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "leaf N")
    PUT_ATTR_TXT("units", "gN/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LEAFP(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("LEAFP", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "leaf P")
    PUT_ATTR_TXT("units", "gP/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LEAF_MR(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("LEAF_MR", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "leaf maintenance respiration")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LFC2(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("LFC2", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "conversion area fraction of BET and BDT that burned")
    PUT_ATTR_TXT("units", "per sec")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LITFALL(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("LITFALL", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "litterfall (leaves and fine roots)")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LITHR(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("LITHR", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "litter heterotrophic respiration")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LITR1C(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("LITR1C", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "LITR1 C")
    PUT_ATTR_TXT("units", "gC/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LITR1C_TO_SOIL1C(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("LITR1C_TO_SOIL1C", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "decomp. of litter 1 C to soil 1 C")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LITR1C_vr(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("LITR1C_vr", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "LITR1 C (vertically resolved)")
    PUT_ATTR_TXT("units", "gC/m^3")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LITR1N(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("LITR1N", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "LITR1 N")
    PUT_ATTR_TXT("units", "gN/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LITR1N_TNDNCY_VERT_TRANS(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("LITR1N_TNDNCY_VERT_TRANS", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "litter 1 N tendency due to vertical transport")
    PUT_ATTR_TXT("units", "gN/m^3/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LITR1N_TO_SOIL1N(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("LITR1N_TO_SOIL1N", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "decomp. of litter 1 N to soil 1 N")
    PUT_ATTR_TXT("units", "gN/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LITR1N_vr(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("LITR1N_vr", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "LITR1 N (vertically resolved)")
    PUT_ATTR_TXT("units", "gN/m^3")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LITR1P(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("LITR1P", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "LITR1 P")
    PUT_ATTR_TXT("units", "gP/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LITR1P_TNDNCY_VERT_TRANS(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("LITR1P_TNDNCY_VERT_TRANS", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "litter 1 P tendency due to vertical transport")
    PUT_ATTR_TXT("units", "gP/m^3/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LITR1P_TO_SOIL1P(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("LITR1P_TO_SOIL1P", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "decomp. of litter 1 P to soil 1 N")
    PUT_ATTR_TXT("units", "gP/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LITR1P_vr(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("LITR1P_vr", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "LITR1 P (vertically resolved)")
    PUT_ATTR_TXT("units", "gP/m^3")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LITR1_HR(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("LITR1_HR", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "Het. Resp. from litter 1")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LITR2C(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("LITR2C", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "LITR2 C")
    PUT_ATTR_TXT("units", "gC/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LITR2C_TO_SOIL2C(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("LITR2C_TO_SOIL2C", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "decomp. of litter 2 C to soil 2 C")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LITR2C_vr(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("LITR2C_vr", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "LITR2 C (vertically resolved)")
    PUT_ATTR_TXT("units", "gC/m^3")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LITR2N(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("LITR2N", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "LITR2 N")
    PUT_ATTR_TXT("units", "gN/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LITR2N_TNDNCY_VERT_TRANS(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("LITR2N_TNDNCY_VERT_TRANS", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "litter 2 N tendency due to vertical transport")
    PUT_ATTR_TXT("units", "gN/m^3/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LITR2N_TO_SOIL2N(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("LITR2N_TO_SOIL2N", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "decomp. of litter 2 N to soil 2 N")
    PUT_ATTR_TXT("units", "gN/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LITR2N_vr(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("LITR2N_vr", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "LITR2 N (vertically resolved)")
    PUT_ATTR_TXT("units", "gN/m^3")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LITR2P(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("LITR2P", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "LITR2 P")
    PUT_ATTR_TXT("units", "gP/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LITR2P_TNDNCY_VERT_TRANS(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("LITR2P_TNDNCY_VERT_TRANS", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "litter 2 P tendency due to vertical transport")
    PUT_ATTR_TXT("units", "gP/m^3/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LITR2P_TO_SOIL2P(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("LITR2P_TO_SOIL2P", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "decomp. of litter 2 P to soil 2 N")
    PUT_ATTR_TXT("units", "gP/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LITR2P_vr(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("LITR2P_vr", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "LITR2 P (vertically resolved)")
    PUT_ATTR_TXT("units", "gP/m^3")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LITR2_HR(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("LITR2_HR", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "Het. Resp. from litter 2")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LITR3C(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("LITR3C", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "LITR3 C")
    PUT_ATTR_TXT("units", "gC/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LITR3C_TO_SOIL3C(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("LITR3C_TO_SOIL3C", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "decomp. of litter 3 C to soil 3 C")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LITR3C_vr(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("LITR3C_vr", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "LITR3 C (vertically resolved)")
    PUT_ATTR_TXT("units", "gC/m^3")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LITR3N(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("LITR3N", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "LITR3 N")
    PUT_ATTR_TXT("units", "gN/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LITR3N_TNDNCY_VERT_TRANS(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("LITR3N_TNDNCY_VERT_TRANS", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "litter 3 N tendency due to vertical transport")
    PUT_ATTR_TXT("units", "gN/m^3/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LITR3N_TO_SOIL3N(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("LITR3N_TO_SOIL3N", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "decomp. of litter 3 N to soil 3 N")
    PUT_ATTR_TXT("units", "gN/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LITR3N_vr(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("LITR3N_vr", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "LITR3 N (vertically resolved)")
    PUT_ATTR_TXT("units", "gN/m^3")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LITR3P(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("LITR3P", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "LITR3 P")
    PUT_ATTR_TXT("units", "gP/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LITR3P_TNDNCY_VERT_TRANS(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("LITR3P_TNDNCY_VERT_TRANS", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "litter 3 P tendency due to vertical transport")
    PUT_ATTR_TXT("units", "gP/m^3/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LITR3P_TO_SOIL3P(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("LITR3P_TO_SOIL3P", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "decomp. of litter 3 P to soil 3 N")
    PUT_ATTR_TXT("units", "gP/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LITR3P_vr(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("LITR3P_vr", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "LITR3 P (vertically resolved)")
    PUT_ATTR_TXT("units", "gP/m^3")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LITR3_HR(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("LITR3_HR", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "Het. Resp. from litter 3")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LITTERC(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("LITTERC", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "litter C")
    PUT_ATTR_TXT("units", "gC/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LITTERC_HR(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("LITTERC_HR", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "litter C heterotrophic respiration")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LITTERC_LOSS(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("LITTERC_LOSS", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "litter C loss")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LIVECROOTC(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("LIVECROOTC", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "live coarse root C")
    PUT_ATTR_TXT("units", "gC/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LIVECROOTN(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("LIVECROOTN", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "live coarse root N")
    PUT_ATTR_TXT("units", "gN/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LIVECROOTP(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("LIVECROOTP", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "live coarse root P")
    PUT_ATTR_TXT("units", "gP/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LIVESTEMC(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("LIVESTEMC", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "live stem C")
    PUT_ATTR_TXT("units", "gC/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LIVESTEMN(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("LIVESTEMN", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "live stem N")
    PUT_ATTR_TXT("units", "gN/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float LIVESTEMP(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("LIVESTEMP", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "live stem P")
    PUT_ATTR_TXT("units", "gP/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float MR(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("MR", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "maintenance respiration")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float M_LITR1C_TO_LEACHING(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("M_LITR1C_TO_LEACHING", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "litter 1 C leaching loss")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float M_LITR2C_TO_LEACHING(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("M_LITR2C_TO_LEACHING", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "litter 2 C leaching loss")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float M_LITR3C_TO_LEACHING(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("M_LITR3C_TO_LEACHING", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "litter 3 C leaching loss")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float M_SOIL1C_TO_LEACHING(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("M_SOIL1C_TO_LEACHING", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "soil 1 C leaching loss")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float M_SOIL2C_TO_LEACHING(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("M_SOIL2C_TO_LEACHING", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "soil 2 C leaching loss")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float M_SOIL3C_TO_LEACHING(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("M_SOIL3C_TO_LEACHING", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "soil 3 C leaching loss")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float M_SOIL4C_TO_LEACHING(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("M_SOIL4C_TO_LEACHING", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "soil 4 C leaching loss")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float NBP(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("NBP", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "net biome production, includes fire, landuse, and harvest flux, positive for sink")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float NDEPLOY(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("NDEPLOY", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total N deployed in new growth")
    PUT_ATTR_TXT("units", "gN/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float NDEP_TO_SMINN(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("NDEP_TO_SMINN", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "atmospheric N deposition to soil mineral N")
    PUT_ATTR_TXT("units", "gN/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float NEE(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("NEE", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "net ecosystem exchange of carbon, includes fire, landuse, harvest, and hrv_xsmrpool flux, positive for source")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float NEM(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("NEM", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "Gridcell net adjustment to NEE passed to atm. for methane production")
    PUT_ATTR_TXT("units", "gC/m2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float NEP(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("NEP", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "net ecosystem production, excludes fire, landuse, and harvest flux, positive for sink")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float NET_NMIN(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("NET_NMIN", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "net rate of N mineralization")
    PUT_ATTR_TXT("units", "gN/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float NET_PMIN(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("NET_PMIN", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "net rate of P mineralization")
    PUT_ATTR_TXT("units", "gP/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float NFIRE(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("NFIRE", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "fire counts valid only in Reg.C")
    PUT_ATTR_TXT("units", "counts/km2/sec")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float NFIX_TO_SMINN(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("NFIX_TO_SMINN", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "symbiotic/asymbiotic N fixation to soil mineral N")
    PUT_ATTR_TXT("units", "gN/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float NPP(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("NPP", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "net primary production")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float OCCLP(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("OCCLP", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "soil occluded P")
    PUT_ATTR_TXT("units", "gP/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float OCCLP_vr(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("OCCLP_vr", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "soil occluded P (vert. res.)")
    PUT_ATTR_TXT("units", "gp/m^3")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float OCDEP(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("OCDEP", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total OC deposition (dry+wet) from atmosphere")
    PUT_ATTR_TXT("units", "kg/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float O_SCALAR(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("O_SCALAR", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "fraction by which decomposition is reduced due to anoxia")
    PUT_ATTR_TXT("units", "1")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float PARVEGLN(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("PARVEGLN", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "absorbed par by vegetation at local noon")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float PBOT(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("PBOT", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "atmospheric pressure")
    PUT_ATTR_TXT("units", "Pa")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float PCH4(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("PCH4", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "atmospheric partial pressure of CH4")
    PUT_ATTR_TXT("units", "Pa")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float PCO2(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("PCO2", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "atmospheric partial pressure of CO2")
    PUT_ATTR_TXT("units", "Pa")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float PCT_LANDUNIT(time, ltype, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_ltype;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("PCT_LANDUNIT", NC_FLOAT, 4, dimids, REC_ITYPE, 3)
    PUT_ATTR_TXT("long_name", "% of each landunit on grid cell")
    PUT_ATTR_TXT("units", "%")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float PCT_NAT_PFT(time, natpft, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_natpft;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("PCT_NAT_PFT", NC_FLOAT, 4, dimids, REC_ITYPE, 4)
    PUT_ATTR_TXT("long_name", "% of each PFT on the natural vegetation (i.e., soil) landunit")
    PUT_ATTR_TXT("units", "%")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float PDEPLOY(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("PDEPLOY", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total P deployed in new growth")
    PUT_ATTR_TXT("units", "gP/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float PDEP_TO_SMINP(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("PDEP_TO_SMINP", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "atmospheric P deposition to soil mineral P")
    PUT_ATTR_TXT("units", "gP/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float PFT_FIRE_CLOSS(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("PFT_FIRE_CLOSS", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total patch-level fire C loss for non-peat fires outside land-type converted region")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float PFT_FIRE_NLOSS(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("PFT_FIRE_NLOSS", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total pft-level fire N loss")
    PUT_ATTR_TXT("units", "gN/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float PLANT_CALLOC(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("PLANT_CALLOC", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total allocated C flux")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float PLANT_NDEMAND(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("PLANT_NDEMAND", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "N flux required to support initial GPP")
    PUT_ATTR_TXT("units", "gN/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float PLANT_NDEMAND_COL(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("PLANT_NDEMAND_COL", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "N flux required to support initial GPP")
    PUT_ATTR_TXT("units", "gN/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float PLANT_PALLOC(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("PLANT_PALLOC", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total allocated P flux")
    PUT_ATTR_TXT("units", "gP/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float PLANT_PDEMAND(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("PLANT_PDEMAND", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "P flux required to support initial GPP")
    PUT_ATTR_TXT("units", "gP/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float PLANT_PDEMAND_COL(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("PLANT_PDEMAND_COL", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "P flux required to support initial GPP")
    PUT_ATTR_TXT("units", "gN/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float POTENTIAL_IMMOB(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("POTENTIAL_IMMOB", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "potential N immobilization")
    PUT_ATTR_TXT("units", "gN/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float POTENTIAL_IMMOB_P(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("POTENTIAL_IMMOB_P", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "potential P immobilization")
    PUT_ATTR_TXT("units", "gP/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float POT_F_DENIT(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("POT_F_DENIT", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "potential denitrification flux")
    PUT_ATTR_TXT("units", "gN/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float POT_F_NIT(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("POT_F_NIT", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "potential nitrification flux")
    PUT_ATTR_TXT("units", "gN/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float PRIMP(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("PRIMP", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "soil primary P")
    PUT_ATTR_TXT("units", "gP/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float PRIMP_TO_LABILEP(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("PRIMP_TO_LABILEP", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "PRIMARY MINERAL P TO LABILE P")
    PUT_ATTR_TXT("units", "gP/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float PRIMP_vr(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("PRIMP_vr", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "soil primary P (vert. res.)")
    PUT_ATTR_TXT("units", "gp/m^3")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float PROD1P_LOSS(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("PROD1P_LOSS", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "loss from 1-yr crop product pool")
    PUT_ATTR_TXT("units", "gP/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float PSNSHA(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("PSNSHA", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "shaded leaf photosynthesis")
    PUT_ATTR_TXT("units", "umolCO2/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float PSNSHADE_TO_CPOOL(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("PSNSHADE_TO_CPOOL", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "C fixation from shaded canopy")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float PSNSUN(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("PSNSUN", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "sunlit leaf photosynthesis")
    PUT_ATTR_TXT("units", "umolCO2/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float PSNSUN_TO_CPOOL(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("PSNSUN_TO_CPOOL", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "C fixation from sunlit canopy")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float Q2M(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("Q2M", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "2m specific humidity")
    PUT_ATTR_TXT("units", "kg/kg")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float QBOT(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("QBOT", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "atmospheric specific humidity")
    PUT_ATTR_TXT("units", "kg/kg")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float QCHARGE(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("QCHARGE", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "aquifer recharge rate (vegetated landunits only)")
    PUT_ATTR_TXT("units", "mm/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float QDRAI(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("QDRAI", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "sub-surface drainage")
    PUT_ATTR_TXT("units", "mm/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float QDRAI_PERCH(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("QDRAI_PERCH", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "perched wt drainage")
    PUT_ATTR_TXT("units", "mm/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float QDRAI_XS(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("QDRAI_XS", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "saturation excess drainage")
    PUT_ATTR_TXT("units", "mm/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float QDRIP(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("QDRIP", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "throughfall")
    PUT_ATTR_TXT("units", "mm/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float QFLOOD(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("QFLOOD", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "runoff from river flooding")
    PUT_ATTR_TXT("units", "mm/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float QFLX_ICE_DYNBAL(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("QFLX_ICE_DYNBAL", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "ice dynamic land cover change conversion runoff flux")
    PUT_ATTR_TXT("units", "mm/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float QFLX_LIQ_DYNBAL(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("QFLX_LIQ_DYNBAL", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "liq dynamic land cover change conversion runoff flux")
    PUT_ATTR_TXT("units", "mm/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float QH2OSFC(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("QH2OSFC", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "surface water runoff")
    PUT_ATTR_TXT("units", "mm/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float QINFL(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("QINFL", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "infiltration")
    PUT_ATTR_TXT("units", "mm/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float QINTR(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("QINTR", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "interception")
    PUT_ATTR_TXT("units", "mm/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float QIRRIG_GRND(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("QIRRIG_GRND", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "Groundwater irrigation")
    PUT_ATTR_TXT("units", "mm/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float QIRRIG_ORIG(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("QIRRIG_ORIG", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "Original total irrigation water demand (surface + ground)")
    PUT_ATTR_TXT("units", "mm/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float QIRRIG_REAL(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("QIRRIG_REAL", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "actual water added through irrigation (surface + ground)")
    PUT_ATTR_TXT("units", "mm/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float QIRRIG_SURF(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("QIRRIG_SURF", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "Surface water irrigation")
    PUT_ATTR_TXT("units", "mm/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float QIRRIG_WM(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("QIRRIG_WM", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "Surface water irrigation demand sent to MOSART/WM")
    PUT_ATTR_TXT("units", "mm/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float QOVER(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("QOVER", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "surface runoff")
    PUT_ATTR_TXT("units", "mm/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float QOVER_LAG(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("QOVER_LAG", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "time-lagged surface runoff for soil columns")
    PUT_ATTR_TXT("units", "mm/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float QRGWL(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("QRGWL", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "surface runoff at glaciers (liquid only), wetlands, lakes")
    PUT_ATTR_TXT("units", "mm/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float QRUNOFF(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("QRUNOFF", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total liquid runoff (does not include QSNWCPICE)")
    PUT_ATTR_TXT("units", "mm/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float QRUNOFF_NODYNLNDUSE(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("QRUNOFF_NODYNLNDUSE", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total liquid runoff (does not include QSNWCPICE) not including correction for land use change")
    PUT_ATTR_TXT("units", "mm/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float QRUNOFF_R(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("QRUNOFF_R", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "Rural total runoff")
    PUT_ATTR_TXT("units", "mm/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float QRUNOFF_U(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("QRUNOFF_U", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "Urban total runoff")
    PUT_ATTR_TXT("units", "mm/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float QSNOMELT(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("QSNOMELT", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "snow melt")
    PUT_ATTR_TXT("units", "mm/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float QSNWCPICE(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("QSNWCPICE", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "excess snowfall due to snow capping")
    PUT_ATTR_TXT("units", "mm/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float QSNWCPICE_NODYNLNDUSE(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("QSNWCPICE_NODYNLNDUSE", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "excess snowfall due to snow capping not including correction for land use change")
    PUT_ATTR_TXT("units", "mm H2O/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float QSOIL(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("QSOIL", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "Ground evaporation (soil/snow evaporation + soil/snow sublimation - dew)")
    PUT_ATTR_TXT("units", "mm/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float QVEGE(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("QVEGE", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "canopy evaporation")
    PUT_ATTR_TXT("units", "mm/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float QVEGT(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("QVEGT", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "canopy transpiration")
    PUT_ATTR_TXT("units", "mm/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float RAIN(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("RAIN", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "atmospheric rain")
    PUT_ATTR_TXT("units", "mm/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float RETRANSN(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("RETRANSN", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "plant pool of retranslocated N")
    PUT_ATTR_TXT("units", "gN/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float RETRANSN_TO_NPOOL(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("RETRANSN_TO_NPOOL", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "deployment of retranslocated N")
    PUT_ATTR_TXT("units", "gN/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float RETRANSP(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("RETRANSP", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "plant pool of retranslocated P")
    PUT_ATTR_TXT("units", "gP/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float RETRANSP_TO_PPOOL(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("RETRANSP_TO_PPOOL", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "deployment of retranslocated P")
    PUT_ATTR_TXT("units", "gP/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float RH2M(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("RH2M", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "2m relative humidity")
    PUT_ATTR_TXT("units", "%")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float RH2M_R(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("RH2M_R", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "Rural 2m specific humidity")
    PUT_ATTR_TXT("units", "%")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float RH2M_U(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("RH2M_U", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "Urban 2m relative humidity")
    PUT_ATTR_TXT("units", "%")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float RR(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("RR", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "root respiration (fine root MR + total root GR)")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SABG(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SABG", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "solar rad absorbed by ground")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SABG_PEN(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SABG_PEN", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "Rural solar rad penetrating top soil or snow layer")
    PUT_ATTR_TXT("units", "watt/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SABV(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SABV", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "solar rad absorbed by veg")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SCALARAVG_vr(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("SCALARAVG_vr", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "average of decomposition scalar")
    PUT_ATTR_TXT("units", "fraction")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SECONDP(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SECONDP", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "soil secondary P")
    PUT_ATTR_TXT("units", "gP/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SECONDP_TO_LABILEP(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SECONDP_TO_LABILEP", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "SECONDARY MINERAL P TO LABILE P")
    PUT_ATTR_TXT("units", "gP/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SECONDP_TO_OCCLP(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SECONDP_TO_OCCLP", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "SECONDARY MINERAL P TO OCCLUDED P")
    PUT_ATTR_TXT("units", "gP/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SECONDP_vr(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("SECONDP_vr", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "soil secondary P (vert. res.)")
    PUT_ATTR_TXT("units", "gp/m^3")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SEEDC_GRC(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SEEDC_GRC", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "pool for seeding new PFTs via dynamic landcover")
    PUT_ATTR_TXT("units", "gC/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SMINN(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SMINN", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "soil mineral N")
    PUT_ATTR_TXT("units", "gN/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SMINN_TO_NPOOL(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SMINN_TO_NPOOL", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "deployment of soil mineral N uptake")
    PUT_ATTR_TXT("units", "gN/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SMINN_TO_PLANT(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SMINN_TO_PLANT", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "plant uptake of soil mineral N")
    PUT_ATTR_TXT("units", "gN/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SMINN_TO_SOIL1N_L1(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SMINN_TO_SOIL1N_L1", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "mineral N flux for decomp. of LITR1to SOIL1")
    PUT_ATTR_TXT("units", "gN/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SMINN_TO_SOIL2N_L2(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SMINN_TO_SOIL2N_L2", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "mineral N flux for decomp. of LITR2to SOIL2")
    PUT_ATTR_TXT("units", "gN/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SMINN_TO_SOIL2N_S1(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SMINN_TO_SOIL2N_S1", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "mineral N flux for decomp. of SOIL1to SOIL2")
    PUT_ATTR_TXT("units", "gN/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SMINN_TO_SOIL3N_L3(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SMINN_TO_SOIL3N_L3", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "mineral N flux for decomp. of LITR3to SOIL3")
    PUT_ATTR_TXT("units", "gN/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SMINN_TO_SOIL3N_S2(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SMINN_TO_SOIL3N_S2", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "mineral N flux for decomp. of SOIL2to SOIL3")
    PUT_ATTR_TXT("units", "gN/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SMINN_TO_SOIL4N_S3(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SMINN_TO_SOIL4N_S3", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "mineral N flux for decomp. of SOIL3to SOIL4")
    PUT_ATTR_TXT("units", "gN/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SMINP(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SMINP", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "soil mineral P")
    PUT_ATTR_TXT("units", "gP/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SMINP_LEACHED(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SMINP_LEACHED", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "soil mineral P pool loss to leaching")
    PUT_ATTR_TXT("units", "gP/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SMINP_TO_PLANT(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SMINP_TO_PLANT", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "plant uptake of soil mineral P")
    PUT_ATTR_TXT("units", "gP/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SMINP_TO_PPOOL(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SMINP_TO_PPOOL", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "deployment of soil mineral P uptake")
    PUT_ATTR_TXT("units", "gP/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SMINP_TO_SOIL1P_L1(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SMINP_TO_SOIL1P_L1", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "mineral P flux for decomp. of LITR1to SOIL1")
    PUT_ATTR_TXT("units", "gP/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SMINP_TO_SOIL2P_L2(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SMINP_TO_SOIL2P_L2", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "mineral P flux for decomp. of LITR2to SOIL2")
    PUT_ATTR_TXT("units", "gP/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SMINP_TO_SOIL2P_S1(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SMINP_TO_SOIL2P_S1", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "mineral P flux for decomp. of SOIL1to SOIL2")
    PUT_ATTR_TXT("units", "gP/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SMINP_TO_SOIL3P_L3(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SMINP_TO_SOIL3P_L3", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "mineral P flux for decomp. of LITR3to SOIL3")
    PUT_ATTR_TXT("units", "gP/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SMINP_TO_SOIL3P_S2(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SMINP_TO_SOIL3P_S2", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "mineral P flux for decomp. of SOIL2to SOIL3")
    PUT_ATTR_TXT("units", "gP/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SMINP_TO_SOIL4P_S3(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SMINP_TO_SOIL4P_S3", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "mineral P flux for decomp. of SOIL3to SOIL4")
    PUT_ATTR_TXT("units", "gP/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SMINP_vr(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("SMINP_vr", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "soil mineral P (vert. res.)")
    PUT_ATTR_TXT("units", "gp/m^3")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SMIN_NH4(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SMIN_NH4", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "soil mineral NH4")
    PUT_ATTR_TXT("units", "gN/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SMIN_NH4_vr(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("SMIN_NH4_vr", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "soil mineral NH4 (vert. res.)")
    PUT_ATTR_TXT("units", "gN/m^3")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SMIN_NO3(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SMIN_NO3", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "soil mineral NO3")
    PUT_ATTR_TXT("units", "gN/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SMIN_NO3_LEACHED(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SMIN_NO3_LEACHED", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "soil NO3 pool loss to leaching")
    PUT_ATTR_TXT("units", "gN/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SMIN_NO3_RUNOFF(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SMIN_NO3_RUNOFF", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "soil NO3 pool loss to runoff")
    PUT_ATTR_TXT("units", "gN/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SMIN_NO3_vr(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("SMIN_NO3_vr", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "soil mineral NO3 (vert. res.)")
    PUT_ATTR_TXT("units", "gN/m^3")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SNOBCMCL(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SNOBCMCL", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "mass of BC in snow column")
    PUT_ATTR_TXT("units", "kg/m2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SNOBCMSL(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SNOBCMSL", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "mass of BC in top snow layer")
    PUT_ATTR_TXT("units", "kg/m2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SNODSTMCL(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SNODSTMCL", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "mass of dust in snow column")
    PUT_ATTR_TXT("units", "kg/m2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SNODSTMSL(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SNODSTMSL", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "mass of dust in top snow layer")
    PUT_ATTR_TXT("units", "kg/m2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SNOINTABS(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SNOINTABS", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "Percent of incoming solar absorbed by lower snow layers")
    PUT_ATTR_TXT("units", "%")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SNOOCMCL(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SNOOCMCL", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "mass of OC in snow column")
    PUT_ATTR_TXT("units", "kg/m2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SNOOCMSL(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SNOOCMSL", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "mass of OC in top snow layer")
    PUT_ATTR_TXT("units", "kg/m2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SNOW(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SNOW", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "atmospheric snow")
    PUT_ATTR_TXT("units", "mm/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SNOWDP(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SNOWDP", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "gridcell mean snow height")
    PUT_ATTR_TXT("units", "m")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SNOWICE(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SNOWICE", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "snow ice")
    PUT_ATTR_TXT("units", "kg/m2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SNOWLIQ(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SNOWLIQ", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "snow liquid water")
    PUT_ATTR_TXT("units", "kg/m2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SNOW_DEPTH(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SNOW_DEPTH", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "snow height of snow covered area")
    PUT_ATTR_TXT("units", "m")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SNOW_SINKS(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SNOW_SINKS", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "snow sinks (liquid water)")
    PUT_ATTR_TXT("units", "mm/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SNOW_SOURCES(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SNOW_SOURCES", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "snow sources (liquid water)")
    PUT_ATTR_TXT("units", "mm/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOIL1C(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SOIL1C", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "SOIL1 C")
    PUT_ATTR_TXT("units", "gC/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOIL1C_TO_SOIL2C(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SOIL1C_TO_SOIL2C", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "decomp. of soil 1 C to soil 2 C")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOIL1C_vr(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("SOIL1C_vr", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "SOIL1 C (vertically resolved)")
    PUT_ATTR_TXT("units", "gC/m^3")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOIL1N(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SOIL1N", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "SOIL1 N")
    PUT_ATTR_TXT("units", "gN/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOIL1N_TNDNCY_VERT_TRANS(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("SOIL1N_TNDNCY_VERT_TRANS", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "soil 1 N tendency due to vertical transport")
    PUT_ATTR_TXT("units", "gN/m^3/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOIL1N_TO_SOIL2N(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SOIL1N_TO_SOIL2N", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "decomp. of soil 1 N to soil 2 N")
    PUT_ATTR_TXT("units", "gN/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOIL1N_vr(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("SOIL1N_vr", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "SOIL1 N (vertically resolved)")
    PUT_ATTR_TXT("units", "gN/m^3")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOIL1P(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SOIL1P", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "SOIL1 P")
    PUT_ATTR_TXT("units", "gP/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOIL1P_TNDNCY_VERT_TRANS(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("SOIL1P_TNDNCY_VERT_TRANS", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "soil 1 P tendency due to vertical transport")
    PUT_ATTR_TXT("units", "gP/m^3/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOIL1P_TO_SOIL2P(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SOIL1P_TO_SOIL2P", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "decomp. of soil 1 P to soil 2 N")
    PUT_ATTR_TXT("units", "gP/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOIL1P_vr(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("SOIL1P_vr", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "SOIL1 P (vertically resolved)")
    PUT_ATTR_TXT("units", "gP/m^3")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOIL1_HR(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SOIL1_HR", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "Het. Resp. from soil 1")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOIL2C(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SOIL2C", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "SOIL2 C")
    PUT_ATTR_TXT("units", "gC/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOIL2C_TO_SOIL3C(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SOIL2C_TO_SOIL3C", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "decomp. of soil 2 C to soil 3 C")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOIL2C_vr(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("SOIL2C_vr", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "SOIL2 C (vertically resolved)")
    PUT_ATTR_TXT("units", "gC/m^3")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOIL2N(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SOIL2N", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "SOIL2 N")
    PUT_ATTR_TXT("units", "gN/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOIL2N_TNDNCY_VERT_TRANS(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("SOIL2N_TNDNCY_VERT_TRANS", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "soil 2 N tendency due to vertical transport")
    PUT_ATTR_TXT("units", "gN/m^3/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOIL2N_TO_SOIL3N(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SOIL2N_TO_SOIL3N", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "decomp. of soil 2 N to soil 3 N")
    PUT_ATTR_TXT("units", "gN/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOIL2N_vr(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("SOIL2N_vr", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "SOIL2 N (vertically resolved)")
    PUT_ATTR_TXT("units", "gN/m^3")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOIL2P(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SOIL2P", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "SOIL2 P")
    PUT_ATTR_TXT("units", "gP/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOIL2P_TNDNCY_VERT_TRANS(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("SOIL2P_TNDNCY_VERT_TRANS", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "soil 2 P tendency due to vertical transport")
    PUT_ATTR_TXT("units", "gP/m^3/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOIL2P_TO_SOIL3P(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SOIL2P_TO_SOIL3P", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "decomp. of soil 2 P to soil 3 N")
    PUT_ATTR_TXT("units", "gP/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOIL2P_vr(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("SOIL2P_vr", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "SOIL2 P (vertically resolved)")
    PUT_ATTR_TXT("units", "gP/m^3")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOIL2_HR(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SOIL2_HR", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "Het. Resp. from soil 2")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOIL3C(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SOIL3C", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "SOIL3 C")
    PUT_ATTR_TXT("units", "gC/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOIL3C_TO_SOIL4C(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SOIL3C_TO_SOIL4C", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "decomp. of soil 3 C to soil 4 C")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOIL3C_vr(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("SOIL3C_vr", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "SOIL3 C (vertically resolved)")
    PUT_ATTR_TXT("units", "gC/m^3")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOIL3N(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SOIL3N", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "SOIL3 N")
    PUT_ATTR_TXT("units", "gN/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOIL3N_TNDNCY_VERT_TRANS(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("SOIL3N_TNDNCY_VERT_TRANS", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "soil 3 N tendency due to vertical transport")
    PUT_ATTR_TXT("units", "gN/m^3/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOIL3N_TO_SOIL4N(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SOIL3N_TO_SOIL4N", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "decomp. of soil 3 N to soil 4 N")
    PUT_ATTR_TXT("units", "gN/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOIL3N_vr(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("SOIL3N_vr", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "SOIL3 N (vertically resolved)")
    PUT_ATTR_TXT("units", "gN/m^3")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOIL3P(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SOIL3P", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "SOIL3 P")
    PUT_ATTR_TXT("units", "gP/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOIL3P_TNDNCY_VERT_TRANS(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("SOIL3P_TNDNCY_VERT_TRANS", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "soil 3 P tendency due to vertical transport")
    PUT_ATTR_TXT("units", "gP/m^3/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOIL3P_TO_SOIL4P(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SOIL3P_TO_SOIL4P", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "decomp. of soil 3 P to soil 4 N")
    PUT_ATTR_TXT("units", "gP/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOIL3P_vr(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("SOIL3P_vr", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "SOIL3 P (vertically resolved)")
    PUT_ATTR_TXT("units", "gP/m^3")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOIL3_HR(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SOIL3_HR", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "Het. Resp. from soil 3")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOIL4C(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SOIL4C", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "SOIL4 C")
    PUT_ATTR_TXT("units", "gC/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOIL4C_vr(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("SOIL4C_vr", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "SOIL4 C (vertically resolved)")
    PUT_ATTR_TXT("units", "gC/m^3")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOIL4N(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SOIL4N", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "SOIL4 N")
    PUT_ATTR_TXT("units", "gN/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOIL4N_TNDNCY_VERT_TRANS(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("SOIL4N_TNDNCY_VERT_TRANS", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "soil 4 N tendency due to vertical transport")
    PUT_ATTR_TXT("units", "gN/m^3/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOIL4N_TO_SMINN(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SOIL4N_TO_SMINN", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "mineral N flux for decomp. of SOIL4")
    PUT_ATTR_TXT("units", "gN/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOIL4N_vr(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("SOIL4N_vr", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "SOIL4 N (vertically resolved)")
    PUT_ATTR_TXT("units", "gN/m^3")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOIL4P(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SOIL4P", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "SOIL4 P")
    PUT_ATTR_TXT("units", "gP/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOIL4P_TNDNCY_VERT_TRANS(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("SOIL4P_TNDNCY_VERT_TRANS", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "soil 4 P tendency due to vertical transport")
    PUT_ATTR_TXT("units", "gP/m^3/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOIL4P_TO_SMINP(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SOIL4P_TO_SMINP", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "mineral P flux for decomp. of SOIL4")
    PUT_ATTR_TXT("units", "gP/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOIL4P_vr(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("SOIL4P_vr", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "SOIL4 P (vertically resolved)")
    PUT_ATTR_TXT("units", "gP/m^3")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOIL4_HR(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SOIL4_HR", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "Het. Resp. from soil 4")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOILC(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SOILC", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "soil C")
    PUT_ATTR_TXT("units", "gC/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOILC_HR(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SOILC_HR", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "soil C heterotrophic respiration")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOILC_LOSS(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SOILC_LOSS", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "soil C loss")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOILICE(time, levgrnd, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levgrnd;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("SOILICE", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "soil ice (vegetated landunits only)")
    PUT_ATTR_TXT("units", "kg/m2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOILICE_ICE(time, levgrnd, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levgrnd;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("SOILICE_ICE", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "soil ice (ice landunits only)")
    PUT_ATTR_TXT("units", "kg/m2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOILLIQ(time, levgrnd, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levgrnd;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("SOILLIQ", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "soil liquid water (vegetated landunits only)")
    PUT_ATTR_TXT("units", "kg/m2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOILLIQ_ICE(time, levgrnd, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levgrnd;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("SOILLIQ_ICE", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "soil liquid water (ice landunits only)")
    PUT_ATTR_TXT("units", "kg/m2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOILPSI(time, levgrnd, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levgrnd;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("SOILPSI", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "soil water potential in each soil layer")
    PUT_ATTR_TXT("units", "MPa")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOILWATER_10CM(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SOILWATER_10CM", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "soil liquid water + ice in top 10cm of soil (veg landunits only)")
    PUT_ATTR_TXT("standard_name", "mass_content_of_water_in_soil_layer")
    PUT_ATTR_TXT("units", "kg/m2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOLUTIONP(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SOLUTIONP", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "soil solution P")
    PUT_ATTR_TXT("units", "gP/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOLUTIONP_vr(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("SOLUTIONP_vr", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "soil solution P (vert. res.)")
    PUT_ATTR_TXT("units", "gp/m^3")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOMHR(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SOMHR", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "soil organic matter heterotrophic respiration")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SOM_C_LEACHED(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SOM_C_LEACHED", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total flux of C from SOM pools due to leaching")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SR(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SR", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total soil respiration (HR + root resp)")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float STORVEGC(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("STORVEGC", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "stored vegetation carbon, excluding cpool")
    PUT_ATTR_TXT("units", "gC/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float STORVEGN(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("STORVEGN", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "stored vegetation nitrogen")
    PUT_ATTR_TXT("units", "gN/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float STORVEGP(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("STORVEGP", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "stored vegetation phosphorus")
    PUT_ATTR_TXT("units", "gP/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SUPPLEMENT_TO_SMINN(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SUPPLEMENT_TO_SMINN", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "supplemental N supply")
    PUT_ATTR_TXT("units", "gN/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SUPPLEMENT_TO_SMINP(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SUPPLEMENT_TO_SMINP", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "supplemental P supply")
    PUT_ATTR_TXT("units", "gP/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SUPPLY(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SUPPLY", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "runoff supply for land use")
    PUT_ATTR_TXT("units", "mm/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SoilAlpha(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SoilAlpha", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "factor limiting ground evap")
    PUT_ATTR_TXT("units", "1")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float SoilAlpha_U(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("SoilAlpha_U", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "urban factor limiting ground evap")
    PUT_ATTR_TXT("units", "1")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TAUX(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("TAUX", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "zonal surface stress")
    PUT_ATTR_TXT("units", "kg/m/s^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TAUY(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("TAUY", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "meridional surface stress")
    PUT_ATTR_TXT("units", "kg/m/s^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TBOT(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("TBOT", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "atmospheric air temperature")
    PUT_ATTR_TXT("units", "K")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TBUILD(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("TBUILD", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "internal urban building temperature")
    PUT_ATTR_TXT("units", "K")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TCS_MONTH_BEGIN(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("TCS_MONTH_BEGIN", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total carbon storage at the beginning of a month")
    PUT_ATTR_TXT("units", "mm")
    PUT_ATTR_TXT("cell_methods", "time: point")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TCS_MONTH_END(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("TCS_MONTH_END", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total carbon storage at the end of a month")
    PUT_ATTR_TXT("units", "mm")
    PUT_ATTR_TXT("cell_methods", "time: point")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TG(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("TG", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "ground temperature")
    PUT_ATTR_TXT("units", "K")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TG_R(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("TG_R", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "Rural ground temperature")
    PUT_ATTR_TXT("units", "K")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TG_U(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("TG_U", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "Urban ground temperature")
    PUT_ATTR_TXT("units", "K")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TH2OSFC(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("TH2OSFC", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "surface water temperature")
    PUT_ATTR_TXT("units", "K")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float THBOT(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("THBOT", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "atmospheric air potential temperature")
    PUT_ATTR_TXT("units", "K")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TKE1(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("TKE1", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "top lake level eddy thermal conductivity")
    PUT_ATTR_TXT("units", "W/(mK)")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TLAI(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("TLAI", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total projected leaf area index")
    PUT_ATTR_TXT("units", "1")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TLAKE(time, levlak, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levlak;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("TLAKE", NC_FLOAT, 4, dimids, REC_ITYPE, 2)
    PUT_ATTR_TXT("long_name", "lake temperature")
    PUT_ATTR_TXT("units", "K")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TOTCOLC(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("TOTCOLC", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total column carbon, incl veg and cpool but excl product pools")
    PUT_ATTR_TXT("units", "gC/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TOTCOLCH4(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("TOTCOLCH4", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total belowground CH4, (0 for non-lake special landunits)")
    PUT_ATTR_TXT("units", "gC/m2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TOTCOLN(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("TOTCOLN", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total column-level N but excl product pools")
    PUT_ATTR_TXT("units", "gN/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TOTCOLP(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("TOTCOLP", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total column-level P but excl product pools")
    PUT_ATTR_TXT("units", "gP/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TOTECOSYSC(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("TOTECOSYSC", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total ecosystem carbon, incl veg but excl cpool but excl product pools")
    PUT_ATTR_TXT("units", "gC/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TOTECOSYSN(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("TOTECOSYSN", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total ecosystem N but excl product pools")
    PUT_ATTR_TXT("units", "gN/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TOTECOSYSP(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("TOTECOSYSP", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total ecosystem P but excl product pools")
    PUT_ATTR_TXT("units", "gP/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TOTLITC(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("TOTLITC", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total litter carbon")
    PUT_ATTR_TXT("units", "gC/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TOTLITC_1m(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("TOTLITC_1m", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total litter carbon to 1 meter depth")
    PUT_ATTR_TXT("units", "gC/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TOTLITN(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("TOTLITN", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total litter N")
    PUT_ATTR_TXT("units", "gN/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TOTLITP(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("TOTLITP", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total litter P")
    PUT_ATTR_TXT("units", "gP/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TOTLITP_1m(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("TOTLITP_1m", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total litter P to 1 meter")
    PUT_ATTR_TXT("units", "gP/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TOTPFTC(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("TOTPFTC", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total patch-level carbon, including cpool")
    PUT_ATTR_TXT("units", "gC/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TOTPFTN(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("TOTPFTN", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total PFT-level nitrogen")
    PUT_ATTR_TXT("units", "gN/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TOTPFTP(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("TOTPFTP", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total PFT-level phosphorus")
    PUT_ATTR_TXT("units", "gP/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TOTSOMC(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("TOTSOMC", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total soil organic matter carbon")
    PUT_ATTR_TXT("units", "gC/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TOTSOMC_1m(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("TOTSOMC_1m", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total soil organic matter carbon to 1 meter depth")
    PUT_ATTR_TXT("units", "gC/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TOTSOMN(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("TOTSOMN", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total soil organic matter N")
    PUT_ATTR_TXT("units", "gN/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TOTSOMP(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("TOTSOMP", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total soil organic matter P")
    PUT_ATTR_TXT("units", "gP/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TOTSOMP_1m(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("TOTSOMP_1m", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total soil organic matter P to 1 meter")
    PUT_ATTR_TXT("units", "gP/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TOTVEGC(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("TOTVEGC", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total vegetation carbon, excluding cpool")
    PUT_ATTR_TXT("units", "gC/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TOTVEGC_ABG(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("TOTVEGC_ABG", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total aboveground vegetation carbon, excluding cpool")
    PUT_ATTR_TXT("units", "gC/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TOTVEGN(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("TOTVEGN", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total vegetation nitrogen")
    PUT_ATTR_TXT("units", "gN/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TOTVEGP(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("TOTVEGP", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total vegetation phosphorus")
    PUT_ATTR_TXT("units", "gP/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TREFMNAV(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("TREFMNAV", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "daily minimum of average 2-m temperature")
    PUT_ATTR_TXT("units", "K")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TREFMNAV_R(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("TREFMNAV_R", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "Rural daily minimum of average 2-m temperature")
    PUT_ATTR_TXT("units", "K")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TREFMNAV_U(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("TREFMNAV_U", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "Urban daily minimum of average 2-m temperature")
    PUT_ATTR_TXT("units", "K")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TREFMXAV(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("TREFMXAV", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "daily maximum of average 2-m temperature")
    PUT_ATTR_TXT("units", "K")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TREFMXAV_R(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("TREFMXAV_R", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "Rural daily maximum of average 2-m temperature")
    PUT_ATTR_TXT("units", "K")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TREFMXAV_U(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("TREFMXAV_U", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "Urban daily maximum of average 2-m temperature")
    PUT_ATTR_TXT("units", "K")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TSA(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("TSA", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "2m air temperature")
    PUT_ATTR_TXT("units", "K")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TSAI(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("TSAI", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total projected stem area index")
    PUT_ATTR_TXT("units", "1")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TSA_R(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("TSA_R", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "Rural 2m air temperature")
    PUT_ATTR_TXT("units", "K")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TSA_U(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("TSA_U", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "Urban 2m air temperature")
    PUT_ATTR_TXT("units", "K")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TSOI(time, levgrnd, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levgrnd;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("TSOI", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "soil temperature (vegetated landunits only)")
    PUT_ATTR_TXT("standard_name", "soil_temperature")
    PUT_ATTR_TXT("units", "K")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TSOI_10CM(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("TSOI_10CM", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "soil temperature in top 10cm of soil")
    PUT_ATTR_TXT("units", "K")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TSOI_ICE(time, levgrnd, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levgrnd;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("TSOI_ICE", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "soil temperature (ice landunits only)")
    PUT_ATTR_TXT("units", "K")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TV(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("TV", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "vegetation temperature")
    PUT_ATTR_TXT("units", "K")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TWS(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("TWS", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total water storage")
    PUT_ATTR_TXT("units", "mm")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TWS_MONTH_BEGIN(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("TWS_MONTH_BEGIN", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total water storage at the beginning of a month")
    PUT_ATTR_TXT("units", "mm")
    PUT_ATTR_TXT("cell_methods", "time: point")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float TWS_MONTH_END(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("TWS_MONTH_END", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total water storage at the end of a month")
    PUT_ATTR_TXT("units", "mm")
    PUT_ATTR_TXT("cell_methods", "time: point")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float T_SCALAR(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("T_SCALAR", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "temperature inhibition of decomposition")
    PUT_ATTR_TXT("units", "1")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float U10(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("U10", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "10-m wind")
    PUT_ATTR_TXT("units", "m/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float URBAN_AC(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("URBAN_AC", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "urban air conditioning flux")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float URBAN_HEAT(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("URBAN_HEAT", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "urban heating flux")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float VOLR(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("VOLR", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "river channel total water storage")
    PUT_ATTR_TXT("units", "m3")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float VOLRMCH(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("VOLRMCH", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "river channel main channel water storage")
    PUT_ATTR_TXT("units", "m3")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float WA(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("WA", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "water in the unconfined aquifer (vegetated landunits only)")
    PUT_ATTR_TXT("units", "mm")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float WASTEHEAT(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("WASTEHEAT", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "sensible heat flux from heating/cooling sources of urban waste heat")
    PUT_ATTR_TXT("units", "W/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float WF(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("WF", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "soil water as frac. of whc for top 0.05 m")
    PUT_ATTR_TXT("units", "proportion")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float WIND(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("WIND", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "atmospheric wind velocity magnitude")
    PUT_ATTR_TXT("units", "m/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float WOODC(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("WOODC", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "wood C")
    PUT_ATTR_TXT("units", "gC/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float WOODC_ALLOC(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("WOODC_ALLOC", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "wood C eallocation")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float WOODC_LOSS(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("WOODC_LOSS", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "wood C loss")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float WOOD_HARVESTC(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("WOOD_HARVESTC", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "wood harvest carbon (to product pools)")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float WOOD_HARVESTN(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("WOOD_HARVESTN", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "wood harvest N (to product pools)")
    PUT_ATTR_TXT("units", "gN/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float WTGQ(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("WTGQ", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "surface tracer conductance")
    PUT_ATTR_TXT("units", "m/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float W_SCALAR(time, levdcmp, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levdcmp;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("W_SCALAR", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "Moisture (dryness) inhibition of decomposition")
    PUT_ATTR_TXT("units", "1")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float XR(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("XR", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "total excess respiration")
    PUT_ATTR_TXT("units", "gC/m^2/s")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float XSMRPOOL(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("XSMRPOOL", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "temporary photosynthate C pool")
    PUT_ATTR_TXT("units", "gC/m^2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float ZBOT(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("ZBOT", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "atmospheric reference height")
    PUT_ATTR_TXT("units", "m")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float ZWT(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("ZWT", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "water table depth (vegetated landunits only)")
    PUT_ATTR_TXT("units", "m")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float ZWT_CH4_UNSAT(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("ZWT_CH4_UNSAT", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "depth of water table for methane production used in non-inundated area")
    PUT_ATTR_TXT("units", "m")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float ZWT_PERCH(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("ZWT_PERCH", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "perched water table depth (vegetated landunits only)")
    PUT_ATTR_TXT("units", "m")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float cn_scalar(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("cn_scalar", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "N limitation factor")
    PUT_ATTR_TXT("units", "")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float cp_scalar(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("cp_scalar", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "P limitation factor")
    PUT_ATTR_TXT("units", "")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float leaf_npimbalance(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("leaf_npimbalance", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "leaf np imbalance partial C partial P/partial C partial N")
    PUT_ATTR_TXT("units", "gN/gP")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float nlim_m(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("nlim_m", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "runmean N limitation factor")
    PUT_ATTR_TXT("units", "")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float o2_decomp_depth_unsat(time, levgrnd, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_levgrnd;
    dimids[2] = dim_lat;
    dimids[3] = dim_lon;
    DEF_VAR("o2_decomp_depth_unsat", NC_FLOAT, 4, dimids, REC_ITYPE, 1)
    PUT_ATTR_TXT("long_name", "o2_decomp_depth_unsat")
    PUT_ATTR_TXT("units", "mol/m3/2")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)

    /* float plim_m(time, lat, lon) */
    dimids[0] = dim_time;
    dimids[1] = dim_lat;
    dimids[2] = dim_lon;
    DEF_VAR("plim_m", NC_FLOAT, 3, dimids, REC_ITYPE, 0)
    PUT_ATTR_TXT("long_name", "runmean P limitation factor")
    PUT_ATTR_TXT("units", "")
    PUT_ATTR_TXT("cell_methods", "time: mean")
    PUT_ATTR_FILL(fillv)
    PUT_ATTR_FLT1("missing_value", missv)
}