Please find on this page a proposal for netCDf output from the spectral wave model SWAN.
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.
SWAN netCDF-CF CDL scheme
// 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." }
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 |
|
VEL |
Vel |
Current velocity |
UV |
-2 |
2 |
0 |
m/s |
|
UBOT |
Ubot |
Orbital velocity at the bottom |
UV |
0 |
1 |
-10 |
|
|
DISS |
Dissip |
Energy dissipation |
m2/s |
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 |
|
sea_surface_wave_significant_height |
TM01 |
Tm01 |
Average absolute wave period |
UT |
0 |
100 |
-9 |
|
|
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 |
|
|
YC |
Yc |
Y computational grid coordinate |
|
0 |
100 |
-9 |
|
|
WIND |
Windv |
Wind velocity at 10 m above sea level |
UV |
-50 |
50 |
0 |
|
|
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 |
|
|
FSPR |
FSpr |
Frequency spectral width Unknown macro: {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 |
|
|
PER |
Period |
Average absolute wave period |
UT |
0 |
100 |
-9 |
|
|
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 |
|
0 |
1 |
-9 |
|
|
ASTD |
ASTD |
Air-Sea temperature difference |
K |
-10 |
10 |
-99 |
|
|
TMM10 |
Tm_10 |
Average absolute wave period |
UT |
0 |
100 |
-9 |
|
|
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 Unknown macro: {smooth}
|
UT |
0 |
100 |
-9 |
|
|
DISB |
Disbot |
Bottom friction dissipation |
m2/s |
0 |
0.1 |
-9 |
|
|
DISSU |
Dissrf |
Wave breaking dissipation |
m2/s |
0 |
0.1 |
-9 |
|
|
DISW |
Diswcp |
Whitecapping dissipation |
m2/s |
0 |
0.1 |
-9 |
|
|
DISM |
Dismud |
Fluid mud dissipation |
m2/s |
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 |
UH |
0 |
100 |
-99 |
|
|
VaDens |
VaDens |
spectral variance density |
m2/Hz |
0 |
100 |
-99 |
m2s |
sea_surface_wave_variance_spectral_density |
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
[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],'| | |')]
using