The Windsurf model¶
What is it?¶
The Windsurf model is a composite model that connects three different model cores for simulating integrated nearshore and aeolian sediment transport. The Windsurf model connects the following model cores:
- XBeach - Nearshore hydrodynamics (http://www.xbeach.org)
- AeoLiS - Supply-limited aeolian sediment transport (http://openearth.github.io/aeolis/)
- Coastal Dune Model (CDM) - Aeolian sediment transport and wind shear accounting for morphological feedback and vegetation
The Windsurf model simulates 2DH nearshore and aeolian sediment transport as a result of short waves, infragravity waves, tides and currents and wind. The Windsurf model accounts for multiple sediment fractions and bed layers, sediment supply limitations in aeolian transport as a result of moisture contents, sediment sorting and beach armoring, morphological feedback and vegetation.
How to use it?¶
The Windsurf composite model features a Python interface that connects the three different model cores and acts as a user-interface for the end-user. The Python interface can be downloaded as Python package from the OpenEarth GitHub respository: https://github.com/openearth/windsurf/.
The installation and configuration of a Windsurf model is described in the following subsections.
Installation¶
Download the individual model cores from their respective repositories and compile the models as libraries according to their manuals:
- XBeach: https://svn.oss.deltares.nl/repos/xbeach/branches/fedor-template/ (at this moment the XBeach trunk does not include the necessary BMI interface, use the “fedor-template” branch instead)
- AeoLiS: https://github.com/openearth/windsurf/
- CDM: ?
Download the Windsurf Python package from https://github.com/openearth/windsurf/ and install using:
>>> python setup.py install
Check if the installation is successful using:
>>> windsurf --help
windsurf : a composite model for simulating integrated nearshore and aeolian sediment transport
Usage:
windsurf <config> [--verbose=LEVEL]
Positional arguments:
config configuration file
Options:
-h, --help show this help message and exit
--verbose=LEVEL print logging messages [default: 30]
Configuration¶
The Windsurf model is configured through a single JSON file. The JSON file contains different categories of configuration options that are treated in this section. A JSON configuration file may contain the following:
{
"time" : {
"start" : 0.0,
"stop" : 31536000.0
},
"models" : {
"xbeach" : {
"engine" : "xbeachmi.model.XBeachMI",
"engine_path" : "/Users/hoonhout/Checkouts/XBeach/trunk/src/xbeachlibrary/.libs/",
"configfile" : "xbeachmi.json"
},
"aeolis" : {
"engine" : "aeolis",
"engine_path" : "/Users/hoonhout/Github/aeolis/src/.libs/",
"configfile" : "aeolis.txt"
},
"cdm" : {
"engine" : "cdm",
"engine_path" : "/Users/hoonhout/Github/cdm/.libs/",
"configfile" : "cdm.txt"
}
},
"exchange" : [
{
"var_from" : "xbeach.zb",
"var_to" : "aeolis.zbx"
},{
"var_from" : "xbeach.zs",
"var_to" : "aeolis.zs"
},{
"var_from" : "xbeach.H",
"var_to" : "aeolis.Hs"
},{
"var_from" : "aeolis.zb",
"var_to" : "xbeach.zb"
},{
"var_from" : "aeolis.zs",
"var_to" : "xbeach.zs"
}
],
"regimes" : {
"stat" : {
"xbeach" : {
"instance" : "stat"
},
"aeolis" : {
"scheme" : "euler_backward",
"dt" : 60.0,
"accfac" : 10.0
}
},
"instat" : {
"xbeach" : {
"instance" : "instat"
},
"aeolis" : {
"scheme" : "euler_backward",
"dt" : 60.0,
"accfac" : 10.0
}
}
},
"scenario" : [
[0.0, "stat"],
[730800.0, "instat"],
[1004400.0, "stat"],
[1890000.0, "instat"],
[2012400.0, "stat"],
[2239200.0, "instat"],
[2466000.0, "stat"],
[2815200.0, "instat"],
[3265200.0, "stat"],
[3826800.0, "instat"],
[3938400.0, "stat"],
[4352400.0, "instat"],
[4410000.0, "stat"],
[5115600.0, "instat"],
[5256000.0, "stat"],
[5612400.0, "instat"],
[5821200.0, "stat"],
[6451200.0, "instat"],
[6537600.0, "stat"],
[6973200.0, "instat"],
[7358400.0, "stat"],
[7491600.0, "instat"],
[7632000.0, "stat"],
[7783200.0, "instat"],
[7887600.0, "stat"],
[8161200.0, "instat"],
[8276400.0, "stat"],
[8640000.0, "instat"],
[8744400.0, "stat"],
[10047600.0, "instat"],
[10155600.0, "stat"],
[10674000.0, "instat"],
[10767600.0, "stat"],
[10990800.0, "instat"],
[11959200.0, "stat"],
[19112400.0, "instat"],
[19292400.0, "stat"],
[24256800.0, "instat"],
[24433200.0, "stat"],
[27082800.0, "instat"],
[27183600.0, "stat"],
[31536000.0, "instat"]
],
"restart" : {
"variables" : ["xbeach.zb","xbeach.Fx","xbeach.Fy","xbeach.Sxy","xbeach.Syy","xbeach.Sxx","xbeach.H","xbeach.cgx","xbeach.cgy","xbeach.cx","xbeach.cy","xbeach.ctheta","xbeach.ee","xbeach.rr","xbeach.k","xbeach.c","xbeach.cg","xbeach.hh","xbeach.zs","xbeach.zs0","xbeach.uu","xbeach.vu","xbeach.uv","xbeach.vv","xbeach.qx","xbeach.qy","xbeach.E","xbeach.R","xbeach.urms","xbeach.D","xbeach.Qb","xbeach.ust","xbeach.ueu","xbeach.vev","xbeach.u","xbeach.v","xbeach.ue","xbeach.ve","xbeach.wetu","xbeach.wetv","xbeach.wetz","xbeach.hu","xbeach.hv","xbeach.hum","xbeach.hvm","xbeach.vmag","xbeach.ccg","xbeach.uwf","xbeach.vwf","xbeach.ustr","xbeach.usd","xbeach.DR","xbeach.ur","xbeach.Susg","xbeach.Svsg","xbeach.Subg","xbeach.Svbg","xbeach.ceqbg","xbeach.ceqsg","xbeach.ua","xbeach.BR","xbeach.kb","xbeach.pbbed","xbeach.bedfriccoef","xbeach.taubx","xbeach.tauby","xbeach.Df","xbeach.Dp","xbeach.Sutot","xbeach.Svtot","xbeach.cctot","xbeach.cf","xbeach.cfu","xbeach.cfv","xbeach.viscu","xbeach.viscv", "aeolis.uw", "aeolis.udir", "aeolis.zb", "aeolis.zs", "aeolis.Hs", "aeolis.uth", "aeolis.moist", "aeolis.Cu", "aeolis.Ct", "aeolis.supply", "aeolis.thlyr", "aeolis.mass"],
"times" : [86400.0, 172800.0, 259200.0, 2678400.0, 5270400.0, 7948800.0, 10627200.0, 13046400.0, 15724800.0, 18316800.0, 20995200.0, 23587200.0, 26265600.0, 28857600.0, 31536000.0],
"backup" : true
},
"netcdf" : {
"outputfile" : "windsurf.nc",
"outputvars" : ["zb", "zs", "H", "Ct.avg", "Cu.avg", "uw.avg", "uth.avg", "mass.avg", "supply.avg"],
"interval" : 3600.0,
"crs" : {
"grid_mapping_name" : "oblique_stereographic",
"epsg_code" : "EPSG:28992",
"semi_major_axis" : 6377397.155,
"semi_minor_axis" : 6356078.96282,
"inverse_flattening" : 299.1528128,
"latitude_of_projection_origin" : 52.0922178,
"longitude_of_projection_origin" : 5.23155,
"scale_factor_at_projection_origin" : 0.9999079,
"false_easting" : 155000.0,
"false_northing" : 463000.0,
"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"
},
"attributes" : {
"institution" : "Delft University of Technology",
"creator_name" : "Bas Hoonhout",
"creator_email" : "b.m.hoonhout@tudelft.nl"
}
}
}
time¶
Time management.
models¶
Model engine specification and configuration.
exchange¶
Data exchange between model engines.
regimes¶
Environmental regime specification and configuration.
scenario¶
Scenario configuration (sequence of regimes)
Execution¶
Execute the model by calling the following command from the command-line:
>>> windsurf windsurf.json
To print more output to the screen decrease the verbosity number as follows:
>>> windsurf windsurf.json --verbose=20
Tow write the output to a file use the following:
>>> windsurf windsurf.json --verbose=20 > windsurf.log