// A working draft proposal for CF compliance for netCDF output for SWAN
NetCDF SWAN.nc {
// proposal for CF and SWAN meta data in SWAN
dimensions:
time = 1; // also put time in for single times
mx = 2; // (mxc+1) for 2D grids
my = 3; // (myc+1) for 2D grids
md = 4; // (mdc+1) directions
ms = 5; // (msc+1) frequencies
loc = 6; // for 1D grids, for UNSTRUC and for squeezed [mx by my] grids
variables:
// dimensions consistent with ncBrowse, not with native MATLAB netcdf package.
// ----------------- COORDINATES -----------------
// Options:
// * like SWAN use same variable for CARTESIAN and SPHERICAL, but change attributes
// * use different variables for CARTESIAN and SPHERICAL, but change attributes
// if INPUT.CGRID.REGular
double mx(mx) ;
mx(mx):swan_xpc = // INPUT value: optional for input, implemented in output
mx(mx):swan_xlenc = // INPUT value: optional for input, implemented in output
mx(mx):swan_alpc = // INPUT value: optional for input, implemented in output
mx(mx):swan_comment = "mxc+1"
mx(mx):_FillValue = // INPUT.CGRID.xexc or OVEXCV{IVTYPE}
mx:actual_range = [~ ~]
// if INPUT.CGRID.CARTESIAN
mx:standard_name = "projected_x_coordinate"
mx:units = "m"
mx(mx):grid_mapping = "projected_coordinate_system"
// elseif INPUT.CGRID.SPHERICAL
mx:standard_name = "longitude"
mx:units = "degrees_east"
mx(mx):grid_mapping = "wgs84"
// end
...
double my(my) ;
my(my):swan_ypc = // INPUT value: optional for input, implemented in output
my(my):swan_ylenc = // INPUT value: optional for input, implemented in output
my(my):swan_alpc = // INPUT value: optional for input, implemented in output
my(my):swan_comment = "myc+1"
my(my):_FillValue = // INPUT.CGRID.yexc or OVEXCV{IVTYPE}
my:actual_range = [~ ~]
// if INPUT.CGRID.CARTESIAN
my:standard_name = "projected_y_coordinate"
my:units = "m"
my(my):grid_mapping = "projected_coordinate_system"
// elseif INPUT.CGRID.SPHERICAL
my:standard_name = "latitude"
my:units = "degrees_north"
my(my):grid_mapping = "wgs84"
// end
...
// - - - - - - - - - - - - - - - - - - - - - - - - - - -
// elseif INPUT.CGRID.CURVilinear
double XP(mx,my) ;
// idem
...
double YP(mx,my) ;
// idem
...
// - - - - - - - - - - - - - - - - - - - - - - - - - - -
// elseif INPUT.CGRID.UNSTRUCtured
double XP(loc) ;
// idem
...
double YP(loc) ;
// idem
...
// end
// ----------------- DIRECTIONS -----------------
double CDIR(md) ;
CDIR:standard_name = ""
CDIR:units = "degrees_true"
CDIR:long_name = "spectral Cartesian direction"
CDIR.dir1 = // INPUT value: optional for input, implemented in output
CDIR.dir2 = // INPUT value: optional for input, implemented in output
CDIR:swan_comment = "mdc+1"
...
double NDIR(md) ;
NDIR:standard_name = ""
NDIR:units = "degrees_true"
NDIR:long_name = "spectral nautical direction"
NDIR.dir1 = // INPUT value: optional for input, implemented in output
NDIR.dir2 = // INPUT value: optional for input, implemented in output
NDIR:swan_comment = "mdc+1"
...
// ----------------- FREQUENCY -----------------
double AFREQ(ms) ;
AFREQ:standard_name = ""
AFREQ:long_name = "absolute frequencies"
AFREQ:units = "s-1"
AFREQ.swan_flow = // INPUT value: optional for input, implemented in output
AFREQ.swan_fhigh = // INPUT value: optional for input, implemented in output
AFREQ:swan_comment = "msc+1"
...
double NFREQ(), shape = [5]
NFREQ:standard_name = ""
NFREQ:long_name = "relative frequencies"
NFREQ:units = "s-1"
NFREQ.swan_flow = // INPUT value: optional for input, implemented in output
NFREQ.swan_fhigh = // INPUT value: optional for input, implemented in output
NFREQ:swan_comment = "msc+1"
...
// ----------------- COORDINATE SYSTEMS -----------------
// The projected_coordinate_system information could optionally be added to
// either SWAN input or in a post-processing step.
// if INPUT.CGRID.CARTESIAN
// int32 projected_coordinate_system() ;
// projected_coordinate_system:name = "Amersfoort / RD New"
// projected_coordinate_system:epsg = 28992
// projected_coordinate_system:epsg_name = "Oblique Stereographic"
// projected_coordinate_system:grid_mapping_name = " "
// projected_coordinate_system:semi_major_axis = 6.3774e+006
// projected_coordinate_system:semi_minor_axis = 6.35608e+006
// projected_coordinate_system:inverse_flattening = 299.153
// projected_coordinate_system:latitude_of_projection_origin = 52.0922
// projected_coordinate_system:longitude_of_projection_origin = 5.23155
// projected_coordinate_system:false_easting = 155000
// projected_coordinate_system:false_northing = 463000
// projected_coordinate_system:scale_factor_at_projection_origin = 0.999908
// // optional PROJ4 REQUIRED FOR ADAGUC.KNMI.NL
// projected_coordinate_system:proj4_params = "+proj=sterea +lat_0=52.15616055555555 +lon_0=5.38763888888889 +k=0.999908 +x_0=155000 +y_0=463000 +ellps=bessel +units=m +towgs84=565.4174,50.3319,465.5542,-0.398957388243134,0.343987817378283,-1.87740163998045,4.0725 +no_defs"
// projected_coordinate_system:EPSG_code = "EPSG:28992"
// projected_coordinate_system:projection_name = "Dutch rijksdriekhoek system"
// - - - - - - - - - - - - - - - - - - - - - - - - - - -
// elseif INPUT.CGRID.SPHERICAL
// The (lat,lon) coordinates information could be hard-coded into SWAN
// with each of the options: CCM, QC or REPEATING
int32 wgs84() ;
wgs84:name = "WGS 84"
wgs84:epsg = 4326
wgs84:grid_mapping_name = "latitude_longitude"
wgs84:semi_major_axis = 6.37814e+006
wgs84:semi_minor_axis = 6.35675e+006
wgs84:inverse_flattening = 298.257
// optional PROJ4 REQUIRED FOR ADAGUC.KNMI.NL
wgs84:proj4_params = "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs "
wgs84:EPSG_code = "EPSG:4326"
wgs84:projection_name = "Latitude Longitude"
wgs84:wkt = "GEOGCS["WGS 84",...
// end
// ----------------- PRIMARY VARIABLES -----------------
single VaDens(), shape = [~ ~]
VaDens:swan_code = // OVKEYW{IVTYPE} = 'VaDens';
VaDens:swan_name = // OVSNAM{IVTYPE} = 'VaDens';
VaDens:long_name = // OVLNAM{IVTYPE} = 'spectral variance density';
VaDens:swan_units = // OVUNIT{IVTYPE} = 'm2/Hz';
VaDens:valid_range(1) = // OVLEXP{IVTYPE} = 0.;
VaDens:valid_range(2) = // OVHEXP{IVTYPE} = 100.;
VaDens:_FillValue = // OVEXCV{IVTYPE} = -99.;
// - - - - - - - - - - - - - - - - - - - - - - - - - - -
VaDens:units = // OVCFUD{IVTYPE} = ''; NEW TABLE NEEDED INSIDE SWAN
VaDens:standard_name = // OVCFSN{IVTYPE} = ''; NEW TABLE NEEDED INSIDE SWAN
// these do not need to be mapped // OVSVTY{IVTYPE} = 5; // means vector, scalar etc.
// these do not need to be mapped // OVLLIM{IVTYPE} = 0.; // print width for ascii output
// these do not need to be mapped // OVULIM{IVTYPE} = 1000.; // print width for ascii output
// - - - - - - - - - - - - - - - - - - - - - - - - - - -
VaDens:actual_range = [~ ~] // add optionally as extra service to user
VaDens:coordinates = "XP YP" //
// if INPUT.CGRID.CARTESIAN
VaDens():grid_mapping = "projected_coordinate_system"
// elseif INPUT.CGRID.SPHERICAL
VaDens():grid_mapping = "wgs84"
// end
// ----------------- GLOBAL META_DATA -----------------
//global Attributes:
:title = "INPUT.PROJECT.name,INPUT.PROJECT.nr"
:institution = ""
:source = ""
:history = "Data produced by SWAN version 40.72AB"
:references = ""
:email = ""
:comment = "INPUT.PROJECT.title1,INPUT.PROJECT.title2,INPUT.PROJECT.title3"
:version = ""
:Conventions = "CF-1.5"
:CF:featureType = "Grid"
:terms_of_use = "These data can be used freely for research purposes provided that the following source is acknowledged: institution"
:disclaimer = "This data is made available in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
}
|