Please find on this page a *proposal* for netCDF output from the spectral wave model [SWAN|http://swan.tudelft.nl].
Elements from the SWAN input file are refered to by INPUT*, elements from the SWAN Fortran code swanmain.for are referred to by OV*IVTYPE.
Please provide feed-back or comments.
{toc}
h3. SWAN netCDF-CF CDL scheme
{code}
// 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), shape = [2]
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), shape = [3]
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), shape = [2]
// idem
...
double YP(mx,my), shape = [3]
// idem
...
// - - - - - - - - - - - - - - - - - - - - - - - - - - -
// elseif INPUT.CGRID.UNSTRUCtured
double XP(loc), shape = [6]
// idem
...
double YP(loc), shape = [6]
// idem
...
// end
// ----------------- DIRECTIONS -----------------
double CDIR(), shape = [4]
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(), shape = [4]
NDIR:standard_name = ""
NDIR:units = "degrees_true"
CDIR: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(), shape = [5]
AFREQ:standard_name = ""
AFREQ:long_name = "absolute frequencies"
AFREQ:units = "degrees_true"
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 = "degrees_true"
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([]), shape = [1]
// epsg:name = "Amersfoort / RD New"
// epsg:epsg = 28992
// epsg:epsg_name = "Oblique Stereographic"
// epsg:grid_mapping_name = " "
// epsg:semi_major_axis = 6.3774e+006
// epsg:semi_minor_axis = 6.35608e+006
// epsg:inverse_flattening = 299.153
// epsg:latitude_of_projection_origin = 52.0922
// epsg:longitude_of_projection_origin = 5.23155
// epsg:false_easting = 155000
// epsg:false_northing = 463000
// epsg:scale_factor_at_projection_origin = 0.999908
// // optional PROJ4 REQUIRED FOR ADAGUC.KNMI.NL
// epsg: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"
// epsg:EPSG_code = "EPSG:28992"
// epsg: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([]), shape = [1]
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_for_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."
}
{code}
h3. Mapping of SWAN names to CF standard names
For the complete list where we have to get names from, or have them added to is: [http://cf-pcmdi.llnl.gov/documents/cf-standard-names/]
This table is under construction, please fill in any missing UD units or CF standard names.
|| OVKEYW || OVSNAM || OVLNAM || OVUNIT || OVLLIM || OVULIM || OVEXCV || new: OVCFUD (UD units)||new: OVCFSN (standard name)||
|XP |Xp |X user coordinate |UL |-10000000000|10000000000|-10000000000| m| projection_x_coordinate,longitude|
|YP |Yp |Y user coordinate |UL |-10000000000|10000000000|-10000000000| m| projection_y_coordinate,latitude|
|DIST |Dist |distance along output curve |UL | 0|10000000000| -99| m| |
|DEP |Depth |Depth |UH | -100| 100| -99| m| sea_floor_depth_below_sea_level|
|VEL |Vel |Current velocity |UV | -2| 2| 0| m/s| | sea_water_x_velocity + sea_water_y_velocity alias: x_sea_water_velocity + y_sea_water_velocity|
|UBOT |Ubot |Orbital velocity at the bottom |UV | 0| 1| -10| | |
|DISS |Dissip |Energy dissipation |(in W/m2 or m2/s, depending on command SET)| 0| 0.1| -9| | |
|QB |Qb |Fraction breaking waves | | 0| 1| -1| | |
|LEA |Leak |Energy leak over spectral boundaries |m2/s | 0| 100| -9| | |
|HS |Hsig |Significant wave height |UH | 0| 10| -9| m| sea_surface_wave_significant_height|
|TM01 |Tm01 |alias: significant_height_of_wind_and_swell_waves, sea_surface_wind_wave_significant_height, alias: significant_height_of_wind_waves|
|TM01 |Tm01 |Average absolute wave period |UT | 0| 100| -9| | sea_surface_wave_mean_period_from_variance_spectral_density_first_frequency_moment, sea_surface_wind_wave_mean_period_from_variance_spectral_density_first_frequency_moment|
|RTP |RTpeak |Relative peak period |UT | 0| 100| -9| | |
|DIR |Dir |Average wave direction | UDI | 0| 360| -999| degrees_true _if nautical_| sea_surface_wave_from_direction|
|PDI |PkDir |direction of the peak of the spectrum | UDI | 0| 360| -999| | |
|TDI |TDir |direction of the energy transport | UDI | 0| 360| -999| | |
|DSPR |Dspr |directional spreading | UDI | 0| 60| -9| | |
|WLEN |Wlen |Average wave length |UL | 0| 200| -9| | |
|STEE |Steepn |Wave steepness | | 0| 0.1| -9| | |
|TRA |Transp |Wave energy transport |m3/s | -10| 10| 0| | |
|FOR |WForce |Wave driven force per unit surface |UF | -10| 10| 0| | |
|AAAA |AcDens |spectral action density |m2s | 0| 100| -99| | |
|EEEE |EnDens |spectral energy density |m2 | 0| 100| -99| | |
|AAAA |Aux |auxiliary variable | |-10000000000|10000000000|-10000000000| | |
|XC |Xc |X computational grid coordinate | | 0| 100| -9| m| projection_x_coordinate,longitude|
|YC |Yc |Y computational grid coordinate | | 0| 100| -9| m| projection_y_coordinate,latitude|
|WIND |Windv |Wind velocity at 10 m above sea level |UV | -50| 50| 0| m| wind_speed|
|FRC |FrCoef |Bottom friction coefficient | | 0| 1| -9| | |
|RTM01 |RTm01 |Average relative wave period |UT | 0| 100| -9| | |
|EEEE |EnDens |energy density integrated over direction |m2 | 0| 100| -99| | |
|DHS |dHs |difference in Hs between iterations |UH | 0| 1| -9| | |
|DRTM01|dTm |difference in Tm between iterations |UT | 0| 2| -9| | |
|TM02 |Tm02 |Zero-crossing period |UT | 0| 100| -9| s| |
|FSPR |FSpr |Frequency spectral sea_surface_wave_zero_upcrossing_period, sea_surface_wind_wave_zero_upcrossing_period, sea_surface_wave_mean_period_from_variance_spectral_density_second_frequency_moment, sea_surface_wind_wave_mean_period_from_variance_spectral_density_second_frequency_moment|
|FSPR |FSpr |Frequency spectral width {Kappa} | | 0| 1| -9| | |
|URMS |Urms |RMS of orbital velocity at the bottom |UV | 0| 1| -9| | |
|UFRI |Ufric |Friction velocity |UV | 0| 1| -9| | |
|ZLEN |Zlen |Zero velocity thickness of boundary layer|UL | 0| 1| -9| | |
|TAUW |TauW | | | 0| 1| -9| | |
|CDRAG |Cdrag |Drag coefficient | | 0| 1| -9| | |
|SETUP |Setup |Setup due to waves |m | -1| 1| -9| | |
|TIME |Time |Date-time | | 0| 1| -99999| | |
|TSEC |Tsec |Time in seconds from reference time |s | -100000| 1000000| -99999| | time|
|PER |Period |Average absolute wave period |UT | 0| 100| -9| | sea_surface_wind_wave_period, alias: wind_wave_period|
|RPER |RPeriod |Average relative wave period |UT | 0| 100| -9| | |
|HSWE |Hswell |Wave height of swell part |UH | 0| 10| -9| | |
|URSELL|Ursell |Ursell number sea_surface_swell_wave_significant_height alias: significant_height_of_swell_waves| sea_surface_swell_wave_period, alias: swell_wave_period
|URSELL|Ursell |Ursell number | | 0| 1| -9| | |
|ASTD |ASTD |Air-Sea temperature difference |K | -10| 10| -99| | |
|TMM10 |Tm_10 |Average absolute wave period |UT | 0| 100| -9| | sea_surface_wave_mean_period_from_variance_spectral_density_inverse_frequency_moment, sea_surface_wind_wave_mean_period_from_variance_spectral_density_inverse_frequency_moment|
|RTMM10|RTm_10 |Average relative wave period |UT | 0| 100| -9| | |
|DIFPAR|DifPar |Diffraction parameter | | -10| 10| -99| | |
|TMBOT |TmBot |Bottom wave period |UT | 0| 100| -9| | |
|WATL |Watlev |Water level |UH | -100| 100| -99| | |
|BOTL |Botlev |Bottom level |UH | -100| 100| -99| | |
|TPS |TPsmoo |Relative peak period {smooth} |UT | 0| 100| -9| | |
|DISB |Disbot |Bottom friction dissipation |m2/s (in W/m2 or m2/s, depending on command SET)| 0| 0.1| -9| | |
|DISSU |Dissrf |Wave breaking dissipation |(in W/m2 or m2/s, depending on command SET)| 0| 0.1| -9| | |
|DISW |Diswcp |Whitecapping dissipation |(in W/m2 or m2/s, depending on command SET)| 0| 0.1| -9| | |
|DISM |Dismud |Fluid mud dissipation |(in W/m2 or m2/s, depending on command SET)| 0| 0.1| -9| | |
|WLENMR|Wlenmr |Average wave length with mud real part |UL | 0| 200| -9| | |
|KI |ki |Average wave number with mud imag part |rad/m| 0| 1| -9| | |
|MUDL |Mudlayer |Mudlayer thickness |ki |Average wave number with mud imag part |rad/mUH | 0| 1100| -999| | |
|MUDL |Mudlayer|Mudlayer thicknessVaDens|VaDens |spectral variance density |UH m2/Hz| 0| 100| -99| m2 s| sea_surface_wave_variance_spectral_density| integrated in sp1
|VaDens|VaDens |spectral variance density |m2/Hz/degr| 0| 100| -99| m2s m2 s degr-1| sea_surface_wave_directional_variance_spectral_density| per directional bin in sp2
|Swind |Swind |wind source term |m2 | 0| 100| -99| | |
|Swcap |Swcap |whitecapping dissipation |m2 | 0| 100| -99| | |
|Sfric |Sfric |bottom friction dissipation |m2 | 0| 100| -99| | |
|Smud |Smud |fluid mud dissipation |m2 | 0| 100| -99| | |
|Ssurf |Ssurf |surf breaking dissipation |m2 | 0| 100| -99| | |
|Snl3 |Snl3 |triad interactions |m2 | 0| 100| -99| | |
|Snl4 |Snl4 |quadruplet interactions |m2 | 0| 100| -99| | |
|KIMAG |KIMAG |Wave number with mud imag part |rad/m| NaN| NaN| NaN| | |
|KREAL |KREAL |Wave number with mud real part |rad/m| NaN| NaN| NaN| | |
This table was generated with the Matlab code
{code}
[D,D0] = swan_quantity % part of Openearth.eu[addrowcol(char(D0.OVKEYW),0,[-1 1],'|') char(D0.OVSNAM) addrowcol(char(D0.OVLNAM),0,[-1 1],'|') char(D0.OVUNIT) addrowcol(num2str(cell2mat(D0.OVLEXP')),0,[-1 1],'|') addrowcol(num2str(cell2mat(D0.OVHEXP')),0,[1],'|') addrowcol(num2str(cell2mat(D0.OVEXCV')),0,[1],'| | |')]
{code}
using
|