diff --git a/README.md b/README.md index f6d87982..c80e8fb8 100644 --- a/README.md +++ b/README.md @@ -61,9 +61,16 @@ aeolis run aeolis wind --mean=6 --duration=3600 ``` -## Documentation +## Documentation and help Detailed documentation can be found at [AeoLiS ReadTheDocs](http://aeolis.readthedocs.io/) +A couple of short courses are available to help new users get acquainted with the model: +- [AeoLiS short course](https://github.com/openearth/aeolis-shortcourse) +- [AeoLiS case study documentation by ERDC](https://github.com/erdc/aeolis-python/tree/master/tutorial) + +Example case studies can also be found in the [examples folder](https://github.com/openearth/aeolis-python/tree/main/aeolis/examples) that is part of the AeoLiS installation. + +We encourage (new) users to post questions and case studies on the [AeoLiS Discussion Board](https://github.com/openearth/aeolis-python/discussions). We use this public forum so our help and advice is available to everyone. ## AeoLiS Developer Team The maintenance and development is done by a group of very enthusiastic people. @@ -74,18 +81,18 @@ Read our [Contribution Guidelines](CONTRIBUTING.md) to know how you can help to **Current Members:** - [Bart van Westen](mailto:Bart.vanWesten@deltares.nl) at Deltares -- [Nick Cohn](mailto:nick.cohn@usace.army.mil) at U.S. Army Engineer Research and Development Center (ERDC) +- [Nick Cohn](mailto:nicholas.t.cohn@usace.army.mil) at U.S. Army Engineer Research and Development Center (ERDC) - [Sierd de Vries](mailto:Sierd.deVries@tudelft.nl) (founder) at Delft University of Technology -- [Christa van IJzendoorn](mailto:C.O.vanIJzendoorn@tudelft.nl) at Delft University of Technology -- [Caroline Hallin](mailto:E.C.Hallin@tudelft.nl) at Delft University of Technology +- [Christa van IJzendoorn](mailto:vanijzec@oregonstate.edu) at Oregon State University +- [Caroline Hallin](mailto:caroline.hallin@tvrl.lth.se) at Lund University - [Glenn Strypsteen](mailto:glenn.strypsteen@kuleuven.be) at Katholieke Universiteit Leuven -- [Janelle Skaden](mailto:Janelle.E.Skaden@usace.army.mil) at U.S. Army Engineer Research and Development Center (ERDC) **Previous Members & Contributors:** - [Bas Hoonhout](mailto:bas@hoonhout.com) (founder) - Tom Pak - Pieter Rauwoens - Lisa Meijer +- Janelle Skaden ## Citation diff --git a/aeolis/console.py b/aeolis/console.py index 97c36dd6..2f3ab1e8 100644 --- a/aeolis/console.py +++ b/aeolis/console.py @@ -79,6 +79,7 @@ @aeolis_app.command(name="mycommand", help="My command help") def mycommand(): + You can then run the command from the command line as follows: @@ -88,6 +89,7 @@ def mycommand(): *************************************************************************** + """ diff --git a/docs/_static/aeolis_overview.png b/docs/_static/aeolis_overview.png new file mode 100644 index 00000000..d16c4552 Binary files /dev/null and b/docs/_static/aeolis_overview.png differ diff --git a/docs/_static/custom.css b/docs/_static/custom.css new file mode 100644 index 00000000..955de2cd --- /dev/null +++ b/docs/_static/custom.css @@ -0,0 +1,24 @@ +/* Widen the content area */ +.wy-nav-content { + max-width: 1000px !important; +} + +/* Remove borders and backgrounds from video grid tables */ +table.borderless-table, +table.borderless-table td, +table.borderless-table tr { + border: none !important; + background: transparent !important; + background-color: transparent !important; +} + +/* Remove the specific grey background RTD applies to odd rows */ +table.borderless-table tr:nth-child(2n-1), +table.borderless-table tr:nth-child(2n-1) td { + background-color: transparent !important; +} + +/* Optional: remove padding to make the videos sit closer together */ +table.borderless-table td { + padding: 5px !important; +} diff --git a/docs/aeolis.bib b/docs/aeolis.bib index 1d46d31c..13c72037 100644 --- a/docs/aeolis.bib +++ b/docs/aeolis.bib @@ -1,5 +1,3 @@ -% This file was created with JabRef 2.9.2. -% Encoding: UTF-8 @MANUAL{Simunek1998, title = {The HYDRUS-1D software package for simulating the one-dimensional movement of water, heat, and multiple solutes in variably- saturated @@ -14,76 +12,108 @@ @MANUAL{Simunek1998 timestamp = {2014.03.07} } -@article{Aagaard2014, - author = {Aagaard, T.}, - title = {Sediment supply to beaches: Cross-shore sand transport on the lower shoreface}, - journal = {Journal of Geophysical Research}, - year = {2014}, - volume = {119}, - pages = {913--926}, - number = {4}, - note = {2013JF003041}, - doi = {10.1002/2013JF003041}, - issn = {2169-9011}, - keywords = {Marine sediments: processes and transport, Littoral processes, Nearshore - processes, sediment transport, sediment budgets, shoreline change, - equilibrium profile}, - owner = {hoonhout}, - timestamp = {2015.06.15} +@article{Keijsers2016, + author = {Keijsers, J. G. S. and de Groot, A. V. and Riksen, M. J. P. M.}, + title = {Modeling the biogeomorphic evolution of coastal dunes in response to climate change}, + journal = {Journal of Geophysical Research: Earth Surface}, + year = {2016}, + volume = {121}, + pages = {1161–1181}, + doi = {10.1002/2015JF003815}, } -@article{Arens2002, - author = {Arens, SM and Van Boxel, JH and Abuodha, JOZ}, - title = {Changes in grain size of sand in transport over a foredune}, +@article{DuranMoore2013, + author = {Durán, O. and Moore, L. J.}, + title = {Vegetation controls on the maximum size of coastal dunes}, + journal = {Proceedings of the National Academy of Sciences}, + year = {2013}, + volume = {110}, + number = {43}, + pages = {17217–17222}, + doi = {10.1073/pnas.1307580110}, +} + +@article{Strypsteen2024, + author = {Strypsteen, G. and Bonte, D. and Taelman, C. and Derijckere, J. and Rauwoens, P.}, + title = {Vertical Growth Rate of Planted Vegetation Controls Dune Growth on a Sandy Beach}, + journal = {Coastal Engineering}, + year = {2024}, + doi = {10.2139/ssrn.4872614}, +} + +@article{DuranHerrmann2006, + author = {Durán, O. and Herrmann, H. J.}, + title = {Vegetation against dune mobility}, + journal = {Physical Review Letters}, + year = {2006}, + volume = {97}, + number = {18}, + pages = {1–4}, + doi = {10.1103/PhysRevLett.97.188001}, +} + +@article{Strypsteen2024b, + author = {Strypsteen, G. and Bonte, D. and Taelman, C. and Derijckere, J. and Rauwoens, P.}, + title = {Three years of morphological dune development after planting marram grass on a beach}, journal = {Earth Surface Processes and Landforms}, - year = {2002}, - volume = {27}, - pages = {1163--1175}, - number = {11}, - owner = {hoonhout}, - publisher = {Wiley Online Library}, - timestamp = {2016.04.29} + year = {2024}, + doi = {10.1002/esp.5870}, } -@article{Arens1996, - author = {Arens, S. M.}, - title = {Patterns of sand transport on vegetated foredunes}, - journal = {Geomorphology}, - year = {1996}, - volume = {17}, - pages = {339--350}, - file = {Arens1996.pdf:Arens1996.pdf:PDF}, - owner = {hoonhout}, - timestamp = {2015.05.26} +@article{Nolet2018, + author = {Nolet, C. and van Puijenbroek, M. and Suomalainen, J. and Limpens, J. and Riksen, M.}, + title = {UAV-imaging to model growth response of marram grass to sand burial: Implications for coastal dune development}, + journal = {Aeolian Research}, + year = {2018}, + volume = {31}, + pages = {50–61}, + note = {March 2017}, + doi = {10.1016/j.aeolia.2017.08.006}, +} + +@article{VANWESTEN2024106093, +title = {AeoLiS: Numerical modelling of coastal dunes and aeolian landform development for real-world applications}, +journal = {Environmental Modelling & Software}, +volume = {179}, +pages = {106093}, +year = {2024}, +issn = {1364-8152}, +doi = {https://doi.org/10.1016/j.envsoft.2024.106093}, +author = {Bart {van Westen} and Sierd {de Vries} and Nicholas Cohn and Christa {van IJzendoorn} and Glenn Strypsteen and Caroline Hallin}, +keywords = {Aeolian sediment transport, Dune vegetation, Dune geomorphology, Blowout, Embryo dune, Parabolic dune}, +} + +@article{Maun1998, + author = {Maun, M. A.}, + title = {Adaptations of plants to burial in coastal sand dunes}, + journal = {Canadian Journal of Botany}, + year = {1998}, + volume = {76}, + number = {5}, + pages = {713–738}, + doi = {10.1139/cjb-76-5-713}, } -@techreport{Arens2010, - author = {Arens, S M and Puijvelde, S P and Bri\`{e}re, C}, - title = {Effecten van suppleties op duinontwikkeling}, - institution = {Arens Bureau voor Strand- en Duinonderzoek}, - year = {2010}, - number = {2010.03}, - note = {for LNV Directie Kennis (OBN) en Rijkswaterstaat Waterdienst}, - owner = {hoonhout}, - timestamp = {2015.05.26}, - url = {http://dt.natuurkennis.nl/uploads/OBN142_DK_Effecten_van_suppleties_op_duinontwikkeling.zip} +@article{Danin1991, + author = {Danin, A.}, + title = {Plant adaptations in desert dunes}, + journal = {Journal of Arid Environments}, + year = {1991}, + volume = {21}, + number = {2}, + pages = {193–212}, + doi = {10.1016/s0140-1963(18)30682-7}, } -@article{Baas2005, - author = {Baas, A. C. W. and Sherman, D. J.}, - title = {Formation and behavior of aeolian streamers}, - journal = {Journal of Geophysical Research}, - year = {2005}, - volume = {110}, - number = {F3}, - note = {F03011}, - doi = {10.1029/2004JF000270}, - issn = {2156-2202}, - keywords = {Atmospheric Processes: Boundary layer processes, Atmospheric Processes: - Turbulence, Nonlinear Geophysics: Complex systems, aeolian, sediment - transport, streamers}, - owner = {hoonhout}, - timestamp = {2015.06.15} +@article{Hesp1991, + author = {Hesp, P. A.}, + title = {Ecological processes and plant adaptations on coastal dunes}, + journal = {Journal of Arid Environments}, + year = {1991}, + volume = {21}, + number = {2}, + pages = {165–191}, + doi = {10.1016/s0140-1963(18)30681-5}, } @article{Bagnold1937a, @@ -109,40 +139,6 @@ @article{Bagnold1937b timestamp = {2015.10.01} } -@article{Bagnold1936, - author = {Bagnold, RA}, - title = {The movement of desert sand}, - journal = {Proceedings of the Royal Society of London. Series A, Mathematical - and Physical Sciences}, - year = {1936}, - pages = {594--620}, - owner = {hoonhout}, - publisher = {JSTOR}, - timestamp = {2015.10.01} -} - -@article{Bagnold1935, - author = {Bagnold, RA}, - title = {The movement of desert sand}, - journal = {Geographical Journal}, - year = {1935}, - pages = {342--365}, - owner = {hoonhout}, - publisher = {JSTOR}, - timestamp = {2015.10.01} -} - -@book{Bagnold1941, - title = {The Physics of Blown Sand and Desert Dunes}, - publisher = {Methuen}, - year = {1941}, - author = {Bagnold, R A}, - pages = {265 pp.}, - address = {London}, - owner = {hoonhout}, - timestamp = {2015.05.26} -} - @article{Baird1998, abstract = {A numerical solution to the 1-D Boussinesq ground water equation is used to predict water table response to tidal and wave forcing. We argue that the solution presented here offers considerable advantages over other solutions to the 1-D Boussinesq ground water equation and is simpler to apply than 2-D ground water models. The main assumption in using the Boussinesq equation is that ground water flow in a shallow aquifer can be described using the Dupuit-Forchheimer approximation, in which it is assumed that changes in hydraulic head with depth below the water table are negligible. The predictive ability of the solution was tested against field data from ten wells and ten piezometers on a microtidal sandy beach. Two model runs were carried out: in the first the effect of tides only was considered; in the second setup due to waves was also considered. The arithmetic mean of independently measured values of hydraulic conductivity was used to describe sediment characteristics. The piezometer data show that changes in hydraulic head with depth are negligible for much of the beach, suggesting that the use of the Boussinesq equation is appropriate. The correspondence between model predictions of water table elevations and field observations is good for both the tide-only and the tide plus setup model runs, with the latter giving the better predictions.}, author = {Baird, Andrew J. and Mason, Travis and Horn, Diane P.}, @@ -157,93 +153,6 @@ @article{Baird1998 year = {1998} } -@article{Barchyn2015, - author = {Barchyn, T. E. and Hugenholtz, C. H.}, - title = {Predictability of dune activity in real dune fields under unidirectional - wind regimes}, - journal = {Journal of Geophysical Research}, - year = {2015}, - volume = {120}, - pages = {159--182}, - number = {2}, - note = {2014JF003248}, - doi = {10.1002/2014JF003248}, - issn = {2169-9011}, - keywords = {Modeling, Land cover change, Earth system modeling, aeolian, stabilization, - reactivation, vegetation cover}, - owner = {hoonhout}, - timestamp = {2015.06.15} -} - -@article{Barchyn2014, - author = {Barchyn, T. E. and Hugenholtz, C. H. and Li, B. and McKenna Neuman, - C. and Sanderson, S.}, - title = {From particle counts to flux: Wind tunnel testing and calibration of the "Wenglor" aeolian sediment transport sensor}, - journal = {Aeolian Research}, - year = {2014}, - volume = {15}, - pages = {311--318}, - doi = {10.1016/j.aeolia.2014.06.009}, - owner = {hoonhout}, - timestamp = {2016.06.09} -} - -@PHDTHESIS{Battjes1974, - author = {Battjes, Jurjen Anno}, - title = {Computation of set-up, longshore currents, run-up and overtopping due to wind-generated waves}, - school = {TU Delft, Delft University of Technology}, - year = {1974}, - owner = {hoonhout}, - timestamp = {2016.07.08}, - url = {http://repository.tudelft.nl/assets/uuid:e126e043-a858-4e58-b4c7-8a7bc5be1a44/Battjes.pdf} -} - -@article{Bauer2014, - author = {Bauer, B. O. and Davidson-Arnott, R. G. D.}, - title = {Aeolian particle flux profiles and transport unsteadiness}, - journal = {Journal of Geophysical Research}, - year = {2014}, - volume = {119}, - pages = {1542--1563}, - number = {7}, - note = {2014JF003128}, - doi = {10.1002/2014JF003128}, - issn = {2169-9011}, - keywords = {Geomorphology and weathering, Land/atmosphere interactions, Geomorphology: - general, Sediment transport, Surface materials and properties, sediment - flux profiles, exponential decay, vegetated coastal foredune, wind - gusts, transport intermittency, sediment flurries}, - owner = {hoonhout}, - timestamp = {2015.06.15}, - url = {http://dx.doi.org/10.1002/2014JF003128} -} - -@article{Bauer2002, - author = {Bauer, B O and Davidson-Arnott, R G D}, - title = {A general framework for modeling sediment supply to coastal dunes - including wind angle, beach geometry, and fetch effects}, - journal = {Geomorphology}, - year = {2002}, - volume = {49}, - pages = {89--108}, - doi = {10.1016/S0169-555X(02)00165-4}, - owner = {hoonhout}, - timestamp = {2015.05.24} -} - -@article{Bauer2009, - author = {Bauer, B O and Davidson-Arnott, R G D and Hesp, P A and Namikas, - S L and Ollerhead, J and Walker, I J}, - title = {Aeolian sediment transport on a beach: Surface moisture, wind fetch, and mean transport}, - journal = {Geomorphology}, - year = {2009}, - volume = {105}, - pages = {106--116}, - doi = {10.1016/j.geomorph.2008.02.016}, - owner = {hoonhout}, - timestamp = {2015.05.24} -} - @techreport{Belly1964, author = {Belly, P Y}, title = {Sand movement by wind}, @@ -268,998 +177,64 @@ @article{Brakenhoff2019 year = {2019} } -@article{Buscombe2010, - author = {Buscombe, D and Rubin, D M and Warrick, J A}, - title = {A universal approximation of grain size from images of noncohesive sediment}, - journal = {Journal of Geophysical Research}, - year = {2010}, - volume = {115}, - number = {F2}, - note = {F02015}, - doi = {10.1029/2009JF001477}, - owner = {hoonhout}, - timestamp = {2015.05.26} -} - -@article{Cheng2015, - author = {Cheng, Hong and Liu, Chenchen and Zou, Xueyong and Li, Jifeng and - He, Jiajia and Liu, Bo and Wu, Yongqiu and Kang, Liqiang and Fang, - Yi}, - title = {Aeolian creeping mass of different grain sizes over sand beds of varying length}, - journal = {Journal of Geophysical Research}, - year = {2015}, - note = {2014JF003367}, - doi = {10.1002/2014JF003367}, - issn = {2169-9011}, - keywords = {Aerosols and particles, Erosion and weathering, creeping sand grains, - transport mass, length of sand bed, grain size, wind tunnel}, - owner = {hoonhout}, - timestamp = {2015.07.07}, - url = {http://dx.doi.org/10.1002/2014JF003367} -} - -@inproceedings{Cohn2015, - author = {Cohn, N and Anderson, D and Ruggiero, P}, - title = {Observations of intertidal bar welding along a high energy, dissipative coastline}, - booktitle = {Proceedings Coastal Sediments}, - year = {2015}, - owner = {hoonhout}, - timestamp = {2015.05.26} -} - -@article{Courant1967, - author = {Courant, Richard and Friedrichs, Kurt and Lewy, Hans}, - title = {On the partial difference equations of mathematical physics}, - journal = {IBM journal of Research and Development}, - year = {1967}, - volume = {11}, - pages = {215--234}, - number = {2}, - owner = {hoonhout}, - publisher = {IBM}, - timestamp = {2015.10.06}, - url = {http://ieeexplore.ieee.org/stamp/stamp.jsp?tp=&arnumber=5391985} -} - -@techreport{Curto2013, - author = {Curto, V}, - title = {Field measurements of grain size distributions - {K}ijkduin and {S}and {M}otor}, - institution = {Delft University of Technology / Deltares}, - year = {2013}, - number = {4257162}, - note = {Traineeship Report}, - owner = {hoonhout}, - timestamp = {2015.05.26} -} - -@article{Darke2008, - author = {Darke, I and McKenna Neuman, C}, - title = {Field study of beach water content as a guide to wind erosion potential}, - journal = {Journal of Coastal Research}, - year = {2008}, - volume = {24}, - pages = {1200--1208}, - number = {5}, - doi = {10.2112/00-000.1}, - owner = {hoonhout}, - timestamp = {2015.05.26} -} - -@article{DavidsonArnott1997, - author = {Davidson-Arnott, Robin GD and White, Davina C and Ollerhead, Jeff}, - title = {The effects of artificial pebble concentrations on eolion sand transport on a beach}, - journal = {Canadian Journal of Earth Sciences}, - year = {1997}, - volume = {34}, - pages = {1499--1508}, - number = {11}, - owner = {hoonhout}, - publisher = {NRC Research Press}, - timestamp = {2015.10.01}, - url = {http://www.nrcresearchpress.com/doi/pdf/10.1139/e17-122} -} - -@article{DavidsonArnott2009, - author = {Davidson-Arnott, R G D and Bauer, B O}, - title = {Aeolian sediment transport on a beach: Thresholds, intermittency, and high frequency variability}, - journal = {Geomorphology}, - year = {2009}, - volume = {105}, - pages = {117--126}, - doi = {10.1016/j.geomorph.2008.02.018}, - owner = {hoonhout}, - timestamp = {2015.05.24} -} - -@article{DavidsonArnott2005, - author = {Davidson-Arnott, R G D and MacQuarrie, K and Aagaard, T}, - title = {The effect of wind gusts, moisture content and fetch length on sand transport on a beach}, - journal = {Geomorphology}, - year = {2005}, - volume = {68}, - pages = {115--129}, - doi = {10.1016/j.geomorph.2004.04.008}, - owner = {hoonhout}, - timestamp = {2015.05.24} -} - -@article{DavidsonArnott2008, - author = {Davidson-Arnott, R G D and Yang, Y and Ollerhead, J and Hesp, P A - and Walker, I J}, - title = {The effects of surface moisture on aeolian sediment transport threshold and mass flux on a beach}, - journal = {Earth Surface Processes and Landforms}, - year = {2008}, - volume = {33}, - pages = {55--74}, - number = {1}, - doi = {10.1002/esp.1527}, - owner = {hoonhout}, - timestamp = {2015.05.24} -} - -@manual{Delft3DManual, - title = {Delft3D - 3D/2D modelling suite for integral water solutions - Hydro-Morphodynamics}, - author = {{Delft3D-FLOW Manual}}, - organization = {Deltares}, - address = {Delft}, - month = {May}, - year = {2014}, - note = {Version 3.15.34158}, - owner = {hoonhout}, - timestamp = {2015.05.26} -} - @article{DelgadoFernandez2010, author = {Delgado-Fernandez, I}, title = {A review of the application of the fetch effect to modelling sand supply to coastal foredunes}, journal = {Aeolian Research}, year = {2010}, volume = {2}, - pages = {61--70}, - doi = {10.1016/j.aeolia.2010.04.001}, - owner = {hoonhout}, - timestamp = {2015.05.24} -} - -@article{DelgadoFernandez2011, - author = {Delgado-Fernandez, Irene and Davidson-Arnott, Robin A}, - title = {Meso-scale aeolian sediment input to coastal dunes: The nature of aeolian transport events}, - journal = {Geomorphology}, - year = {2011}, - volume = {126}, - pages = {217--232}, - number = {1}, - doi = {10.1016/j.geomorph.2010.11.005}, - owner = {hoonhout}, - publisher = {Elsevier}, - timestamp = {2015.10.02} -} - -@article{DelgadoFernandez2012, - author = {Delgado-Fernandez, Irene and Davidson-Arnott, Robin and Bauer, Bernard - O and Walker, Ian J and Ollerhead, Jeff and Rhew, Hosahng}, - title = {Assessing aeolian beach-surface dynamics using a remote sensing approach}, - journal = {Earth Surface Processes and Landforms}, - year = {2012}, - volume = {37}, - pages = {1651--1660}, - number = {15}, - doi = {10.1002/esp.3301}, - owner = {hoonhout}, - publisher = {Wiley Online Library}, - timestamp = {2015.10.07} -} - -@article{Dong2004a, - author = {Dong, Zhibao and Wang, Hongtao and Liu, Xiaoping and Wang, Xunming}, - title = {The blown sand flux over a sandy surface: a wind tunnel investigation on the fetch effect}, - journal = {Geomorphology}, - year = {2004}, - volume = {57}, - pages = {117--127}, - doi = {10.1016/S0169-555X(03)00087-4}, - owner = {hoonhout}, - timestamp = {2015.05.26} -} - -@article{Dong2004b, - author = {Dong, Zhibao and Wang, Hongtao and Liu, Xiaoping and Wang, Xunming}, - title = {A wind tunnel investigation of the influences of fetch length on the flux profile of a sand cloud blowing over a gravel surface}, - journal = {Earth Surface Processes and Landforms}, - year = {2004}, - volume = {29}, - pages = {1613--1626}, - number = {13}, - doi = {10.1002/esp.1116}, - owner = {hoonhout}, - publisher = {Wiley Online Library}, - timestamp = {2015.10.01} -} - -@article{Dupont2014, - author = {Dupont, S. and Bergametti, G. and Simo\"{e}ns, S.}, - title = {Modeling aeolian erosion in presence of vegetation}, - journal = {Journal of Geophysical Research}, - year = {2014}, - volume = {119}, - pages = {168--187}, - number = {2}, - doi = {10.1002/2013JF002875}, - issn = {2169-9011}, - keywords = {Erosion, saltation, vegetation, large-eddy simulation, erosion}, - owner = {hoonhout}, - timestamp = {2015.06.15} -} - -@article{Duran2013, - author = {Dur\'{a}n, O. and Moore, L. J.}, - title = {Vegetation controls on the maximum size of coastal dunes}, - journal = {Proceedings of the National Academy of Sciences of the United States of America}, - year = {2013}, - volume = {110}, - pages = {17217--17222}, - doi = {10.1073/pnas.1307580110}, - owner = {hoonhout}, - timestamp = {2015.05.27} -} - -@book{Dyer1986, - title = {Coastal and estuarine sediment dynamics}, - publisher = {Wiley}, - year = {1986}, - author = {Dyer, K R}, - pages = {342 pp}, - address = {Chichester}, - owner = {hoonhout}, - timestamp = {2014.06.11} -} - -@article{Dymin1954, - author = {Dymin}, - title = {}, - year = {1954}, - note = {quoted by Greeley and Iverson (1985)}, - owner = {hoonhout}, - journal = {}, - timestamp = {2015.10.01} -} - -@article{Edwards2009, - author = {Edwards, B L and Namikas, S L}, - title = {Small-scale variability in surface moisture on a fine-grained beach: implications for modeling aeolian transport}, - journal = {Earth Surface Processes and Landforms}, - year = {2009}, - volume = {34}, - pages = {1333--1338}, - doi = {10.1002/esp.1817}, - owner = {hoonhout}, - timestamp = {2015.05.26} -} - -@article{Edwards2013, - author = {Edwards, Brandon L and Namikas, Steven L and D'Sa, Eurico J}, - title = {Simple infrared techniques for measuring beach surface moisture}, - journal = {Earth Surface Processes and Landforms}, - year = {2013}, - volume = {38}, - pages = {192--197}, - number = {2}, - doi = {10.1002/esp.3319}, - owner = {hoonhout}, - publisher = {Wiley Online Library}, - timestamp = {2015.10.07} -} - -@article{Furieri2013, - author = {Furieri, B and Russeil, S and Santos, JM and Harion, JL}, - title = {Effects of non-erodible particles on aeolian erosion: Wind-tunnel simulations of a sand oblong storage pile}, - journal = {Atmospheric Environment}, - year = {2013}, - volume = {79}, - pages = {672--680}, - doi = {10.1016/j.atmosenv.2013.07.026}, - owner = {hoonhout}, - publisher = {Elsevier}, - timestamp = {2015.10.01} -} - -@article{Gallagher2011, - author = {Gallagher, Edith L and MacMahan, Jamie and Reniers, AJHM and Brown, - Jenna and Thornton, Edward B}, - title = {Grain size variability on a rip-channeled beach}, - journal = {Marine Geology}, - year = {2011}, - volume = {287}, - pages = {43--53}, - number = {1}, - doi = {10.1016/j.margeo.2011.06.010}, - owner = {hoonhout}, - publisher = {Elsevier}, - timestamp = {2015.10.06} -} - -@techreport{Genuchten1978, - author = {van Genuchten, M. Th.}, - title = {Mass transport in saturated-unsaturated media: one-dimensional solutions}, - institution = {Univ. Princeton}, - year = {1978}, - number = {Research Report No. 78-WR-11}, - address = {NJ}, - note = {Water Resources Program}, - owner = {hoonhout}, - timestamp = {2014.03.07} -} - -@article{VanGenuchten1980, -author = {van Genuchten, M. Th}, -doi = {10.2136/sssaj1980.03615995004400050002x}, -isbn = {0361599500440}, -issn = {03615995}, -journal = {Soil Science Society of America Journal}, -number = {5}, -pages = {892--898}, -title = {{Closed-Form Equation for Predicting the Hydraulic Conductivity of Unsaturated Soils.}}, -volume = {44}, -year = {1980} -} - -@article{Gillette1989, - author = {Gillette, Dale A and Stockton, Paul H}, - title = {The effect of nonerodible particles on wind erosion of erodible surfaces}, - journal = {Journal of Geophysical Research: Atmospheres}, - year = {1989}, - volume = {94}, - pages = {12885--12893}, - number = {D10}, - owner = {hoonhout}, - publisher = {Wiley Online Library}, - timestamp = {2015.10.01}, - url = {http://onlinelibrary.wiley.com/doi/10.1029/JD094iD10p12885/full} -} - -@article{Gillies2006, - author = {Gillies, J. A. and Nickling, W. G. and King, J.}, - title = {Aeolian sediment transport through large patches of roughness in - the atmospheric inertial sublayer}, - journal = {Journal of Geophysical Research: Earth Surface}, - year = {2006}, - volume = {111}, - number = {F2}, - note = {F02006}, - doi = {10.1029/2005JF000434}, - issn = {2156-2202}, - keywords = {Hydrology: Sediment transport, Hydrology: Geomorphology: general, - Atmospheric Processes: Boundary layer processes, Atmospheric Processes: - Land/atmosphere interactions}, - owner = {hoonhout}, - timestamp = {2015.06.15} -} - -@article{Greeley1985, - author = {Greeley, Ronald and Iversen, JD}, - title = {Wind as a geologic process}, - journal = {Cambridge Univ, Cambridge}, - year = {1985}, - owner = {hoonhout}, - timestamp = {2015.10.01} -} - -@inproceedings{Heijer2011, - author = {den Heijer, Cand Walstra, D J R and van Thiel de Vries, J S M and - Huisman, B J A and Hoonhout, B M and Diermanse, F L M and van Gelder, - P H A J M}, - title = {Importance of dune erosion influencing processes}, - booktitle = {Journal of Coastal Research}, - year = {2011}, - volume = {64}, - number = {1}, - pages = {283-287}, - address = {Poland}, - organization = {13th International Coastal Symposium}, - note = {Special Issue}, - owner = {hoonhout}, - timestamp = {2015.05.22} -} - -@article{Hesp2016, - author = {Hesp, P. A. and Smyth, T. A. G.}, - title = {Surfzone-Beach-Dune interactions: Flow and Sediment Transport across - the Intertidal Beach and Backshore}, - journal = {Journal of Coastal Research}, - year = {2016}, - volume = {SI 75}, - pages = {8--12}, - doi = {10.2112/SI75-002.1}, - owner = {hoonhout}, - timestamp = {2016.06.08} -} - -@article{Hill2004, - author = {Hill, Chris and DeLuca, Cecelia and Suarez, Max and Da Silva, Arlindo}, - title = {The architecture of the earth system modeling framework}, - journal = {Computing in Science \& Engineering}, - year = {2004}, - volume = {6}, - pages = {18--28}, - number = {1}, - doi = {10.1109/MCISE.2004.1255817}, - owner = {hoonhout}, - publisher = {AIP Publishing}, - timestamp = {2015.11.16} -} - -@article{Hoonhout2017a, - author = {Hoonhout, B. M.}, - title = {Aeolian Sediment Supply from the Intertidal Beach}, - journal = {Coastal Engineering}, - year = {2017}, - note = {Submitted}, - owner = {hoonhout}, - timestamp = {2016.05.27} -} - -@MISC{megapex, - author = {Hoonhout, B M}, - title = {MegaPEX measurement data}, - howpublished = {OpenDAP server}, - year = {2017}, - organization = {Delft University of Technology}, - owner = {hoonhout}, - timestamp = {2015.05.26} -} - -@MISC{aeolis_models_v2.0, - author = {Hoonhout, B M}, - title = {AeoLiS model setups v2.0}, - howpublished = {GIT repository}, - year = {2016}, - doi = {10.5281/zenodo.58837}, - owner = {hoonhout}, - timestamp = {2016.07.27} -} - -@MISC{aeolis_v1.1, - author = {Hoonhout, B M}, - title = {AeoLiS v1.1: A process-based model for simulating availability-limited - aeolian sediment transport}, - howpublished = {GIT repository}, - year = {2016}, - doi = {10.5281/zenodo.58854}, - owner = {hoonhout}, - timestamp = {2016.07.27} -} - -@MISC{aeolis_models_v1.0, - author = {Hoonhout, B M}, - title = {AeoLiS availability v1.0}, - howpublished = {GIT repository}, - year = {2015}, - doi = {10.5281/zenodo.28013}, - organization = {Delft University of Technology}, - owner = {hoonhout}, - timestamp = {2015.05.26} -} - -@MISC{aeolis_v1.0, - author = {Hoonhout, B M}, - title = {AeoLiS v1.0: A process-based model for simulating supply-limited - aeolian sediment transport}, - howpublished = {GIT repository}, - year = {2015}, - doi = {10.5281/zenodo.28012}, - organization = {Delft University of Technology}, - owner = {hoonhout}, - timestamp = {2015.05.26} -} - -@inproceedings{Hoonhout2013a, - author = {Hoonhout, B. M.}, - title = {Monitoring the Process of Aeolian Transport}, - booktitle = {Proceedings of the NCK-days 2013}, - year = {2013}, - owner = {hoonhout}, - timestamp = {2016.06.15} -} - -@article{Hoonhout2014, - author = {Hoonhout, B M and Baart, F and Van Thiel de Vries, J S M}, - title = {Intertidal beach classification in infrared images}, - journal = {Journal of Coastal Research}, - year = {2014}, - volume = {SI 66}, - pages = {657-662}, - address = {Durban, South Africa}, - booktitle = {Journal of Coastal Research}, - editor = {Green, A N and Cooper, J A G}, - organization = {13th International Coastal Symposium}, - owner = {hoonhout}, - timestamp = {2015.05.22} -} - -@inproceedings{Hoonhout2016a, - author = {Hoonhout, B. M. and Cohn, N. and de Vries, S. and Roelvink, J. A. - and Ruggiero, P. and Moore, L. J. and Dur\'{a}n, O. and Goldstein, - E.}, - title = {How Tides and Waves Enhance Aeolian Sediment Transport at The Sand - Motor}, - booktitle = {Proceedings of the 35th International Conference on Coastal Engineering}, - year = {2016}, - owner = {hoonhout}, - timestamp = {2016.06.15} -} - -@inproceedings{Hoonhout2016c, - author = {Hoonhout, B. M. and Cohn, N. and de Vries, S. and Roelvink, J. A. - and Ruggiero, P. and Moore, L. J. and Dur\'{a}n, O. and Goldstein, - E.}, - title = {How Tides and Waves Enhance Aeolian Sediment Transport at The Sand - Motor}, - booktitle = {Proceedings of the Ocean Sciences Meeting 2016}, - year = {2016}, - owner = {hoonhout}, - timestamp = {2016.06.15} -} - -@inproceedings{Hoonhout2010, - author = {Hoonhout, B M and den Heijer, C}, - title = {Reliability of dune erosion assessment along curved coastlines}, - booktitle = {Proceedings of the 32nd International Conference on Coastal Engineering}, - year = {2010}, - address = {Shanghai, China}, - owner = {hoonhout}, - timestamp = {2015.05.22} -} - -@MISC{argusnl, - author = {Hoonhout, B M and Radermacher, M.}, - title = {Annotated images of the dutch coast}, - howpublished = {FTP server}, - year = {2015}, - doi = {10.4121/uuid:08400507-4731-4cb2-a7ec-9ed2937db119}, - organization = {Delft University of Technology}, - owner = {hoonhout}, - timestamp = {2015.05.26} -} - -@MISC{flamingo, - author = {Hoonhout, B M and Radermacher, M.}, - title = {Flamingo: a coastal image analysis toolbox}, - howpublished = {GIT repository}, - year = {2015}, - doi = {10.5281/zenodo.14596}, - organization = {Delft University of Technology}, - owner = {hoonhout}, - timestamp = {2015.05.26} -} - -@article{Hoonhout2015a, - author = {Hoonhout, B. M. and Radermacher, M. and Baart, F. and Van der Maaten, - L. J. P.}, - title = {An Automated Method for Semantic Classification of Regions in Coastal - Images}, - journal = {Coastal Engineering}, - year = {2015}, - volume = {105}, - pages = {1--12}, - doi = {10.1016/j.coastaleng.2015.07.010}, - file = {:Hoonhout2015.pdf:PDF}, - owner = {hoonhout}, - timestamp = {2015.08.14} -} - -@inproceedings{Hoonhout2012, - author = {Hoonhout, B M and van Thiel de Vries, J S M}, - title = {Modeling dune erosion, overwash and inundation of barrier islands}, - booktitle = {Proceedings of the 33rd International Conference on Coastal Engineering}, - year = {2012}, - address = {Santander, Spain}, - owner = {hoonhout}, - timestamp = {2015.05.22} -} - -@inproceedings{Hoonhout2014b, - author = {Hoonhout, B. M. and van Thiel de Vries, J. S. M. and Curto, V. and - Stive, M. J. F.}, - title = {Monitoring Supply Limiting Conditions using Imageing Techniques}, - booktitle = {Proceedings of the 34th International Conference on Coastal Engineering}, - year = {2014}, - owner = {hoonhout}, - timestamp = {2016.06.15} -} - -@article{Hoonhout2017b, - author = {Hoonhout, B. M. and de Vries, S.}, - title = {Spatial Variations in Aeolian Sediment Availability}, - journal = {Aeolian Research}, - year = {2017}, - note = {Submitted}, - owner = {hoonhout}, - timestamp = {2016.05.27} -} - -@article{Hoonhout2016, - author = {Hoonhout, B. M. and de Vries, S.}, - title = {A Process-based Model for Aeolian Sediment Transport and Spatiotemporal - Varying Supply}, - journal = {Journal of Geophysical Research -- Earth Surface}, - year = {2016}, - note = {Submitted}, - doi = {10.1002/}, - owner = {hoonhout}, - timestamp = {2015.09.25} -} - -@inproceedings{Hoonhout2016b, - author = {Hoonhout, B. M. and de Vries, S.}, - title = {AeoLiS: A New Model for Aeolian Sediment Supply and Transport}, - booktitle = {Proceedings of the NCK-days 2016}, - year = {2016}, - owner = {hoonhout}, - timestamp = {2016.06.15} -} - -@inproceedings{Hoonhout2014a, - author = {Hoonhout, B. M. and de Vries, S.}, - title = {Process-based Modeling of Supply-Limited Aeolian Transport in Coastal - Environments}, - booktitle = {Proceedings of the International Conference on Aeolian Research 2014}, - year = {2014}, - owner = {hoonhout}, - timestamp = {2016.06.15} -} - -@inproceedings{Hoonhout2014c, - author = {Hoonhout, B. M. and de Vries, S.}, - title = {Modelling and Monitoring of Meso-Scale Supply-limited Aeolian Transport}, - booktitle = {Proceedings of the NCK-days 2014}, - year = {2014}, - owner = {hoonhout}, - timestamp = {2016.06.15} -} - -@inproceedings{Hoonhout2013, - author = {Hoonhout, B M and de Vries, S and Baart, F and van Thiel de Vries, - J S M and van der Weerd, L and Wijnberg, K M}, - title = {Monitoring of beach surface properties with remote sensing}, - booktitle = {Proceedings of Coastal Dynamics}, - year = {2013}, - address = {Arcachon, France}, - owner = {hoonhout}, - timestamp = {2015.05.22} -} - -@inproceedings{Hoonhout2015, - author = {Hoonhout, B M and de Vries, S and Cohn, N}, - title = {The influence of spatially varying supply on coastal aeolian transport: - a field experiment}, - booktitle = {Proceedings of Coastal Sediments}, - year = {2015}, - address = {San Diego, USA}, - owner = {hoonhout}, - timestamp = {2015.05.22} -} - -@inproceedings{Hoonhout2015b, - author = {Hoonhout, B. M. and de Vries, S. and Cohn, N.}, - title = {The Influence of Spatially Varying Supply on Coastal Aeolian Transport: - A Field Experiment}, - booktitle = {Proceedings of the NCK-days 2015}, - year = {2015}, - owner = {hoonhout}, - timestamp = {2016.06.15} -} - -@article{Horikawa1983, - author = {Horikawa, Kiyoshi and Hotta, Shintaro and Kubota, Susumu and Katori, - Sadakazu}, - title = {On the sand transport rate by wind on a beach}, - journal = {Coastal Engineering in Japan}, - year = {1983}, - volume = {26}, - pages = {101--120}, - owner = {hoonhout}, - timestamp = {2016.06.28} -} - -@inproceedings{Hotta1984, - author = {Hotta, S and Kubota, S and Katori, S and Horikawa, K}, - title = {Sand transport by wind on a wet sand beach}, - booktitle = {Proceedings of the 19th Conference on Coastal Engineering}, - year = {1984}, - pages = {1264-1281}, - organization = {ASCE}, - owner = {hoonhout}, - timestamp = {2014.06.11} -} - -@article{Houser2009, - author = {Houser, C}, - title = {Synchronization of transport and supply in beach-dune interaction}, - journal = {Progress in Physical Geography}, - year = {2009}, - volume = {33}, - pages = {733--746}, - number = {6}, - doi = {10.1177/0309133309350120}, - owner = {hoonhout}, - timestamp = {2015.05.24} -} - -@article{Houser2015, - author = {Houser, C. and Wernette, P. and Rentschlar, E. and Jones, H. and - Hammond, B. and Trimble, S.}, - title = {Post-storm beach and dune recovery: Implications for barrier island - resilience}, - journal = {Geomorphology}, - year = {2015}, - volume = {234}, - pages = {54--63}, - doi = {10.1016/j.geomorph.2014.12.044}, - owner = {hoonhout}, - timestamp = {2015.05.27} -} - -@article{Howard1977, - author = {Howard, A D}, - title = {Effect of slope on the threshold of motion and its application to - orientation of wind ripples}, - journal = {Geological Society of America Bulletin}, - year = {1977}, - volume = {88}, - pages = {853--856}, - number = {6}, - doi = {10.1130/0016-7606(1977)88<853:EOSOTT>2.0.CO;2}, - owner = {hoonhout}, - timestamp = {2014.06.11} -} - -@article{Hsu1971, - author = {Hsu, Shih-Ang}, - title = {Wind stress criteria in eolian sand transport}, - journal = {Journal of Geophysical Research}, - year = {1971}, - volume = {76}, - pages = {8684--8686}, - number = {36}, - owner = {hoonhout}, - publisher = {Wiley Online Library}, - timestamp = {2015.10.01} -} - -@article{Hugenholtz2011, - author = {Hugenholtz, C. H. and Barchyn, T. E.}, - title = {Laboratory and field performance of a laser particle counter for - measuring aeolian sand transport}, - journal = {Journal of Geophysical Research}, - year = {2011}, - volume = {116}, - number = {F1}, - note = {F01010}, - doi = {10.1029/2010JF001822}, - issn = {2156-2202}, - keywords = {Instruments and techniques, aeolian sediment transport, laser sensor, - performance}, - owner = {hoonhout}, - timestamp = {2015.06.15} -} - -@unpublished{ImaresSamples, - author = {Imares}, - title = {Yearly sediment samples in the {S}and {M}otor domain}, - year = {2010 -- 2015}, - note = {Unpublished}, - owner = {hoonhout}, - timestamp = {2016.05.25}, - url = {https://zandmotordata.nl/thredds/catalog/opendap/morphology/sediment\_composition/} -} - -@article{Iversen2006, - author = {Iversen, J D and Rasmussen, K R}, - title = {The effect of surface slope on saltation threshold}, - journal = {Sedimentology}, - year = {2006}, - volume = {41}, - pages = {721--728}, - number = {4}, - doi = {10.1111/j.1365-3091.1994.tb01419.x}, - owner = {hoonhout}, - timestamp = {2015.05.24} -} - -@article{Jackson1999, - author = {Jackson, D W T and Cooper, J A G}, - title = {Beach fetch distance and aeolian sediment transport}, - journal = {Sedimentology}, - year = {1999}, - volume = {46}, - pages = {517--522}, - doi = {10.1046/j.1365-3091.1999.00228.x}, - owner = {hoonhout}, - timestamp = {2015.05.24} -} - -@techreport{Johnson1965, - author = {Johnson, J W}, - title = {Sand movement on coastal dunes}, - institution = {U.S. Department of Agriculture}, - year = {1965}, - number = {570, Symp. 3, Paper no. 75}, - note = {pp 747-755}, - owner = {hoonhout}, - timestamp = {2014.06.11} -} - -@inproceedings{Kang1994, -author = {Kang, H.Y. and Nielsen, P. and Hanslow, D.J}, -booktitle = {Coastal Engineering 1994}, -keywords = {pter 153,watertable overheight due to,wave runup}, -pages = {2115--2124}, -title = {{Watertable overheight due to wave runup on a sandy beach}}, -year = {1994} -} - -@techreport{Kawamura1951, - author = {Kawamura, R}, - title = {Study of sand movement by wind}, - institution = {Hydraulics Engineering Laboratory, Univeristy of California}, - year = {1951}, - number = {HEL-2-8}, - address = {Berkeley}, - owner = {hoonhout}, - timestamp = {2015.05.26} -} - -@article{King1951, - author = {King, C. A. M.}, - title = {Depth of disturbance of sand on sea beaches by waves}, - journal = {Journal of Sedimentary Petrology}, - year = {1951}, - volume = {21}, - pages = {131--140}, - number = {3}, - owner = {hoonhout}, - timestamp = {2015.08.06}, - url = {http://archives.datapages.com/data/sepm/journals/v01-32/data/021/021003/pdfs/0131.pdf} -} - -@article{King2005, - author = {King, J. and Nickling, W. G. and Gillies, J. A.}, - title = {Representation of vegetation and other nonerodible elements in aeolian - shear stress partitioning models for predicting transport threshold}, - journal = {Journal of Geophysical Research}, - year = {2005}, - volume = {110}, - number = {F4}, - note = {F04015}, - doi = {10.1029/2004JF000281}, - issn = {2156-2202}, - keywords = {Boundary layer processes, Land/atmosphere interactions, shear stress - partitioning models, wind erosion, dust emissions}, - owner = {hoonhout}, - timestamp = {2015.06.15} -} - -@misc{KNMI2013, - author = {KNMI}, - year = {2014}, - title = {Uurgegevens van het weer in {N}ederland - {H}oek van {H}olland (330)}, - howpublished = {ASCII}, - organization = {Royal Netherlands Meteorological Insititute}, - address = {de Bilt}, - note = {http://www.knmi.nl/klimatologie/uurgegevens/datafiles/330/ uurgeg\_330\_2011-2020.zip}, - url = {http://www.knmi.nl/klimatologie/uurgegevens/datafiles/330/ uurgeg\_330\_2011-2020.zip}, - owner = {hoonhout}, - timestamp = {2015.05.26} -} - -@article{Kocurek1999, - author = {Kocurek, Gary and Lancaster, Nicholas}, - title = {Aeolian system sediment state: theory and Mojave Desert Kelso dune - field example}, - journal = {Sedimentology}, - year = {1999}, - volume = {46}, - pages = {505--515}, - number = {3}, - doi = {10.1046/j.1365-3091.1999.00227.x}, - owner = {hoonhout}, - publisher = {Wiley Online Library}, - timestamp = {2015.10.02} -} - -@article{Kroon1990, - author = {Kroon, A. and Hoekstra, P.}, - title = {Eolian Sediment Transport on a Natural Beach}, - journal = {Journal of Coastal Research}, - year = {1990}, - volume = {6}, - pages = {367--379}, - number = {2}, - note = {ISSN 0749-0208}, - file = {Kroon1990.pdf:Kroon1990.pdf:PDF}, - owner = {hoonhout}, - timestamp = {2015.06.15} -} - -@article{kroy2002, - author = {Kroy, Klaus and Sauermann, Gerd and Herrmann, Hans J}, - title = {Minimal model for sand dunes}, - journal = {Physical Review Letters}, - year = {2002}, - volume = {88}, - pages = {054301}, - number = {5}, - doi = {10.1103/PhysRevLett.88.054301}, - owner = {hoonhout}, - publisher = {APS}, - timestamp = {2016.07.21} -} - -@article{Lancaster1998, - author = {Lancaster, Nicholas and Baas, Andy}, - title = {Influence of vegetation cover on sand transport by wind: field studies at Owens Lake, California}, - journal = {Earth Surface Processes and Landforms}, - year = {1998}, - volume = {23}, - pages = {69--82}, - number = {1}, + pages = {61--70}, + doi = {10.1016/j.aeolia.2010.04.001}, owner = {hoonhout}, - timestamp = {2016.04.29} + timestamp = {2015.05.24} } -@article{Lettau1978, - author = {Lettau, K and Lettau, H}, - title = {Experimental and micrometeorological field studies of dune migration.}, - year = {1978}, - owner = {hoonhout}, - publisher = {Madison}, - journal = {}, - timestamp = {2015.10.01} + +@article{VanGenuchten1980, +author = {van Genuchten, M. Th}, +doi = {10.2136/sssaj1980.03615995004400050002x}, +isbn = {0361599500440}, +issn = {03615995}, +journal = {Soil Science Society of America Journal}, +number = {5}, +pages = {892--898}, +title = {{Closed-Form Equation for Predicting the Hydraulic Conductivity of Unsaturated Soils.}}, +volume = {44}, +year = {1980} } -@article{Li2013, - author = {Li, J. and Okin, G. S. and Herrick, J. E. and Belnap, J. and Miller, M. E. and Vest, K. and Draut, A. E.}, - title = {Evaluation of a new model of aeolian transport in the presence of - vegetation}, - journal = {Journal of Geophysical Research}, - year = {2013}, - volume = {118}, - pages = {288--306}, - number = {1}, - doi = {10.1002/jgrf.20040}, - issn = {2169-9011}, - keywords = {Geomorphology and weathering, Earth system modeling, Erosion, Estimation - and forecasting, Geomorphology: general, arid and semiarid, model - evaluation, aeolian transport, cross-validation, shear stress partitioning}, - owner = {hoonhout}, - timestamp = {2015.06.15}, - url = {http://dx.doi.org/10.1002/jgrf.20040} +@article{Hoonhout2016, +author = {Hoonhout, Bas M. and Vries, Sierd de}, +title = {A process-based model for aeolian sediment transport and spatiotemporal varying sediment availability}, +journal = {Journal of Geophysical Research: Earth Surface}, +volume = {121}, +number = {8}, +pages = {1555-1575}, +keywords = {aeolian, sediment transport, sediment supply, sediment sorting, beach armoring, modeling}, +doi = {https://doi.org/10.1002/2015JF003692}, +year = {2016} } -@article{lynch2016, - author = {Lynch, Kevin and Jackson, Derek WT and Cooper, J Andrew G}, - title = {The fetch effect on aeolian sediment transport on a sandy beach: - a case study from Magilligan Strand, Northern Ireland}, - journal = {Earth Surface Processes and Landforms}, - year = {2016}, - doi = {10.1002/esp.3930}, - owner = {hoonhout}, - publisher = {Wiley Online Library}, - timestamp = {2016.05.03} +@inproceedings{Kang1994, +author = {Kang, H.Y. and Nielsen, P. and Hanslow, D.J}, +booktitle = {Coastal Engineering 1994}, +keywords = {pter 153,watertable overheight due to,wave runup}, +pages = {2115--2124}, +title = {{Watertable overheight due to wave runup on a sandy beach}}, +year = {1994} } -@article{Lynch2008, - author = {Lynch, K and Jackson, D W T and Cooper, J A G}, - title = {Aeolian fetch distance and secondary airflow effects: the influence - of micro-scale variables on meso-scale foredune development}, - journal = {Earth Surface Processes and Landforms}, - year = {2008}, - volume = {33}, - pages = {991--1005}, - number = {7}, - doi = {10.1002/esp.1582}, +@article{King1951, + author = {King, C. A. M.}, + title = {Depth of disturbance of sand on sea beaches by waves}, + journal = {Journal of Sedimentary Petrology}, + year = {1951}, + volume = {21}, + pages = {131--140}, + number = {3}, owner = {hoonhout}, - timestamp = {2015.05.26} + timestamp = {2015.08.06}, + url = {http://archives.datapages.com/data/sepm/journals/v01-32/data/021/021003/pdfs/0131.pdf} } @article{Masselink2007, @@ -1271,84 +246,10 @@ @article{Masselink2007 volume = {54}, pages = {39--53}, doi = {10.1111/j.1365-3091.2006.00825.x}, - dor = {10.1111/j.1365-3091.2006.00825.x}, - owner = {hoonhout}, - timestamp = {2015.05.26} -} - -@inproceedings{McCall2011, - author = {McCall, R T and van Geer, P F C and Hoonhout, B M}, - title = {Physical modeling of storm-induced erosion and overwash}, - booktitle = {Proceedings 7th Coastal Sediments Conference}, - year = {2011}, - address = {Miami, Florida, USA}, - owner = {hoonhout}, - timestamp = {2015.05.22} -} - -@article{McKennaNeuman2012, - author = {McKenna Neuman, C. and Li, B. and Nash, D.}, - title = {Micro-topographic analysis of shell pavements formed by aeolian transport - in a wind tunnel simulation}, - journal = {Journal of Geophysical Research}, - year = {2012}, - volume = {117}, - number = {F4}, - note = {F04003}, - doi = {10.1029/2012JF002381}, - issn = {2156-2202}, - keywords = {Erosion, Hydrology: Geographic Information Systems (GIS), Geomechanics, - Geomorphology: general, armoring, beach, shear stress, shells, wind - erosion, wind tunnel}, - owner = {hoonhout}, - timestamp = {2015.06.15} -} - -@article{McKennaNeuman1995, - author = {McKenna Neuman, Cheryl and Nickling, WG}, - title = {Aeolian sediment flux decay: Non-linear behaviour on developing deflation - lag surfaces}, - journal = {Earth Surface Processes and Landforms}, - year = {1995}, - volume = {20}, - pages = {423--435}, - number = {5}, - owner = {hoonhout}, - publisher = {Wiley Online Library}, - timestamp = {2015.10.01}, - url = {http://onlinelibrary.wiley.com/doi/10.1002/esp.3290200504/abstract} -} - -@article{McKennaNeuman1989, - author = {McKenna Neuman, C. and Nickling, W. G.}, - title = {A theoretical and wind tunnel investigation of the effect of capillary - water on the entrainment of sediment by wind}, - journal = {Canadian Journal of Soil Science}, - year = {1989}, - volume = {69}, - pages = {79--96}, owner = {hoonhout}, timestamp = {2015.05.26} } -@article{McKennaNeuman2008, - author = {McKenna Neuman, C. and Sanderson, S.}, - title = {Humidity control of particle emissions in aeolian systems}, - journal = {Journal of Geophysical Research}, - year = {2008}, - volume = {113}, - number = {F2}, - note = {F02S14}, - doi = {10.1029/2007JF000780}, - issn = {2156-2202}, - keywords = {Global Change: Land/atmosphere interactions, Global Change: Earth - system modeling, Global Change: Instruments and techniques, Global - Change: Atmosphere, humidity, adhesion, wind erosion, transport threshold, - wind tunnel}, - owner = {hoonhout}, - timestamp = {2015.06.15} -} - @article{Mualem1974, author = {Mualem, Y}, journal = {Water Resources Research}, @@ -1359,34 +260,6 @@ @article{Mualem1974 year = {1974} } -@article{Namikas2010, - author = {Namikas, S L and Edwards, B L and Bitton, M C A and Booth, J L and - Zhu, Y}, - title = {Temporal and spatial variabilities in the surface moisture content - of a fine-grained beach}, - journal = {Geomorphology}, - year = {2010}, - volume = {114}, - pages = {303--310}, - doi = {10.1016/j.geomorph.2009.07.011}, - owner = {hoonhout}, - timestamp = {2015.05.26} -} - -@article{Nickling1995, - author = {Nickling, WG and McKenna Neuman, C.}, - title = {Development of deflation lag surfaces}, - journal = {Sedimentology}, - year = {1995}, - volume = {42}, - pages = {403--414}, - number = {3}, - owner = {hoonhout}, - publisher = {Wiley Online Library}, - timestamp = {2015.10.01}, - url = {http://onlinelibrary.wiley.com/store/10.1111/j.1365-3091.1995.tb00381.x/asset/j.1365-3091.1995.tb00381.x.pdf?v=1&t=if84x8ic&s=48d0b8adf74d856b7d050fc83e67448c24808e05} -} - @article{Nickling1981, author = {Nickling, W G and Ecclestone, M}, title = {The effects of soluble salts on the threshold shear velocity of fine @@ -1428,47 +301,6 @@ @book{Nielsen2009 year = {2009} } -@article{Okin2008, - author = {Okin, G S}, - title = {A new model of wind erosion in the presence of vegetation}, - journal = {Journal of Geophysical Research}, - year = {2008}, - volume = {113}, - number = {F2}, - note = {F02S10}, - doi = {10.1029/2007JF000758}, - owner = {hoonhout}, - timestamp = {2015.05.26} -} - -@article{Owen1964, - author = {Owen, P R}, - title = {Saltation of uniform grains in air}, - journal = {J. Fluid Mech}, - year = {1964}, - volume = {20}, - pages = {225--242}, - number = {2}, - owner = {hoonhout}, - publisher = {Cambridge Univ Press}, - timestamp = {2015.10.01} -} - -@article{Parteli2009, - author = {Parteli, E. J. R. and Dur\'{a}n, O. and Tsoar, H. and Schw\"{a}mmle, - V. and Hermann, H. J.}, - title = {Dune formation under bimodal winds}, - journal = {Proceedings of the National Academy of Sciences of the United States - of America}, - year = {2009}, - volume = {106}, - pages = {22085--22089}, - number = {52}, - doi = {10.1073/pnas.0808646106}, - owner = {hoonhout}, - timestamp = {2015.05.27} -} - @article{Peckham2013, author = {Peckham, S. D. and Hutton, E. W. H. and Norris, B.}, title = {A component-based approach to integrated modeling in the geosciences: @@ -1482,16 +314,6 @@ @article{Peckham2013 timestamp = {2015.05.26} } -@techreport{dePree2009, - author = {de Pree, E}, - title = {Field measurements of grain size distributions - {V}lugtenburg}, - institution = {Delft University of Technology}, - year = {2009}, - file = {:Verslag_21novemberdeel2.docx:Word 2007+;:Verslag_21novemberdeel1.docx:Word 2007+}, - owner = {hoonhout}, - timestamp = {2015.05.26} -} - @book{Pye1990, title = {Aeolian Sand and Sand Dunes}, publisher = {Unwin Hyman}, @@ -1530,157 +352,6 @@ @article{Raupach1993 timestamp = {2015.10.01} } -@article{Raupach1992, - author = {Raupach, M R}, - title = {Drag and drag partition on rough surfaces}, - journal = {Boundary-Layer Meteorology}, - year = {1992}, - volume = {60}, - pages = {375--395}, - number = {4}, - owner = {hoonhout}, - publisher = {Springer}, - timestamp = {2015.10.01}, - url = {http://link.springer.com/article/10.1007/BF00155203} -} - -@article{Reniers2013, - author = {Reniers, AJHM and Gallagher, EL and MacMahan, JH and Brown, JA and - Rooijen, AA and Thiel de Vries, JSM and Prooijen, BC}, - title = {Observations and modeling of steep-beach grain-size variability}, - journal = {Journal of Geophysical Research: Oceans}, - year = {2013}, - volume = {118}, - pages = {577--591}, - number = {2}, - owner = {hoonhout}, - publisher = {Wiley Online Library}, - timestamp = {2016.04.29} -} - -@misc{Waterbase2013, - author = {Rijkswaterstaat}, - year = {2013}, - title = {http://live.waterbase.nl}, - howpublished = {website}, - organization = {Directorate-General for Public Works and Water Management}, - url = {http://live.waterbase.nl}, - owner = {hoonhout}, - timestamp = {2015.07.06} -} - -@article{Roelvink2009, - author = {Roelvink, J. A. and Reniers, A. and van Dongeren, A. P. and van Thiel - de Vries, J. S. M. and McCall, R. T. and Lescinski, J.}, - title = {Modelling storm impacts on beaches, dunes and barrier islands}, - journal = {Coastal Engineering}, - year = {2009}, - volume = {56}, - pages = {1133--1152}, - number = {11}, - doi = {10.1016/j.coastaleng.2009.08.006}, - owner = {hoonhout}, - timestamp = {2015.05.26} -} - -@inproceedings{Roelvink2012, - author = {Roelvink, J A and Stelling, G and Hoonhout, B M and Risandi, J and - Jacobs, W and Merli, D}, - title = {Development and field validation of a 2DH curvilinear storm impact - model}, - booktitle = {Proceedings of 33nd International Conference on Coastal Engineering}, - year = {2012}, - address = {Santander, Spain}, - owner = {hoonhout}, - timestamp = {2015.05.22} -} - -@article{Sorensen2004, - author = {S{\o}rensen, Michael}, - title = {On the rate of aeolian sand transport}, - journal = {Geomorphology}, - year = {2004}, - volume = {59}, - pages = {53--62}, - number = {1}, - owner = {hoonhout}, - publisher = {Elsevier}, - timestamp = {2015.10.01} -} - -@article{Scheidt2010, - author = {Scheidt, S. and Ramsey, M. and Lancaster, N.}, - title = {Determining soil moisture and sediment availability at White Sands - Dune Field, New Mexico, from apparent thermal inertia data}, - journal = {Journal of Geophysical Research}, - year = {2010}, - volume = {115}, - number = {F2}, - note = {F02019}, - doi = {10.1029/2009JF001378}, - issn = {2156-2202}, - keywords = {Geomorphology and weathering, Remote sensing, Sediment transport, - Soil moisture, Erosion and weathering, apparent thermal inertia, - soil moisture, sediment availability}, - owner = {hoonhout}, - timestamp = {2015.06.15} -} - -@article{deSchipper2016, - author = {de Schipper, Matthieu A and de Vries, Sierd and Ruessink, Gerben - and de Zeeuw, Roeland C and Rutten, Jantien and van Gelder-Maas, - Carola and Stive, Marcel JF}, - title = {Initial spreading of a mega feeder nourishment: Observations of the - Sand Engine pilot project}, - journal = {Coastal Engineering}, - year = {2016}, - volume = {111}, - pages = {23--38}, - doi = {10.1016/j.coastaleng.2015.10.011}, - owner = {hoonhout}, - publisher = {Elsevier}, - timestamp = {2016.02.24} -} - -@inproceedings{deSchipper2012, - author = {M.A. de {Schipper} and S. de {Vries} and R. {Ranasinghe} and A.J.H.M. - {Reniers} and M.J.F. {Stive}}, - title = {Morphological developments after a beach and shoreface nourishment - at Vlugtenburg beach}, - booktitle = {NCK-days 2012 : Crossing borders in coastal research}, - year = {2012}, - pages = {115--118}, - abstract = {Typically a beach is out of equilibrium after a nourishment is installed. - To observe how a nourished beach behaves on the timescale of storms - a monitoring campaign was set up at Vlugtenburg beach after a nourishment - in the spring of 2009. Here we show a sediment budget analysis of - the first 2.5 years for a coastal domain spanning 1750 m alongshore - from -9 to +5 m NAP. To investigate the redistribution of nourished - sand different sections of the profile are examined. Observations - show that the initial response (first 6 to 12 months after construction) - is large where the sediment eroded from the beach is transported - offshore to form a subtidal bar. In the following period (until present) - the losses in the domain are on the order of 40 m3 per m alongshore - per year. These losses are concentrated in the profile around the - waterline.}, - doi = {10.3990/2.180}, - owner = {hoonhout}, - timestamp = {2015.08.05} -} - -@article{Schlichting1936, - author = {Schlichting, Hermann}, - title = {Experimentelle untersuchungen zum rauhigkeitsproblem}, - journal = {Archive of Applied Mechanics}, - year = {1936}, - volume = {7}, - pages = {1--34}, - number = {1}, - owner = {hoonhout}, - publisher = {Springer}, - timestamp = {2015.10.01}, -} - @PHDTHESIS{Schmutz2014, author = {Schmutz, Phillip P}, title = {Investigation of Factors Controlling the Dynamics of Beach Surface Moisture}, @@ -1688,51 +359,6 @@ @PHDTHESIS{Schmutz2014 year = {2014} } - -@article{Sherman1998, - author = {Sherman, Douglas J and Jackson, Derek WT and Namikas, Steven L and - Wang, Jinkang}, - title = {Wind-blown sand on beaches: an evaluation of models}, - journal = {Geomorphology}, - year = {1998}, - volume = {22}, - pages = {113--133}, - number = {2}, - doi = {10.1016/S0169-555X(97)00062-7}, - owner = {hoonhout}, - publisher = {Elsevier}, - timestamp = {2015.10.01} -} - -@article{Sherman2012, - author = {Sherman, Douglas J and Li, Bailiang}, - title = {Predicting aeolian sand transport rates: a reevaluation of models}, - journal = {Aeolian Research}, - year = {2012}, - volume = {3}, - pages = {371--378}, - number = {4}, - doi = {10.1016/j.aeolia.2011.06.002}, - owner = {hoonhout}, - publisher = {Elsevier}, - timestamp = {2015.10.01} -} - -@article{Sherman2013, - author = {Sherman, Douglas J and Li, Bailiang and Ellis, Jean T and Farrell, - Eugene J and Maia, Luis Parente and Granja, Helena}, - title = {Recalibrating aeolian sand transport models}, - journal = {Earth Surface Processes and Landforms}, - year = {2013}, - volume = {38}, - pages = {169--178}, - number = {2}, - doi = {10.1002/esp.3310}, - owner = {hoonhout}, - publisher = {Wiley Online Library}, - timestamp = {2015.10.01} -} - @INCOLLECTION{Shuttleworth1993, author = {Shuttleworth, W J}, title = {Evaporation}, @@ -1746,48 +372,6 @@ @INCOLLECTION{Shuttleworth1993 timestamp = {2015.10.07} } -@article{Spearman1904, - author = {Spearman, C}, - title = {The proof and measurement of association between two things}, - journal = {American Journal of Psychology}, - year = {1904}, - volume = {15}, - pages = {72--101}, - doi = {10.2307/1412159}, - owner = {hoonhout}, - timestamp = {2016.06.21} -} - -@article{Stive2013, - author = {Stive, M J F and de Schipper, M A and Luijendijk, A P and Aarninkhof, - S G J and van Gelder-Maas, C and van Thiel de Vries, J S M and de - Vries, S and Henriquez, M and Marx, S and Ranasinghe, R}, - title = {A new alternative to saving our beaches from sea-level rise: the - {S}and {E}ngine}, - journal = {Journal of Coastal Research}, - year = {2013}, - volume = {29}, - pages = {1001--1008}, - number = {5}, - doi = {10.2112/JCOASTRES-D-13-00070.1}, - owner = {hoonhout}, - timestamp = {2015.05.22} -} - -@article{Stout2004, - author = {Stout, John E}, - title = {A method for establishing the critical threshold for aeolian transport - in the field}, - journal = {Earth Surface Processes and Landforms}, - year = {2004}, - volume = {29}, - pages = {1195--1207}, - number = {10}, - owner = {hoonhout}, - publisher = {Wiley Online Library}, - timestamp = {2016.04.29} -} - @article{Stockdon2006, author = {Hilary F. Stockdon and Rob A. Holman and Peter A. Howd and Asbury H. Sallenger}, title = {Empirical parameterization of setup, swash, and runup}, @@ -1801,134 +385,6 @@ @article{Stockdon2006 url = {https://www.sciencedirect.com/science/article/pii/S0378383906000044}, } -@article{Tan2013, - author = {Tan, Lihai and Zhang, Weimin and Qu, Jianjun and Zhang, Kecun and - An, Zhishan and Wang, Xiao}, - title = {Aeolian sand transport over gobi with different gravel coverages - under limited sand supply: a mobile wind tunnel investigation}, - journal = {Aeolian Research}, - year = {2013}, - volume = {11}, - pages = {67--74}, - doi = {10.1016/j.aeolia.2013.10.003}, - owner = {hoonhout}, - publisher = {Elsevier}, - timestamp = {2015.10.01} -} - -@article{Turpin2010, - author = {Turpin, C and Badr, T and Harion, J L}, - title = {Numerical modelling of aeolian erosion over rough surfaces}, - journal = {Earth Surface Processes and Landforms}, - year = {2010}, - volume = {35}, - pages = {1418--1429}, - number = {12}, - doi = {10.1002/esp.1980}, - owner = {hoonhout}, - publisher = {Wiley Online Library}, - timestamp = {2015.10.01} -} - -@article{Udo2008, - author = {Udo, K. and Kuriyama, Y. and Jackson, D. W. T.}, - title = {Observations of wind-blown sand under various meteorological conditions - at a beach}, - journal = {Journal of Geophysical Research}, - year = {2008}, - volume = {113}, - number = {F4}, - note = {F04008}, - doi = {10.1029/2007JF000936}, - owner = {hoonhout}, - timestamp = {2015.06.15} -} - -@PHDTHESIS{deVries2012, - author = {de Vries, S}, - title = {Physics of Blown Sand and Coastal Dunes}, - school = {Delft University of Technology}, - year = {2012}, - doi = {10.4233/uuid:9a701423-8559-4a44-be5d-370d292b0df3}, - owner = {hoonhout}, - timestamp = {2015.05.24} -} - -@article{deVries2014b, - author = {de Vries, S and Arens, S M and de Schipper, M A and Ranasinghe, R}, - title = {Aeolian sediment transport on a beach with a varying sediment supply}, - journal = {Aeolian Research}, - year = {2014}, - volume = {15}, - pages = {235--244}, - doi = {10.1016/j.aeolia.2014.08.001}, - owner = {hoonhout}, - timestamp = {2015.05.24} -} - -@inproceedings{deVries2011, - author = {de Vries, S and Arens, S M and Stive, M J F and Ranasinghe, R}, - title = {Dune growth trends and the effect of beach width on annual timescales}, - booktitle = {Proceedings 7th Coastal Sediments Conference}, - year = {2011}, - address = {Miami, Florida, USA}, - owner = {hoonhout}, - timestamp = {2015.05.24} -} - -@inproceedings{deVries2015, - author = {de Vries, S. and Radermacher, M. and de Schipper, M.A. and Stive, - M.J.F.}, - title = {Tidal Dynamics in the Sand Motor Lagoon}, - booktitle = {E-proceedings of the 36th IAHR World Congress}, - year = {2015}, - owner = {hoonhout}, - timestamp = {2016.05.26}, - url = {http://repository.tudelft.nl/islandora/object/uuid:e49d8911-72c2-4f6c-a8b4-7009954134c0/?collection=research} -} - -@inproceedings{deVries2010, - author = {de Vries, S and de Schipper, M A and Stive, M J F and Ranasinghe, - R}, - title = {Sediment exchange between the sub-aqueous and sub-aerial coastal - zones}, - booktitle = {Proceedings of 32nd International Conference on Coastal Engineering}, - year = {2010}, - owner = {hoonhout}, - timestamp = {2015.05.22} -} - -@article{deVries2012a, - author = {de Vries, S and Southgate, H N and Kanning, W and Ranasinghe, R}, - title = {Dune behavior and aeolian transport on decadal timescales}, - journal = {Coastal Engineering}, - year = {2012}, - volume = {67}, - pages = {41--53}, - doi = {10.1016/j.coastaleng.2012.04.002}, - owner = {hoonhout}, - timestamp = {2015.05.22} -} - -@inproceedings{deVries2012b, - author = {de Vries, S and Southgate, H N and Kanning, W and Ranasinghe, R}, - title = {Dune development and aeolian transport along the Holland coast}, - booktitle = {Jubilee Conference Proceedings, NCK-Days 2012}, - year = {2012}, - owner = {hoonhout}, - timestamp = {2015.05.22} -} - -@inproceedings{deVries2012c, - author = {de Vries, S and Stive, M J F and van Rijn, L C and Ranasinghe, R}, - title = {A new conceptual model for aeolian transport rates on beaches}, - booktitle = {Proceedings of 33nd International Conference on Coastal Engineering}, - year = {2012}, - address = {Santander, Spain}, - owner = {hoonhout}, - timestamp = {2015.05.22} -} - @article{deVries2014a, author = {de Vries, S and van Thiel de Vries, J S M and van Rijn, L C and Arens, S M and Ranasinghe, R}, @@ -1942,85 +398,14 @@ @article{deVries2014a timestamp = {2015.05.22} } -@article{VanDerWal2000, - author = {van der Wal, Daphne}, - title = {Grain-size-selective aeolian sand transport on a nourished beach}, - journal = {Journal of Coastal Research}, - year = {2000}, - pages = {896--908}, - owner = {hoonhout}, - publisher = {JSTOR}, - timestamp = {2016.04.29} -} - -@article{VanDerWal1998, - author = {van der Wal, Daphne}, - title = {The impact of the grain-size distribution of nourishment sand on - aeolian sand transport}, - journal = {Journal of Coastal Research}, - year = {1998}, - pages = {620--631}, - owner = {hoonhout}, - publisher = {JSTOR}, - timestamp = {2016.04.29} -} - -@inproceedings{Walstra2012, - author = {Walstra, D J R and de Vroeg, J and van Thiel de Vries, J S M and - Swinkels, C and Luijendijk, A P and de Boer, W and Hoekstra, R and - Hoonhout, B M and Henrotte, J and Smolders, T and Dekker, F and Godsey, - E}, - title = {A comprehensive sediment budget for the mississippi barrier islands}, - booktitle = {Proceedings of 33nd International Conference on Coastal Engineering}, - year = {2012}, - address = {Santander, Spain}, - owner = {hoonhout}, - timestamp = {2015.05.22} -} - -@article{Walters2014, - author = {Walters, D. and Moore, L. J. and Dur\'{a}n, O. and Fagherazzi, S. - and Mariotti, G.}, - title = {Interactions between barrier islands and backbarrier marshes affect - island system response to sea level rise: Insights from a coupled - model}, - journal = {Journal of Geophysical Research}, +@manual{Delft3DManual, + title = {Delft3D - 3D/2D modelling suite for integral water solutions - Hydro-Morphodynamics}, + author = {{Delft3D-FLOW Manual}}, + organization = {Deltares}, + address = {Delft}, + month = {May}, year = {2014}, - volume = {119}, - pages = {2013--2031}, - number = {9}, - note = {2014JF003091}, - doi = {10.1002/2014JF003091}, - issn = {2169-9011}, - keywords = {Wetlands, Geomorphology: general, Littoral processes, Coastal processes, - Continental shelf and slope processes, backbarrier marsh, barrier - island, overwash, sea level rise, coastal erosion}, - owner = {hoonhout}, - timestamp = {2015.06.15} -} - -@article{Weng1991, - author = {Weng, W. S. and Hunt, J. C. R. and Carruthers, D. J. and Warren, - A. and Wiggs, G. F. S.}, - title = {Air flow and sand transport over sand-dunes}, - journal = {Acta Mechanica}, - year = {1991}, - volume = {2}, - pages = {1--22}, - file = {Weng1991.pdf:Weng1991.pdf:PDF}, - owner = {hoonhout}, - timestamp = {2015.05.27} -} - -@article{Wiggs2004, - author = {Wiggs, G F S and Baird, A J and Atherton, R J}, - title = {The dynamic effects of moisture on the entrainment and transport - of sand by wind}, - journal = {Geomorphology}, - year = {2004}, - volume = {59}, - pages = {13--30}, - doi = {10.1016/j.geomorph.2003.09.002}, + note = {Version 3.15.34158}, owner = {hoonhout}, timestamp = {2015.05.26} } @@ -2038,21 +423,3 @@ @article{Williams1971 owner = {hoonhout}, timestamp = {2015.08.06} } - -@article{Zhang2010, - author = {Zhang, D. and Narteau, C. and Rozier, O.}, - title = {Morphodynamics of barchan and transverse dunes using a cellular automaton - model}, - journal = {Journal of Geophysical Research}, - year = {2010}, - volume = {115}, - number = {F3}, - note = {F03041}, - doi = {10.1029/2009JF001620}, - issn = {2156-2202}, - keywords = {Cellular automata, Sediment transport, Geomorphology: general, Geomorphology: - fluvial, dunes, bed shear stress, cellular automaton}, - owner = {hoonhout}, - timestamp = {2015.06.15} -} - diff --git a/docs/conf.py b/docs/conf.py index a11e1d75..8a0a7030 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -44,6 +44,8 @@ def setup(app): 'sphinx.ext.viewcode', 'sphinx_copybutton', 'sphinxcontrib.bibtex', + 'sphinx_rtd_theme', + 'sphinxcontrib.video', # 'nbsphinx', ] @@ -134,6 +136,11 @@ def setup(app): # further. For a list of options available for each theme, see the # documentation. #html_theme_options = {} +html_theme_options = { + 'collapse_navigation': True, # Enable collapsing titles in the sidebar + 'navigation_depth': 3, # Adjust the depth of the navigation tree + 'titles_only': False, # Show only titles in the sidebar +} # Add any paths that contain custom themes here, relative to this directory. html_theme_path = [sphinx_rtd_theme.get_html_theme_path()] @@ -157,7 +164,11 @@ def setup(app): # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". -# html_static_path = ['_static'] +html_static_path = ['_static'] + +html_css_files = [ + 'custom.css', +] # Add any extra paths that contain custom files (such as robots.txt or # .htaccess) here, relative to this directory. These files are copied diff --git a/docs/developer/modularity.rst b/docs/developer/modularity.rst index 564d2444..15668833 100644 --- a/docs/developer/modularity.rst +++ b/docs/developer/modularity.rst @@ -1,7 +1,7 @@ Modularity ================ -Our ambiton is to make the current version of AeoLiS more modular. Specially, we want the architecture of the software to consist of well defined components (modules) that integrate with each other though well defined interfaces. This will allow us to add new features more easily and to make the software more robust easier to exent. +Our ambition is to make the current version of AeoLiS more modular. Specially, we want the architecture of the software to consist of well-defined components (modules) that integrate with each other through well-defined interfaces. This will allow us to add new features more easily and to make the software more robust and easier to extend. For example, the current version of AeoLiS is organized in a single class, the `AeoLiSRunner`. This class is responsible for the execution of the model. It is also responsible for the reading of the input files, executing the solvers, and writing of the output files. This makes the code difficult to understand, extend and test, see :numref:`fig-uml-model`. @@ -16,25 +16,25 @@ For example, the current version of AeoLiS is organized in a single class, the ` .. _GitHub repository: https://github.com/openearth/aeolis-python/issues -Suggetions for improvement +Suggestions for improvement --------------------------- We have some ideas about how to improve the modularity of the code. However, we are still working on the details of this architecture. If you have any suggestions, please let us know by opening an issue in our `GitHub repository`_ or by proposing improvements to the code via pull requests. -- **Reduce the amount to repeated code by using abstractions.** For example, some of the solvers implement similar alogorithms. We could implement an abstract class that implements the common parts of the algorithms and then extend this class to implement the specific algorithms of each solver. -- **Reduce the number of tasks the `AeoLiSRunner` and AeoLiS classes are responsible for.** This could be achieved by moving some of the code inside those clases to independent fuctions or modules. This will make the code easier to understand and test. -- **Organize code based on componets**.For example, :numref:`fig-step-flowchart` shows a flowchart of a modeling *step* in the AeoLiSRunner. We could use each colored-box in the flowchart to refactor the source code in separated components, each one with a well defined interface that connects to the other components. - +- **Reduce the amount of repeated code by using abstractions.** For example, some of the solvers implement similar algorithms. We could implement an abstract class that implements the common parts of the algorithms and then extend this class to implement the specific algorithms of each solver. +- **Reduce the number of tasks the `AeoLiSRunner` and AeoLiS classes are responsible for.** This could be achieved by moving some of the code inside those classes to independent functions or modules. This will make the code easier to understand and test. +- **Organize code based on components**. For example, :numref:`fig-step-flowchart` shows a flowchart of a modeling *step* in the AeoLiSRunner. We could use each colored-box in the flowchart to refactor the source code into separate components, each one with a well-defined interface that connects to the other components. .. _fig-step-flowchart: .. figure:: /images/model-step-flowchart.PNG - :alt: AeoLiS architecture + :alt: Step Flowchart + + Flowchart of a modeling step in the AeoLiSRunner. .. seealso:: - Read about `How to write modular code` for more suggestions on how to make a software more modular. + Read about `How to write modular code` for more suggestions on how to make software more modular. .. _How to write modular code: https://dev.to/prxtikk/how-to-write-clean-and-modular-code-1d87 - diff --git a/docs/developer/quickstart.rst b/docs/developer/quickstart.rst index 5f6da394..71a9bf4c 100644 --- a/docs/developer/quickstart.rst +++ b/docs/developer/quickstart.rst @@ -1,3 +1,5 @@ +.. _quickstart: + Quick start ============= diff --git a/docs/user/whatsnew.rst b/docs/developer/whatsnew.rst similarity index 96% rename from docs/user/whatsnew.rst rename to docs/developer/whatsnew.rst index 237d3d56..0ab79da9 100644 --- a/docs/user/whatsnew.rst +++ b/docs/developer/whatsnew.rst @@ -1,280 +1,280 @@ -.. - [Categories] - Breaking changes - Improvements - New functions/methods - Bug fixes - Tests - -What's New -========== - -v2.1.2 (July 2023) ------------------- - -Improvements -^^^^^^^^^^^^ -* New unit test and integration tests procedures (Nike Agrawal, Manuel Garcia) - -Bug fixes -^^^^^^^^^ -* Updated DOI for referencing (Sierd de Vries) - -Documentation -^^^^^^^^^^^^^ -* Updated citation file (Manuel Garcia) -* Advanced description on steps to create release (Manuel Garcia) - -What's Changed -^^^^^^^^^^^^^^ -* Add Github action for running tests automatically by @niketagrawal in https://github.com/openearth/aeolis-python/pull/111 -* Integration test to verify the model's expected result for 1D and 2D base cases by @niketagrawal in https://github.com/openearth/aeolis-python/pull/105 -* add release guidelines by @manuGil in https://github.com/openearth/aeolis-python/pull/109 -* Unit-Tests for Model.py by @manuGil in https://github.com/openearth/aeolis-python/pull/112 -* Update citation by @manuGil in https://github.com/openearth/aeolis-python/pull/117 -* Moisture bug fix by @CarolineHalllin in https://github.com/openearth/aeolis-python/pull/116 -* Implementation grain size dependent Bagnold equation by @christavanijzendoorn in https://github.com/openearth/aeolis-python/pull/122 -* Implementing TOML file for packaging by @manuGil in https://github.com/openearth/aeolis-python/pull/125 -* Patch/deprications by @manuGil in https://github.com/openearth/aeolis-python/pull/128 -* loop over fractions replaced by numba enhanced function by @Sierd in https://github.com/openearth/aeolis-python/pull/119 -* Docs: Add developer documentation and fix bugs by @niketagrawal in https://github.com/openearth/aeolis-python/pull/134 - -**Full Changelog**: https://github.com/openearth/aeolis-python/compare/v2.1.1...v2.1.2 - -v2.1.1 (March 2023) -------------------- - -Improvements -^^^^^^^^^^^^ -* New variable to simulate fences `fence_height` (Glenn Strypsteen) - -Bug fixes -^^^^^^^^^ -* Issue with checking the size of `y` in input file for 1D cases (Glenn Strypsteen) - -Documentation -^^^^^^^^^^^^^ -* Update references to default branch in contributing guide - - -v2.1.0 (February 2023) ------------------------ - -Breaking changes -^^^^^^^^^^^^^^^^ -* Solve unrealistic behaviour for large tidal ranges and mildly sloping beaches -* Reduce computational time when using Numba - -Improvements -^^^^^^^^^^^^ -* Better documentation on numerical solvers - -Bug fixes -^^^^^^^^^ -* Solve conflict between versions of Numpy and Numba -* Solve incompatibility with Scipy 1.10 - -Tests -^^^^^^^ -* Adopt Pytest as a testing framework - - -v2.0.0 (April 2022) -------------------- - -Breaking changes -^^^^^^^^^^^^^^^^ -* New vegetation growth/expansion capabilities (Bart Van Westen) -* Addition of groundwater module and new moisture routines (Caroline Hallin) -* Incorporation of Okin (2008) vegetation shear coupler (Nick Cohn) -* Addition of Palmsten and Holman (2012) dune erosion module (Nick Cohn) -* Approach to add sand fences into model (Nick Cohn) - -Improvements -^^^^^^^^^^^^ -* Replacement of wave runup driver with Stockdon et al. (2006) (Nick Cohn) -* Non-FFT 1D based topographic shear coupler added for computational speed up (Nick Cohn) - - -v1.2.2 (18 April 2020) ------------------------ - -Breaking changes -^^^^^^^^^^^^^^^^ - -* Removed support for statistical variable names with dot-notation - (e.g. `.avg` and `.sum`) (Bas Hoonhout) - - - -Improvements -^^^^^^^^^^^^ -* Logger shows minute by minute updates (Tom Pak) - -New functions/methods -^^^^^^^^^^^^^^^^^^^^^ - -* Avalanching process included in bed.py (Tom Pak) -* Implementation of non-erodible layers (Tom Pak) - -Bug fixes -^^^^^^^^^ - -* boundary condition definition updated (Tom Pak) -* compatiblity with new NETCDF4 version restored (Sierd de Vries) -* compatiblity with 1D domains (Sierd de Vries) - -Tests -^^^^^ - -None. - -v1.1.5 (unreleased) -------------------- - -Breaking changes -^^^^^^^^^^^^^^^^ - -None. - -Improvements -^^^^^^^^^^^^ - -* Also enable inundation if process_tide is True, but tide_file not - specified. In this case the water level is constant zero. - -* Changed class attributes into instance attributes to support - parallel independent model instances. - -New functions/methods -^^^^^^^^^^^^^^^^^^^^^ - -None. - -Bug fixes -^^^^^^^^^ - -* Fixed double definition of statistics variables in netCDF file in - case both `output_types` is specified and individual statistics - variables are specified in `output_vars`. - -Tests -^^^^^ - -None. - -v1.1.4 (15 February 2018) -------------------------- - -Improvements -^^^^^^^^^^^^ - -* Route all log messages and exceptions through the logging - module. Consequently, all information, warnings, and exceptions, - including tracebacks can be logged to file. - -* Added model version number and Git hash to log files and model - output. - -v1.1.3 (9 February 2018) ------------------------- - -Bug fixes -^^^^^^^^^ - -* Apply precipitation/eaporation only in top bed layer to prevent - mismatching matrix shapes in the multiplication. In the future, - precipitation might be distributed over multiple layers depending on - the porosity. - -v1.1.2 (21 December 2017) -------------------------- - -Breaking changes -^^^^^^^^^^^^^^^^ - -* Changed name of statistics variables that describe the average, - minimum, maximum, cumulative values, or variance of a model state - variable. The variables names that used to end with `.avg`, `.sum`, - etc. now end with `_avg`, `_sum`, etc. The new naming convention was - already adopted in the netCDF output in order to be compatible with - the CF-1.6 convention, but is now also adopted in, for example, the - Basic Model Interface (BMI). Old notation is deprecated but still - supported. - -Improvements -^^^^^^^^^^^^ - -* Prepared for continuous integration through CircleCI. -* Prepared for code coverage checking through codecov. - -Bug fixes -^^^^^^^^^ - -* Use percentages (0-100) rather than fractions (0-1) in the - formulation of Belly and Johnson that describes the effect of soil - moisture on the shear velocity threshold. Thanks to Dano Roelvink - and Susana Costas (b3d992b). - -Tests -^^^^^ - -* Reduced required accuracy for mass conservation tests from - 0.00000000000001% to 1%. - -v1.1.1 (15 November 2017) -------------------------- - -Improvements -^^^^^^^^^^^^ - -* Made code compatible with Python 3.x. -* Prepared and uploaded package to PyPI. -* Switch back to original working directory after finishing - simulation. -* Removed double definition of model state. Now only defined in - `constants.MODEL_STATE`. -* Also write initial model state to output. -* Made netCDF output compatible with CF-1.6 convention. - -New functions/methods -^^^^^^^^^^^^^^^^^^^^^ - -* Added support to run a default model for testing purposes by setting - the configuration file as "DEFAULT". -* Added generic framework for reading and applying spatial - masks. Implemented support for wave, tide and threshold masks - specifically. -* Added option to include a reference date in netCDF output. -* Added experimental option for constant boundary conditions. -* Added support for reading and writing hotstart files to load a - (partial) model state upon initialisation. -* Added preliminary wind shear perturbation module. Untested. -* Added support to switch on or off specific processes. -* Added support for immutable model state variables. This - functionality can be combined with BMI or hotstart files to prevent - external process results to be overwritten by the model. -* Added option to specify wind direction convention (nautical or - cartesian). - -Bug fixes -^^^^^^^^^ - -* Fixed conversion from volume to mass using porosity and density (fe9aa52). -* Update water level with bed updates to prevent loss of water due to - bed level change (fe9aa52). -* Fixed mass bug in base layer that drained sediment from bottom - layers, resulting in empty layers (f612760). -* Made removal of negative concentrations mass conserving by scraping - the concentrations from all other grid cells (03de813). - -Tests -^^^^^ - -* Added tests to check mass conservation in bed mixing routines. -* Added integration tests. - -v1.1.0 (27 July 2016) ---------------------- - -Initial release +.. + [Categories] + Breaking changes + Improvements + New functions/methods + Bug fixes + Tests + +What's New +========== + +v2.1.2 (July 2023) +------------------ + +Improvements +^^^^^^^^^^^^ +* New unit test and integration tests procedures (Nike Agrawal, Manuel Garcia) + +Bug fixes +^^^^^^^^^ +* Updated DOI for referencing (Sierd de Vries) + +Documentation +^^^^^^^^^^^^^ +* Updated citation file (Manuel Garcia) +* Advanced description on steps to create release (Manuel Garcia) + +What's Changed +^^^^^^^^^^^^^^ +* Add Github action for running tests automatically by @niketagrawal in https://github.com/openearth/aeolis-python/pull/111 +* Integration test to verify the model's expected result for 1D and 2D base cases by @niketagrawal in https://github.com/openearth/aeolis-python/pull/105 +* add release guidelines by @manuGil in https://github.com/openearth/aeolis-python/pull/109 +* Unit-Tests for Model.py by @manuGil in https://github.com/openearth/aeolis-python/pull/112 +* Update citation by @manuGil in https://github.com/openearth/aeolis-python/pull/117 +* Moisture bug fix by @CarolineHalllin in https://github.com/openearth/aeolis-python/pull/116 +* Implementation grain size dependent Bagnold equation by @christavanijzendoorn in https://github.com/openearth/aeolis-python/pull/122 +* Implementing TOML file for packaging by @manuGil in https://github.com/openearth/aeolis-python/pull/125 +* Patch/deprications by @manuGil in https://github.com/openearth/aeolis-python/pull/128 +* loop over fractions replaced by numba enhanced function by @Sierd in https://github.com/openearth/aeolis-python/pull/119 +* Docs: Add developer documentation and fix bugs by @niketagrawal in https://github.com/openearth/aeolis-python/pull/134 + +**Full Changelog**: https://github.com/openearth/aeolis-python/compare/v2.1.1...v2.1.2 + +v2.1.1 (March 2023) +------------------- + +Improvements +^^^^^^^^^^^^ +* New variable to simulate fences `fence_height` (Glenn Strypsteen) + +Bug fixes +^^^^^^^^^ +* Issue with checking the size of `y` in input file for 1D cases (Glenn Strypsteen) + +Documentation +^^^^^^^^^^^^^ +* Update references to default branch in contributing guide + + +v2.1.0 (February 2023) +----------------------- + +Breaking changes +^^^^^^^^^^^^^^^^ +* Solve unrealistic behaviour for large tidal ranges and mildly sloping beaches +* Reduce computational time when using Numba + +Improvements +^^^^^^^^^^^^ +* Better documentation on numerical solvers + +Bug fixes +^^^^^^^^^ +* Solve conflict between versions of Numpy and Numba +* Solve incompatibility with Scipy 1.10 + +Tests +^^^^^^^ +* Adopt Pytest as a testing framework + + +v2.0.0 (April 2022) +------------------- + +Breaking changes +^^^^^^^^^^^^^^^^ +* New vegetation growth/expansion capabilities (Bart Van Westen) +* Addition of groundwater module and new moisture routines (Caroline Hallin) +* Incorporation of Okin (2008) vegetation shear coupler (Nick Cohn) +* Addition of Palmsten and Holman (2012) dune erosion module (Nick Cohn) +* Approach to add sand fences into model (Nick Cohn) + +Improvements +^^^^^^^^^^^^ +* Replacement of wave runup driver with Stockdon et al. (2006) (Nick Cohn) +* Non-FFT 1D based topographic shear coupler added for computational speed up (Nick Cohn) + + +v1.2.2 (18 April 2020) +----------------------- + +Breaking changes +^^^^^^^^^^^^^^^^ + +* Removed support for statistical variable names with dot-notation + (e.g. `.avg` and `.sum`) (Bas Hoonhout) + + + +Improvements +^^^^^^^^^^^^ +* Logger shows minute by minute updates (Tom Pak) + +New functions/methods +^^^^^^^^^^^^^^^^^^^^^ + +* Avalanching process included in bed.py (Tom Pak) +* Implementation of non-erodible layers (Tom Pak) + +Bug fixes +^^^^^^^^^ + +* boundary condition definition updated (Tom Pak) +* compatiblity with new NETCDF4 version restored (Sierd de Vries) +* compatiblity with 1D domains (Sierd de Vries) + +Tests +^^^^^ + +None. + +v1.1.5 (unreleased) +------------------- + +Breaking changes +^^^^^^^^^^^^^^^^ + +None. + +Improvements +^^^^^^^^^^^^ + +* Also enable inundation if process_tide is True, but tide_file not + specified. In this case the water level is constant zero. + +* Changed class attributes into instance attributes to support + parallel independent model instances. + +New functions/methods +^^^^^^^^^^^^^^^^^^^^^ + +None. + +Bug fixes +^^^^^^^^^ + +* Fixed double definition of statistics variables in netCDF file in + case both `output_types` is specified and individual statistics + variables are specified in `output_vars`. + +Tests +^^^^^ + +None. + +v1.1.4 (15 February 2018) +------------------------- + +Improvements +^^^^^^^^^^^^ + +* Route all log messages and exceptions through the logging + module. Consequently, all information, warnings, and exceptions, + including tracebacks can be logged to file. + +* Added model version number and Git hash to log files and model + output. + +v1.1.3 (9 February 2018) +------------------------ + +Bug fixes +^^^^^^^^^ + +* Apply precipitation/eaporation only in top bed layer to prevent + mismatching matrix shapes in the multiplication. In the future, + precipitation might be distributed over multiple layers depending on + the porosity. + +v1.1.2 (21 December 2017) +------------------------- + +Breaking changes +^^^^^^^^^^^^^^^^ + +* Changed name of statistics variables that describe the average, + minimum, maximum, cumulative values, or variance of a model state + variable. The variables names that used to end with `.avg`, `.sum`, + etc. now end with `_avg`, `_sum`, etc. The new naming convention was + already adopted in the netCDF output in order to be compatible with + the CF-1.6 convention, but is now also adopted in, for example, the + Basic Model Interface (BMI). Old notation is deprecated but still + supported. + +Improvements +^^^^^^^^^^^^ + +* Prepared for continuous integration through CircleCI. +* Prepared for code coverage checking through codecov. + +Bug fixes +^^^^^^^^^ + +* Use percentages (0-100) rather than fractions (0-1) in the + formulation of Belly and Johnson that describes the effect of soil + moisture on the shear velocity threshold. Thanks to Dano Roelvink + and Susana Costas (b3d992b). + +Tests +^^^^^ + +* Reduced required accuracy for mass conservation tests from + 0.00000000000001% to 1%. + +v1.1.1 (15 November 2017) +------------------------- + +Improvements +^^^^^^^^^^^^ + +* Made code compatible with Python 3.x. +* Prepared and uploaded package to PyPI. +* Switch back to original working directory after finishing + simulation. +* Removed double definition of model state. Now only defined in + `constants.MODEL_STATE`. +* Also write initial model state to output. +* Made netCDF output compatible with CF-1.6 convention. + +New functions/methods +^^^^^^^^^^^^^^^^^^^^^ + +* Added support to run a default model for testing purposes by setting + the configuration file as "DEFAULT". +* Added generic framework for reading and applying spatial + masks. Implemented support for wave, tide and threshold masks + specifically. +* Added option to include a reference date in netCDF output. +* Added experimental option for constant boundary conditions. +* Added support for reading and writing hotstart files to load a + (partial) model state upon initialisation. +* Added preliminary wind shear perturbation module. Untested. +* Added support to switch on or off specific processes. +* Added support for immutable model state variables. This + functionality can be combined with BMI or hotstart files to prevent + external process results to be overwritten by the model. +* Added option to specify wind direction convention (nautical or + cartesian). + +Bug fixes +^^^^^^^^^ + +* Fixed conversion from volume to mass using porosity and density (fe9aa52). +* Update water level with bed updates to prevent loss of water due to + bed level change (fe9aa52). +* Fixed mass bug in base layer that drained sediment from bottom + layers, resulting in empty layers (f612760). +* Made removal of negative concentrations mass conserving by scraping + the concentrations from all other grid cells (03de813). + +Tests +^^^^^ + +* Added tests to check mass conservation in bed mixing routines. +* Added integration tests. + +v1.1.0 (27 July 2016) +--------------------- + +Initial release diff --git a/docs/images/01_blender_barchan.mp4 b/docs/images/01_blender_barchan.mp4 new file mode 100644 index 00000000..d2397bfa Binary files /dev/null and b/docs/images/01_blender_barchan.mp4 differ diff --git a/docs/images/02_blender_parabolic.mp4 b/docs/images/02_blender_parabolic.mp4 new file mode 100644 index 00000000..580a8578 Binary files /dev/null and b/docs/images/02_blender_parabolic.mp4 differ diff --git a/docs/images/03_blender_embryo.mp4 b/docs/images/03_blender_embryo.mp4 new file mode 100644 index 00000000..55102cbc Binary files /dev/null and b/docs/images/03_blender_embryo.mp4 differ diff --git a/docs/images/04_blender_blowout.mp4 b/docs/images/04_blender_blowout.mp4 new file mode 100644 index 00000000..dc31f86b Binary files /dev/null and b/docs/images/04_blender_blowout.mp4 differ diff --git a/docs/images/Veg_growth.png b/docs/images/Veg_growth.png new file mode 100644 index 00000000..9d1a2a4a Binary files /dev/null and b/docs/images/Veg_growth.png differ diff --git a/docs/images/aeolis_developer_group.jpg b/docs/images/aeolis_developer_group.jpg new file mode 100644 index 00000000..29b82fb2 Binary files /dev/null and b/docs/images/aeolis_developer_group.jpg differ diff --git a/docs/images/aeolis_overview.png b/docs/images/aeolis_overview.png new file mode 100644 index 00000000..d16c4552 Binary files /dev/null and b/docs/images/aeolis_overview.png differ diff --git a/docs/images/case_00.mp4 b/docs/images/case_00.mp4 new file mode 100644 index 00000000..54c9ff96 Binary files /dev/null and b/docs/images/case_00.mp4 differ diff --git a/docs/images/case_01.mp4 b/docs/images/case_01.mp4 new file mode 100644 index 00000000..f9e0476a Binary files /dev/null and b/docs/images/case_01.mp4 differ diff --git a/docs/images/case_02.mp4 b/docs/images/case_02.mp4 new file mode 100644 index 00000000..5971ec0b Binary files /dev/null and b/docs/images/case_02.mp4 differ diff --git a/docs/images/case_03.mp4 b/docs/images/case_03.mp4 new file mode 100644 index 00000000..bef417be Binary files /dev/null and b/docs/images/case_03.mp4 differ diff --git a/docs/images/case_04.mp4 b/docs/images/case_04.mp4 new file mode 100644 index 00000000..4e29de5e Binary files /dev/null and b/docs/images/case_04.mp4 differ diff --git a/docs/images/case_05.mp4 b/docs/images/case_05.mp4 new file mode 100644 index 00000000..10889065 Binary files /dev/null and b/docs/images/case_05.mp4 differ diff --git a/docs/images/compare_topo_steering.jpg b/docs/images/compare_topo_steering.jpg new file mode 100644 index 00000000..911bf265 Binary files /dev/null and b/docs/images/compare_topo_steering.jpg differ diff --git a/docs/images/concept_topo_steering.jpg b/docs/images/concept_topo_steering.jpg new file mode 100644 index 00000000..defcec1e Binary files /dev/null and b/docs/images/concept_topo_steering.jpg differ diff --git a/docs/images/model_overview.png b/docs/images/model_overview.png new file mode 100644 index 00000000..8ac540d6 Binary files /dev/null and b/docs/images/model_overview.png differ diff --git a/docs/images/rotating_shear.mp4 b/docs/images/rotating_shear.mp4 new file mode 100644 index 00000000..645c6489 Binary files /dev/null and b/docs/images/rotating_shear.mp4 differ diff --git a/docs/index.rst b/docs/index.rst index 1c5eab26..a830d7ff 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -6,71 +6,102 @@ Welcome to AeoLiS's Documentation ================================== -.. raw:: html +This documentation describes the Python implementation of the AeoLiS. AeoLiS is an aeolian sediment transport and landform evolution model that is designed to account for sediment-supply-limiting factors in coastal environments. The source code of the Python implementation can be found in `GitHub `_. -
- -
+The code is developed and maintained by a developer group that consists of members from Deltares, U.S. Army Engineer Research and Development Center (ERDC), Delft University of Technology, Oregon State University, and Lund University. We encourage contributions from the community. If you are interested in contributing to the code, please read the :ref:`developer documentation `. -------- +.. _fig-developer-group: -AeoLiS is a process-based model for simulating aeolian sediment transport in situations where supply-limiting factors are important, -like in coastal environments. Supply-limitations currently supported are soil moisture contents, sediment sorting and armouring, bed slope effects, air humidity and roughness elements. +.. figure:: images/aeolis_developer_group.jpg + :alt: Aeolis developer group + :width: 550px + :align: center + + AeoLiS developer group -This documentation describes the Python implementation of the AeoLiS -model. The source code of the Python implementation can be found in `GitHub `_. +Contact +======= +If you have questions about the model that is of interest to the community, please post your question in the `discussion forum `_. + +- Bart van Westen (Bart.vanWesten@deltares.nl) at Deltares +- Nick Cohn (nicholas.t.cohn@usace.army.mil) at U.S. Army Engineer Research and Development Center (ERDC) +- Sierd de Vries (Sierd.deVries@tudelft.nl) (founder) at Delft University of Technology +- Christa van IJzendoorn (vanijzec@oregonstate.edu) at Oregon State University +- Caroline Hallin (caroline.hallin@tvrl.lth.se) at Lund University +- Glenn Strypsteen (glenn.strypsteen@kuleuven.be) at Katholieke Universiteit Leuven + +Acknowledgements +================ + +* AeoLiS was initially developed at Delft University of Technology with support from the ERC-Advanced Grant 291206 Nearshore Monitoring and Modeling (`NEMO `_) and `Deltares `_. +* AeoLiS is currently maintained by `Bart van Westen `_ at Deltares, `Nick Cohn `_ at U.S. Army Engineer Research and Development Center (ERDC) and `Sierd de Vries `_ at Delft University of Technology. +* Further development of AeoLiS is supported by the `Digital Competence Centre `_, Delft University of Technology. + +.. list-table:: + :widths: 50 50 + :header-rows: 0 + :class: borderless-table + + * - .. video:: /images/01_blender_barchan.mp4 + :autoplay: + :loop: + :muted: + :width: 100% + + - .. video:: /images/02_blender_parabolic.mp4 + :autoplay: + :loop: + :muted: + :width: 100% + + * - .. video:: /images/03_blender_embryo.mp4 + :autoplay: + :loop: + :muted: + :width: 100% + + - .. video:: /images/04_blender_blowout.mp4 + :autoplay: + :loop: + :muted: + :width: 100% Contents --------- +======== .. toctree:: :caption: User Documentation - :maxdepth: 2 + :maxdepth: 3 + user/introduction user/installation - user/whatsnew - user/model - user/implementation - user/defaults - user/inputfiles - user/output + user/model_description + user/model_setup + user/model_interaction user/sourcecode - user/bibliography + user/references + user/appendix .. toctree:: - :caption: Tutorials - :maxdepth: 2 + :caption: Tutorials and examples + :maxdepth: 3 - tutorials/sandmotor - tutorials/2D-parabolic + tutorials/shortcourses + tutorials/demonstration_cases .. toctree:: :caption: Developer Documentation - :maxdepth: 2 + :maxdepth: 3 developer/quickstart developer/testing-introduction developer/unit-testing + developer/whatsnew .. toctree:: :caption: Current Development - :maxdepth: 2 + :maxdepth: 3 developer/modularity developer/domain-decomposition - -Acknowledgements -================ - -* AeoLiS was initially developed at Delft University of Technology with support from the ERC-Advanced Grant 291206 Nearshore Monitoring and Modeling (`NEMO `_) and `Deltares `_. -* AeoLiS is currently maintained by `Bart van Westen `_ at Deltares, `Nick Cohn `_ at U.S. Army Engineer Research and Development Center (ERDC) and `Sierd de Vries `_ at Delft University of Technology. -* Further developement of AeoLiS is supported by the `Digital Competence Centre `_, Delft University of Technology. - - -Indices and tables -================== - -* :ref:`genindex` -* :ref:`search` - diff --git a/docs/requirements.txt b/docs/requirements.txt index 55ac6010..313d42cd 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -3,4 +3,5 @@ aeolis sphinx-copybutton==0.5.2 plot==0.6.5 nbsphinx>=0.9.2 -sphinx-rtd-theme \ No newline at end of file +sphinx-rtd-theme +sphinxcontrib-video diff --git a/docs/tutorials/2D-parabolic.rst b/docs/tutorials/2D-parabolic.rst deleted file mode 100644 index 055223de..00000000 --- a/docs/tutorials/2D-parabolic.rst +++ /dev/null @@ -1,34 +0,0 @@ -Parabolic dune model (Tutorial under construction) -=================================================== - - -1. Install aeolis - -pip install aeolis - -2. Install the examples - -To install the examples do the following: - -.. code-block:: bash - - aeolis examples . - -This will install the examples in the current directory. If you want to install them in a different directory, replace the "." with the path to the directory you want to install the examples in. - -3. Run the simulation - -Run the simulation with: - -.. code-block:: bash - - aeolis run aeolis_examples/parabolic_dune_model/aeolis.txt - - -4. View/plot the results - - - - - - diff --git a/docs/tutorials/demonstration_cases.rst b/docs/tutorials/demonstration_cases.rst new file mode 100644 index 00000000..658f17e1 --- /dev/null +++ b/docs/tutorials/demonstration_cases.rst @@ -0,0 +1,34 @@ +Demonstration cases +=================== +The `example folder `_ contains a collection of input files needed to run example models. The different examples are explained in the `readme-file `. They are intended to serve as an example of the model's capabilities and instruction on how to set up and organize models. The model input files can be modified using the `pre-processing tools `, and the model output can be visualized with the `post-processing tools https://github.com/openearth/aeolis-python/tree/main/tools/postprocessing>`. + +To run the examples: + +1. Install aeolis + +.. code-block:: bash + + pip install aeolis + +2. Install the examples + +To install the examples do the following: + +.. code-block:: bash + + aeolis examples . + +This will install the examples in the current directory. If you want to install them in a different directory, replace the "." with the path to the directory you want to install the examples in. + +3. Run the simulation + +Run the simulation with (example parabolic dune model): + +.. code-block:: bash + + aeolis run aeolis_examples/parabolic_dune_model/aeolis.txt + + +4. View/plot the results (example parabolic dune model): + +Run the plotting_run.py file to visualize the example. Make sure the in the code that the correct nc file from the correct directory is being read. diff --git a/docs/tutorials/sandmotor.rst b/docs/tutorials/sandmotor.rst deleted file mode 100644 index d66669f0..00000000 --- a/docs/tutorials/sandmotor.rst +++ /dev/null @@ -1,33 +0,0 @@ -SandMotor model (Tutorial under construction) -============================================== - - -1. Install aeolis - -pip install aeolis - -2. Install the sandengine_small_grids example - -To install the example do the following: - -.. code-block:: bash - - aeolis examples . - -This command will create a directory called "aeolis_examples" in the current directory. The model configuration file for the sandengine_small_grids example is placed in the "sandengine_small_grids" subdirectory of "aeolis_examples". - -This will install the examples in the current directory. If you want to install them in a different directory, replace the "." with the path to the directory you want to install the examples in. - -3. Run the simulation - -Run the simulation with: - -.. code-block:: bash - - aeolis run aeolis_examples/sandengine_small_grids/aeolis.txt - - -4. View/plot the results - - - diff --git a/docs/tutorials/shortcourses.rst b/docs/tutorials/shortcourses.rst new file mode 100644 index 00000000..ea18905f --- /dev/null +++ b/docs/tutorials/shortcourses.rst @@ -0,0 +1,7 @@ +Short courses +=============== +A couple of short courses are available to help new users get acquainted with the model: + +https://github.com/openearth/aeolis-shortcourse + +https://github.com/erdc/aeolis-python/tree/master/tutorial diff --git a/docs/user/implementation.rst b/docs/user/appendix.rst similarity index 78% rename from docs/user/implementation.rst rename to docs/user/appendix.rst index 532b560d..64fdd18e 100644 --- a/docs/user/implementation.rst +++ b/docs/user/appendix.rst @@ -1,36 +1,13 @@ -Numerical implementation -======================== +Appendix +========= -The numerical implementation of the equations presented in -:ref:`model` is explained here. The implementation is available as -Python package through the OpenEarth GitHub repository at: -http://www.github.com/openearth/aeolis-python/ +Numerical details of solving the advection equation +----------------------------------------------------- -Advection equation ------------------- -The advection equation is implemented in two-dimensional form -following: +.. _pieter_num: -.. math:: - :label: apx-advection - - \frac{\partial c}{\partial t} + - u_{z,\mathrm{x}} \frac{\partial c}{\partial x} + - u_{z,\mathrm{y}} \frac{\partial c}{\partial y} = - \frac{c_{\mathrm{sat}} - c}{T} - -in which :math:`c` [:math:`\mathrm{kg/m^2}`] is the sediment mass per -unit area in the air, :math:`c_{\mathrm{sat}}` [:math:`\mathrm{kg/m^2}`] is the -maximum sediment mass in the air that is reached in case of -saturation, :math:`u_{z,\mathrm{x}}` and :math:`u_{z,\mathrm{y}}` are the x- and -y-component of the wind velocity at height :math:`z` [m], :math:`T` [s] is an -adaptation time scale, :math:`t` [s] denotes time and :math:`x` [m] and :math:`y` [m] -denote cross-shore and alongshore distances respectively. - -The formulation is discretized in different ways to allow for different types of simulations balancing accuracy vs. computational resources. The conservative method combined with an euler backward scheme (written by Prof. Rauwoens) is the current default for most simulations. Non-conservative methods end explicit Euler forward schemes are also available. - -Default scheme -- Conservative Euler Backward Implicit +Conservative Euler Backward Implicit (pieter solver) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ The default numerical method assumes the advection scheme in a conservative form in combination with an euler backward scheme. This scheme is prepared to use a TVD method but this is not implemented yet (add footnote{Total Variance Diminishing, this is explained in the lecture notes by Zijlema p94}) @@ -244,159 +221,11 @@ Also, the pickup per grid cell can be calculated using: note that this is only valid when using an Euler backward scheme. -Solving the Linear System of Equations -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The linear system of equations can be elaborated : - -.. math:: - :label: apx-system - - \left[ - \begin{array}{cccccc} - A^0_1 & A^{1}_1 & \textbf{0} & \cdots & \textbf{0} & A^{n_{\mathrm{y}}+1}_1 \\ - A^{-1}_2 & A^0_2 & \ddots & \ddots & & \textbf{0} \\ - \textbf{0} & \ddots & \ddots & \ddots & \ddots & \vdots \\ - \vdots & \ddots & \ddots & \ddots & \ddots & \textbf{0} \\ - \textbf{0} & & \ddots & \ddots & A^0_{n_{\mathrm{y}}} & A^1_{n_{\mathrm{y}}} \\ - A^{-n_{\mathrm{y}}-1}_{n_{\mathrm{y}}+1} & \textbf{0} & \cdots & \textbf{0} & A^{-1}_{n_{\mathrm{y}}+1} & A^0_{n_{\mathrm{y}}+1} \\ - \end{array} - \right] \left[ - \begin{array}{c} - \vec{\delta c}_1 \\ \vec{\delta c}_2 \\ \vdots \\ \vdots \\ \vec{\delta c}_{n_{\mathrm{y}}} \\ \vec{\delta c}_{n_{\mathrm{y}}+1} \\ - \end{array} - \right] = \left[ - \begin{array}{c} - \vec{y}_1 \\ \vec{y}_2 \\ \vdots \\ \vdots \\ \vec{y}_{n_{\mathrm{y}}} \\ \vec{y}_{n_{\mathrm{y}}+1} \\ - \end{array} - \right] - -where each item in the matrix is again a matrix :math:`A^l_j` and -each item in the vectors is again a vector :math:`\vec{\delta c}_j` and -:math:`\vec{y}_j` respectively. The form of the matrix :math:`A^l_j` depends on -the diagonal index :math:`l` and reads: - -.. math:: - :label: apx-diagonal - - A^0_j = - \left[ - \begin{array}{ccccccc} - 0 & 0 & 0 & 0 - & \cdots & \cdots & 0 \\ - a^{0,-1}_{2,j} & a^{0,0}_{2,j} & a^{0,1}_{2,j} & \ddots - & & & \vdots \\ - 0 & a^{0,-1}_{3,j} & a^{0,0}_{3,j} & a^{0,1}_{3,j} - & \ddots & & \vdots \\ - \vdots & \ddots & \ddots & \ddots - & \ddots & \ddots & \vdots \\ - \vdots & & \ddots & a^{0,-1}_{n_{\mathrm{x}}-1,j} - & a^{0,0}_{n_{\mathrm{x}}-1,j} & a^{0,1}_{n_{\mathrm{x}}-1,j} & 0 \\ - \vdots & & & 0 - & a^{0,-1}_{n_{\mathrm{x}},j} & a^{0,0}_{n_{\mathrm{x}},j} & a^{0,1}_{n_{\mathrm{x}},j} \\ - 0 & \cdots & \cdots & 0 - & 1 & -2 & 1 \\ - \end{array} - \right] - -for :math:`l = 0` and - -.. math:: - :label: apx-offdiagonal - - A^l_j = - \left[ - \begin{array}{ccccccc} - 1 & 0 & \cdots & \cdots - & \cdots & \cdots & 0 \\ - 0 & a^{l,0}_{2,j} & \ddots & - & & & \vdots \\ - \vdots & \ddots & a^{l,0}_{3,j} & \ddots - & & & \vdots \\ - \vdots & & \ddots & \ddots - & \ddots & & \vdots \\ - \vdots & & & \ddots - & a^{l,0}_{n_{\mathrm{x}}-1,j} & \ddots & \vdots \\ - \vdots & & & - & \ddots & a^{l,0}_{n_{\mathrm{x}},j} & 0 \\ - 0 & \cdots & \cdots & \cdots - & \cdots & 0 & 1 \\ - \end{array} - \right] - -for :math:`l \neq 0`. The vectors :math:`\vec{\delta c}_{j,k}` and :math:`\vec{y}_{j,k}` -read: -.. math:: - :label: c-array - - \begin{array}{rclrcl} - \vec{\delta c}_{j,k} &=& \left[ - \begin{array}{c} - \delta c^{n+1}_{1,j,k} \\ - \delta c^{n+1}_{2,j,k} \\ - \delta c^{n+1}_{3,j,k} \\ - \vdots \\ - \delta c^{n+1}_{n_{\mathrm{x}}-1,j,k} \\ - \delta c^{n+1}_{n_{\mathrm{x}},j,k} \\ - \delta c^{n+1}_{n_{\mathrm{x}}+1,j,k} \\ - \end{array} - \right] & ~ \mathrm{and} ~ - \vec{y}_{j,k} &=& \left[ - \begin{array}{c} - 0 \\ - y^n_{2,j,k} \\ - y^n_{3,j,k} \\ - \vdots \\ - y^n_{n_{\mathrm{x}}-1,j,k} \\ - y^n_{n_{\mathrm{x}},j,k} \\ - 0 \\ - \end{array} - \right] \\ - \end{array} - -:math:`n_{\mathrm{x}}` and :math:`n_{\mathrm{y}}` denote the number of -spatial grid cells in x- and y-direction. - -Iterations to solve for multiple fractions -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -The linear system defined in Equation :eq:`apx-system` is solved by a -sparse matrix solver for each sediment fraction separately in -ascending order of grain size. Initially, the weights -:math:`\hat{w}^{n+1}_{i,j,k}` are chosen according to the grain size -distribution in the bed and the air. The sediment availability -constraint is checked after each solve: - -.. math:: - :label: solve - - m_{\mathrm{a}} \geq \frac{\hat{w}^{n+1}_{i,j,k} c^{n+1}_{\mathrm{sat},i,j,k} - c^{n+1}_{i,j,k}}{T} \Delta t^n - -If the constraint if violated, a new estimate for the weights -is back-calculated following: - -.. math:: - :label: solve-weights - - \hat{w}^{n+1}_{i,j,k} = \frac{ c^{n+1}_{i,j,k} + m_{\mathrm{a}} \frac{T}{\Delta t^n} }{c^{n+1}_{\mathrm{sat},i,j,k}} - -The system is solved again using the new weights. This -procedure is repeated until a weight is found that does not violate -the sediment availability constraint. If the time step is not too -large, the procedure typically converges in only a few -iterations. Finally, the weights of the larger grains are increased -proportionally as to ensure that the sum of all weights remains -unity. If no larger grains are defined, not enough sediment is -available for transport and the grid cell is truly -availability-limited. This situation should only occur occasionally as -the weights in the next time step are computed based on the new bed -composition and thus will be skewed towards the large fractions. If -the situation occurs regularly, the time step is chosen too large -compared to the rate of armoring. +.. _trunk_num: -Euler Schemes in non-conservative form -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Euler Schemes in non-conservative form (trunk solver) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Early model results relied on Euler schemes in a non conservative form. This allowed for a relatively easy implementation but did not guarantee mass conservation. In version 2 of AEOLIS the conservative form became the default. However, some users still use the older scheme. @@ -637,100 +466,155 @@ boundaries are circular: c^{n+1}_{i,n_{\mathrm{y}}+1,k} &=& c^{n+1}_{i,1,k} \\ \end{array} -Shear stress perturbation for non-perpendicular wind directions ---------------------------------------------------------------- - -The shear stress perturbation 𝛿𝜏 is estimated following the analytical description of the influence of alow and smooth hill in the wind profile by Weng et al. (1991). The perturbation is given by the Fouriertransformed components of the shear stress perturbation in the unperturbed wind direction which are the functions 𝛿𝜏𝑥(𝑘) and 𝛿𝜏𝑦(𝑘). The x-direction is defined by the direction of the wind velocity 𝑣0 on a flat bed, while the y direction is then the transverse. - -As a result, the perturbation theory can only estimate the shear stress induced by the morphology-wind interaction in parallel direction of wind. Therefore, model simulations were, up to now, limited to input wind directions parallel to the cross­shore axis of the grid. - -To overcome this limitation and to allow for modelling directional winds, an overlaying computational grid is introduced in AeoLiS, which rotates with the changing wind direction per time step. By doing this, the shear stresses are always estimated in the positive x-direction of the computational grid. The following steps are executed for each time step: - -1. Create a computational grid alligned with the wind direction (set_computational_grid) -2. Add and fill buffer around the original grid -3. Populate computation grid by rotating it to the current wind direction and interpolate the original topography on it. Additionally, edges around -4. Compute the morphology-wind induced shear stress by using the perturbation theory -5. Add the only wind induced wind shear stresses to the computational grid -6. Rotate both the grids and the total shear stress results in opposite direction -7. Interpolate the total shear stress results from the computational grid to the original grid -8. Rotate the wind shear stress results and the original grid back to the original orientation - -.. note:: - The extra rotations in the last two steps are necessary as a simplified, but faster in terms of computational time, interpolation method is used. +Solving the Linear System of Equations +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Boussinesq groundwater equation -------------------------------- -The Boussinesq equation is solved numerically with a central finite difference -method in space and a fourth-order Runge-Kutta integration technique in time: +The linear system of equations can be elaborated : .. math:: - :label: solve-boussinesq - - f(\eta ) = \frac{K}{{{n_e}}}\left[ {D\underbrace {\frac{{{\partial ^2}\eta }}{{\partial {x^2}}}}_a + \underbrace {\frac{\partial }{{\partial x}}\underbrace {\left\{ {\eta \frac{{\partial \eta }}{{\partial x}}} \right\}}_b}_c} \right] - -The Runge-Kutta time-stepping, where :math:`\Delta t` is the length of the timestep, is defined as, + :label: apx-system + + \left[ + \begin{array}{cccccc} + A^0_1 & A^{1}_1 & \textbf{0} & \cdots & \textbf{0} & A^{n_{\mathrm{y}}+1}_1 \\ + A^{-1}_2 & A^0_2 & \ddots & \ddots & & \textbf{0} \\ + \textbf{0} & \ddots & \ddots & \ddots & \ddots & \vdots \\ + \vdots & \ddots & \ddots & \ddots & \ddots & \textbf{0} \\ + \textbf{0} & & \ddots & \ddots & A^0_{n_{\mathrm{y}}} & A^1_{n_{\mathrm{y}}} \\ + A^{-n_{\mathrm{y}}-1}_{n_{\mathrm{y}}+1} & \textbf{0} & \cdots & \textbf{0} & A^{-1}_{n_{\mathrm{y}}+1} & A^0_{n_{\mathrm{y}}+1} \\ + \end{array} + \right] \left[ + \begin{array}{c} + \vec{\delta c}_1 \\ \vec{\delta c}_2 \\ \vdots \\ \vdots \\ \vec{\delta c}_{n_{\mathrm{y}}} \\ \vec{\delta c}_{n_{\mathrm{y}}+1} \\ + \end{array} + \right] = \left[ + \begin{array}{c} + \vec{y}_1 \\ \vec{y}_2 \\ \vdots \\ \vdots \\ \vec{y}_{n_{\mathrm{y}}} \\ \vec{y}_{n_{\mathrm{y}}+1} \\ + \end{array} + \right] + +where each item in the matrix is again a matrix :math:`A^l_j` and +each item in the vectors is again a vector :math:`\vec{\delta c}_j` and +:math:`\vec{y}_j` respectively. The form of the matrix :math:`A^l_j` depends on +the diagonal index :math:`l` and reads: .. math:: - :label: runge-kutta - - \begin{gathered} - \eta _i^{t + 1} = \eta _i^t + \frac{{\Delta t}}{6}\left( {{f_1} + 2{f_2} + 2{f_3} + {f_4}} \right) \hfill \\ - {f_1} = f(\eta _i^t) \hfill \\ - {f_2} = f\left( {\eta _i^t + \frac{{\Delta t}}{2}{f_1}} \right) \hfill \\ - {f_3} = f\left( {\eta _i^t + \frac{{\Delta t}}{2}{f_2}} \right) \hfill \\ - {f_4} = f\left( {\eta _i^t + \Delta t{f_3}} \right) \hfill \\ - \end{gathered} + :label: apx-diagonal + + A^0_j = + \left[ + \begin{array}{ccccccc} + 0 & 0 & 0 & 0 + & \cdots & \cdots & 0 \\ + a^{0,-1}_{2,j} & a^{0,0}_{2,j} & a^{0,1}_{2,j} & \ddots + & & & \vdots \\ + 0 & a^{0,-1}_{3,j} & a^{0,0}_{3,j} & a^{0,1}_{3,j} + & \ddots & & \vdots \\ + \vdots & \ddots & \ddots & \ddots + & \ddots & \ddots & \vdots \\ + \vdots & & \ddots & a^{0,-1}_{n_{\mathrm{x}}-1,j} + & a^{0,0}_{n_{\mathrm{x}}-1,j} & a^{0,1}_{n_{\mathrm{x}}-1,j} & 0 \\ + \vdots & & & 0 + & a^{0,-1}_{n_{\mathrm{x}},j} & a^{0,0}_{n_{\mathrm{x}},j} & a^{0,1}_{n_{\mathrm{x}},j} \\ + 0 & \cdots & \cdots & 0 + & 1 & -2 & 1 \\ + \end{array} + \right] -where, :math:`i` is the grid cell in x-direction and :math:`t` is the timestep. The central difference solution to :math:`f(\eta)` is obtained through discretisation of the Boussinesq equation, +for :math:`l = 0` and .. math:: - :label: a-solve - - {a_i} = \frac{{\eta _{i + 1}^{} - 2\eta _i^{} + \eta _{i - 1}^{}}}{{{{(\Delta x)}^2}}} + :label: apx-offdiagonal + + A^l_j = + \left[ + \begin{array}{ccccccc} + 1 & 0 & \cdots & \cdots + & \cdots & \cdots & 0 \\ + 0 & a^{l,0}_{2,j} & \ddots & + & & & \vdots \\ + \vdots & \ddots & a^{l,0}_{3,j} & \ddots + & & & \vdots \\ + \vdots & & \ddots & \ddots + & \ddots & & \vdots \\ + \vdots & & & \ddots + & a^{l,0}_{n_{\mathrm{x}}-1,j} & \ddots & \vdots \\ + \vdots & & & + & \ddots & a^{l,0}_{n_{\mathrm{x}},j} & 0 \\ + 0 & \cdots & \cdots & \cdots + & \cdots & 0 & 1 \\ + \end{array} + \right] -.. math:: - {b_i} = \frac{{\eta _i^{}\left( {\eta _{i + 1}^{} - \eta _{i - 1}^{}} \right)}}{{\Delta x}} +for :math:`l \neq 0`. The vectors :math:`\vec{\delta c}_{j,k}` and :math:`\vec{y}_{j,k}` +read: .. math:: - {c_i} = \frac{{\left( {b_{i + 1}^{} - b_{i - 1}^{}} \right)}}{{\Delta x}} + :label: c-array -The seaward boundary condition is defined as the still water level plus the wave setup . -If the groundwater elevation is larger than the bed elevation, there is a seepage face, -and the groundwater elevation is set equal to the bed elevation. On the landward boundary, -a no-flow condition, :math:`\frac{{\partial \eta }}{{\partial t}} = 0` (Neumann condition), or constant head, :math:`\eta = constant` (Dirichlet condition), is prescribed. + \begin{array}{rclrcl} + \vec{\delta c}_{j,k} &=& \left[ + \begin{array}{c} + \delta c^{n+1}_{1,j,k} \\ + \delta c^{n+1}_{2,j,k} \\ + \delta c^{n+1}_{3,j,k} \\ + \vdots \\ + \delta c^{n+1}_{n_{\mathrm{x}}-1,j,k} \\ + \delta c^{n+1}_{n_{\mathrm{x}},j,k} \\ + \delta c^{n+1}_{n_{\mathrm{x}}+1,j,k} \\ + \end{array} + \right] & ~ \mathrm{and} ~ + \vec{y}_{j,k} &=& \left[ + \begin{array}{c} + 0 \\ + y^n_{2,j,k} \\ + y^n_{3,j,k} \\ + \vdots \\ + y^n_{n_{\mathrm{x}}-1,j,k} \\ + y^n_{n_{\mathrm{x}},j,k} \\ + 0 \\ + \end{array} + \right] \\ + \end{array} +:math:`n_{\mathrm{x}}` and :math:`n_{\mathrm{y}}` denote the number of +spatial grid cells in x- and y-direction. -Basic Model Interface (BMI) ---------------------------- +Iterations to solve for multiple fractions +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -A Basic Model Interface (BMI, :cite:`Peckham2013`) is implemented -that allows interaction with the model during run time. The model can -be implemented as a library within a larger framework as the interface -exposes the initialization, finalization and time stepping -routines. As a convenience functionality the current implementation -supports the specification of a callback function. The callback -function is called at the start of each time step and can be used to -exchange data with the model, e.g. update the topography from -measurements. +The linear system defined in Equation :eq:`apx-system` is solved by a +sparse matrix solver for each sediment fraction separately in +ascending order of grain size. Initially, the weights +:math:`\hat{w}^{n+1}_{i,j,k}` are chosen according to the grain size +distribution in the bed and the air. The sediment availability +constraint is checked after each solve: -An example of a callback function, that is referenced in the model -input file or through the model command-line options as -``callback.py:update``, is: +.. math:: + :label: solve -.. code:: + m_{\mathrm{a}} \geq \frac{\hat{w}^{n+1}_{i,j,k} c^{n+1}_{\mathrm{sat},i,j,k} - c^{n+1}_{i,j,k}}{T} \Delta t^n - import numpy as np +If the constraint if violated, a new estimate for the weights +is back-calculated following: - def update(model): - val = model.get_var('zb') - val_new = val.copy() - val_new[:,:] = np.loadtxt('measured_topography.txt') - model.set_var('zb', val_new) +.. math:: + :label: solve-weights -.. .. rubric:: Bibliography + \hat{w}^{n+1}_{i,j,k} = \frac{ c^{n+1}_{i,j,k} + m_{\mathrm{a}} \frac{T}{\Delta t^n} }{c^{n+1}_{\mathrm{sat},i,j,k}} -.. .. bibliography:: -.. :labelprefix: A -.. :keyprefix: a- +The system is solved again using the new weights. This +procedure is repeated until a weight is found that does not violate +the sediment availability constraint. If the time step is not too +large, the procedure typically converges in only a few +iterations. Finally, the weights of the larger grains are increased +proportionally as to ensure that the sum of all weights remains +unity. If no larger grains are defined, not enough sediment is +available for transport and the grid cell is truly +availability-limited. This situation should only occur occasionally as +the weights in the next time step are computed based on the new bed +composition and thus will be skewed towards the large fractions. If +the situation occurs regularly, the time step is chosen too large +compared to the rate of armoring. diff --git a/docs/user/defaults.rst b/docs/user/defaults.rst deleted file mode 100644 index 504cfc26..00000000 --- a/docs/user/defaults.rst +++ /dev/null @@ -1,16 +0,0 @@ - -.. _default settings: - -Default settings -================ - -The AeoLiS model can be configured using a model configuration -file. For any configuration parameters not defined in the model -configuration file, or in case the model configuration file is absent, -the default model configuration is used. The default model -configuration is listed below. - -.. literalinclude:: ../../aeolis/constants.py - :language: python - :start-after: #: AeoLiS model default configuration - :end-before: #: Merge initial and model state diff --git a/docs/user/inputfiles.rst b/docs/user/inputfiles.rst deleted file mode 100644 index 1421d384..00000000 --- a/docs/user/inputfiles.rst +++ /dev/null @@ -1,221 +0,0 @@ -Input files -================= - -The computational grid and boundary conditions for AeoLiS are specified through external -input files called by the model parameter file aeolis.txt. The computational grid is defined -with an x grid, y grid, and z grid. Boundary conditions for wind, wave, and tides -are also specified with external text files. A list of additional grid and boundary -files can be found in the table below. Each file is further defined below. - -.. list-table:: - :widths: 25 50 - :header-rows: 1 - - * - Input File - - File Description - * - aeolis.txt - - File containing parameter definitions - * - x.grd - - File containing cross-shore grid - * - y.grd - - File containing alongshore grid (can be all zeros for 1D cases) - * - z.grd - - File containing topography and bathymetry data - * - veg.grd - - File containing initial vegetation density - * - mass.txt - - File containing sediment mass data when using space varying grain size distribution - * - wind.txt - - File containing wind speed and direction data - * - tide.txt - - File containing water elevation data - * - wave.txt - - File containing wave height and period data - * - meteo.txt - - File containing meteorological time series data - -aeolis.txt ----------- - -This is the parameter file for AeoLiS that defines the model processes and boundary conditions. -Parameters in the file are specified by various keywords; each keyword has a pre-defined -default value that will be used if it is not direclty specified in aeolis.txt (a list of default parameter -values can be found in the Default settings tab on the left). Among the keywords -in aeolis.txt are the keywords to define the external computational grid files (xgrid_file, ygrid_file, -and bed_file) and external boundary condition files (tide_file, wave_file, wind_file, etc.). -The different physical processes in AeoLiS can be turned on and off by changing the -process keywords in aeolis.txt to T (True) and F (False). Example aeolis.txt parameters files can be -found in the examples folder on the AeoLiS GitHub. - -x.grd ------ - -The x.grd file defines the computational grid in the cross-shore direction defined in meters. -In a 1-dimensional (1D) case, the file contains a single column of cross-shore locations -starting at zero for a location of choice. In a 2-dimesional (2D) case, the file -contains multiple columns (cross-shore positions) and rows (alongshore positions) -where each value corresponds to a specific location in the 2D grid. The file can be renamed -and is referenced from the parameters file with the xgrid_file keyword. - -y.grd ------ - -This file defines the computational grid in the alongshore direction. In a 1D case, -y.grd will contain a single column of zeros. In a 2D case, similar to the x.grd file, -y.grd has multiple columns (cross-shore positions) and rows (alongshore positions) -where each row, column position corresponds to a specific location in the 2D gird. -x.grd and y.grd will always be the same size regardless of running a 1D or 2D simulation. -As with the x.grd file, this file can be renamed and is referenced from the parameters file with the -keyword: ygrid_file. - -z.grd ------ - -The z.grd file provides the model with the elevation information for the computational -grid defined in x.grd and y.grd. Similar to x.grd and y.grd, when running -AeoLis in 1D the file contains a single column with the number of rows equal -to the number of rows in x.grd and y.grd. In 2D cases, z.grd has multiple columns and -rows of equal size to x.grd and y.grd. Elevation values in the file should be defined such that -positive is up and negative is down. The file can be renamed and is referenced from the -parameters file with the keyword: bed_file. - -veg.grd -------- - -The veg.grd file is an optional grid providing initial vegetation coverage (density) at each position in the -model domain defined in x.grd and y.grd. Similar to the grid files, if simulations are in -2D there will be multiple columns for each cross-shore position (x) and multiple rows for -each alongshore position (y). The format of a 1D vegetation grid file can be seen below -where each red dots represent vegetation cover at each cross-shore position. - -.. _fig-veg-inputs: - -.. figure:: /images/vegetation_text_file.jpeg - :alt: vegetation input format - :width: 200px - :align: center - - File format for a 1D AeoLis vegetation grid. Each red dot is the vegetation density at a specific location in the computational grid. - -mass.txt --------- - -The mass.txt file allows users to specify variations in grain size distribution in both -horizontal and vertical directions. If the grain size distribution is constant throughout -the model domain, multifraction sediment transport is possilbe without this file. The file contains -the mass of each sediment fraction in each grid cell and bed layer. The file is formatted such that each -row corresponds to a specific location in the computational domain and the columns are grouped -by bed layers and each individual column represents a single sediment fraction present in the model -domain. An infinite number of sediment fractions can be defined in the model; however, it should be -noted the more sediment fractions present the longer the simulation time and larger the output files. - -In a 1D case, the text file will have dimensions of number of cross-shore locations (x) by number -of sediment fractions times the number of bed layers. For example if you have 200 cross-shore positions -in your model domain and 4 different sediment fractions with 3 bed layers, your mass.txt file -will contain a matrix of 200 rows by 12 columns. An example of a 1D mass.txt file can be seen below -where each red dot represents a sediment fraction mass at a specific location in the model domain. - -.. _fig-mass-inputs-1D: - -.. figure:: /images/mass_text_file_graphic.jpeg - :alt: mass file format 1D - :width: 550px - :align: center - - File format for a 1D AeoLis mass for spatially variable grain size distributions. Each red dot is the mass for each sediment fraction - at each location in the computational grid (x, y, bed layer). - -In a 2D case, the mass.txt file will have dimensions of number of cross-shore positions (x) -times the number of alongshore positions (x) by number of sediment fractions times the number of -bed layers. The file will be formatted such that the columns are grouped by bed layer with all available -sediment fractions present in each bed layer and rows are grouped by alongshore position with all -cross-shore prositions given for each alongshore position. An visual example of a 2D mass.txt input -file for AeoLis can be seen below. - -.. _fig-mass-inputs-2D: - -.. figure:: /images/mass_text_file_2D.jpeg - :alt: mass file format 2D - :width: 550px - :align: center - - File format for a 2D AeoLis mass file for spatially variable grain size distributions. Each red dot is the mass for each sediment fraction - at each location in the computational grid (x, y, bed layer). - -wind.txt --------- - -The wind.txt file provides the model with wind boundary conditions and is formatted similar to -the tide.txt and wave.txt files. The first column is time in seconds from -start, the second column is wind speed, and the third column is wind direction. The wind directions -can be specified in either nautical or cartesian convention (specified in aeolis.txt with keyword: wind_convention). -The format of this file can be seen below were each of the red dots represents a data value of time, wind speed, -or wind direction. As AeoLiS is an aeolian sediment transport model, the wind boundary conditions are of particular -importance. - -.. _fig-wind-inputs: - -.. figure:: /images/wind_text_file_graphic.jpeg - :alt: wind input format - :width: 300px - :align: center - - File format for wind boundary conditions file for AeoLis input. - -tide.txt --------- - -The tide.txt file contains the water elevation data for the duration of the -simulation. It is formatted such that the first column is time in seconds and -the second column is the water elevation data at each time step. An example of -the file format can be seen below where each red dot represents a data value for -time or water elevation. - -.. _fig-tide-inputs: - -.. figure:: /images/tide_text_file.jpeg - :alt: tide input format - :width: 300px - :align: center - - File format for the water elevation conditions file for AeoLis input. - -wave.txt --------- - -The wave.txt file provides the model with wave data used in AeoLiS for runup calculations. -The file is formatted similar to tide.txt but has three columns instead of two. -Here, the first column is time in seconds, the second column is wave height, -and the third column is the wave period. The format of this file can be seen -below where each red dot represents -a data value. - -.. _fig-wave-inputs: - -.. figure:: /images/wave_text_file_graphic.jpeg - :alt: wave input format - :width: 300px - :align: center - - File format for the wave conditions file for AeoLis input. - -meteo.txt ---------- - -The meteo.txt file contains meteorological data used to simulate surface moisture in the model domain (see Simulation of surface moisture -in Model description on for surface moisture implementation in AeoLiS). This file is formatted similar to the other environmental boundary -condition files (wind, wave, and tide) such that it contains a time series of environmental data read into AeoLiS through keyword specification. -The keywords required to process surface moisture with evaporation and infiltration are process_moist = True, method_moist_process = surf_moisture, -th_moisture = True, and meteo_file = meteo.txt (or name of file containing meteorological data). An example of the meteo.txt file can be seen in the -figure below where each red dot represents a time series data value. The first column contains time (s), the second column is temperature (degrees C), -the thrid column is precipitation (mm/hr), the fourth column is relative humidity (%), the fifth column is global radiation (MJ/$m^2$/day), and the sixth -column is air pressure (kPa). - -.. _fig-meteo-inputs: - -.. figure:: /images/meteo_file_format.jpeg - :alt: meteo file format - :width: 550px - :align: center - - File format for meteorological data used to simulate surface moisture in AeoLiS where each red dot represents a time series value. diff --git a/docs/user/installation.rst b/docs/user/installation.rst index 9d226ec6..67639e02 100644 --- a/docs/user/installation.rst +++ b/docs/user/installation.rst @@ -13,7 +13,7 @@ Requirements - netCDF4 Dependencies -"""""""""""" +------------ - docopt - typer @@ -64,4 +64,4 @@ Example from command line: .. note:: - Model parameters and other configuration is passed in a `params.txt`. See the :ref:`default settings` for more details. + Model parameters and other configuration is passed in a `params.txt`. See the :ref:`default-settings` for more details. diff --git a/docs/user/introduction.rst b/docs/user/introduction.rst new file mode 100644 index 00000000..5f978264 --- /dev/null +++ b/docs/user/introduction.rst @@ -0,0 +1,106 @@ +.. _introduction: + +Introduction +============ +AeoLiS is a process-based model for simulating aeolian sediment transport and morphological evolution in situations where supply-limiting factors are important, +like in coastal environments. Supply-limitations currently supported are soil moisture contents, sediment sorting and armouring, bed slope effects, air humidity and roughness elements. AeoLiS includes a dynamic vegetation module that simulates the interaction between sediment transport and vegetation dynamics that allow for aeolian landform simulations. + +Model overview +-------------- + +.. _fig-aeolis-overview: + +.. raw:: html + +
+ + + + Avalanching + + +

+ Overview of the AeoLiS model - Model structure and the simulated processes. +

+
+ +Applicability and limitations +----------------------------- + +AeoLiS publications +---------------------- + +2024 +^^^^ +Van Westen, B., De Vries, S., Cohn, N., Van IJzendoorn, C., Strypsteen, G., Hallin, C. (2024). AeoLiS: Numerical modelling of coastal dunes and aeolian landform development for real-world applications, Environmental Modelling & Software, 179, 106093, Doi: https://doi.org/10.1016/j.envsoft.2024.106093. + +Strypsteen, G., de Vries, S., Bonte, D., Homberger, J.M., Hallin, C., Rauwoens, P. (2024). Planted vegetation on a sandy beach regulates maximum size of corresponding dune evolution. Coastal Engineering (preprint under review). Doi: http://dx.doi.org/10.2139/ssrn.4872614 + +Heminway, S.S., Cohn, N., Davis, E.H., White, A., Hein, C.J., Zinnert, J.C., 2024. Exploring Ecological, Morphological, and Environmental Controls on Coastal Foredune Evolution at Annual Scales Using a Process-Based Model. Sustainability, 16, 3460. https://doi.org/10.3390/su16083460 + +Orie, C., Cohn, N., Farthing, M., Dutta, S., Trautz, A., 2024. Examination of Analytical Shear Stress Predictions for Coastal Dune Evolution. EGUsphere, https://doi.org/10.5194/egusphere-2024-855. Preprint under review for ESurf + +van Westen, B., Luijendijk, A.P., de Vries, S., Cohn, N., Leijnse, T.W., de Schipper, M.A., 2024. Predicting marine and aeolian contributions to the sand engine’s evolution using coupled modelling. Coast. Eng. 188, 104444. + +McFall, B.C., Young, D.L., Whitmeyer, S.J., Buscombe, D., Cohn, N., Stasiewicz, J.B., Skaden, J.E., Walker, B.M., Stever, S.N., 2024. SandSnap: Measuring and mapping beach grain size using crowd-sourced smartphone images, Coastal Engineering, Volume 192, 104554, https://doi.org/10.1016/j.coastaleng.2024.104554. + +2023 +^^^^ +Dickey, J., Wengrove, M., Cohn, N., Ruggiero, P. & Hacker, S.D., 2023. Observations and modeling of shear stress reduction and sediment flux within sparse dune grass canopies on managed coastal dunes. Earth Surface Processes and Landforms, 48(5), 907–922. Available from: https://doi.org/10.1002/esp.5526 + +Hallin, C., van IJzendoorn, C., Homberger, J.M., de Vries, S., 2023. Simulating surface soil moisture on sandy beaches. Coast. Eng. 185, 104376. + +Hallin, C., van IJzendoorn, C., Skaden, J., de Vries, S., 2023. Evaluation of threshold-based models to account for surface moisture in meso-scale aeolian sediment transport simulations. In: The Proceedings of the Coastal Sediments Conference. pp. 670–683. + +Heminway, S.S., Davis, E.H., Cohn, N., Skaden, J., Anderson, D., Hein, C.J., 2023. Modeled Changes in Foredune Morphology Influenced by Variable Storm Intensity and Sea-Level Rise. In Proceedings of the Coastal Sediments 2023; World Scientific: New Orleans, LA, USA, April 2023; pp. 684–697. + +Hovenga, P., Ruggiero, P., Itzkin, M., Jay, K.R., Moore, L., Hacker, H.D., 2023. Quantifying the relative influence of coastal foredune growth factors on the U.S. Mid-Atlantic Coast using field observations and the process-based numerical model Windsurf, Coastal Engineering, Volume 181, 104272, https://doi.org/10.1016/j.coastaleng.2022.104272. + +Skaden, J., Cohn, N., Goldstein, E., Dickhudt, P., Conery, I., Buscombe, D., 2023. Impact of alongshore and cross-shore variability in surface grain size on sediment supply to dunes. In Coastal Sediments 2023: The Proceedings of the Coastal Sediments 2023 (pp. 720-731). + +van IJzendoorn, C.O., Hallin, C., Reniers, A.J.H.M., de Vries, S., 2023. Modeling multi-fraction coastal aeolian sediment transport with horizontal and vertical grain-size variability. J. Geophys. Res: Earth Surf. 128 (7), e2023JF007155. + +van Westen, B., Leijnse, T., de Schipper, M., Cohn, N., & Luijendijk, A. (2023). Integrated modelling of coastal landforms. In Coastal Sediments 2023: The Proceedings of the Coastal Sediments 2023 (pp. 760-771). + +Zhu, L., Chen, Q., Cohn, N., Johnson, C., Johnson, B., 2023. Modeling long-term evolution of a beach-dune system: Caminada Headlands, Louisiana. In Coastal Sediments 2023: The Proceedings of the Coastal Sediments 2023 (pp. 782-796). + +2022 +^^^^ +Itzkin, M., Moore, L.J., Ruggiero, P., Hovenga, P.A., Hacker, S.D., 2022. Combining process-based and data-driven approaches to forecast beach and dune change, Environmental Modelling & Software, Volume 153, 105404, ISSN 1364-8152, https://doi.org/10.1016/j.envsoft.2022.105404. + +2019 +^^^^ +Cohn, N., Brodie, K., Ruggiero, P., van Westen, B, de Vries, S., 2019. Coastal inlet infilling from aeolian sediment transport. In Coastal Sediments 2019: Proceedings of the 9th International Conference, pp. 1212-1225. + +Cohn, N., Hoonhout, B.M., Goldstein, E.B., De Vries, S., Moore, L.J., Durán Vinent, O., Ruggiero, P., 2019 Exploring Marine and Aeolian Controls on Coastal Foredune Growth Using a Coupled Numerical Model. J. Mar. Sci. Eng., 7, 13. https://doi.org/10.3390/jmse7010013 + +Hoonhout, B., de Vries, S., 2019. Simulating spatiotemporal aeolian sediment supply at a mega nourishment. Coast. Eng. 145, 21–35. + +Ruggiero, P., Cohn, N., Hoonhout, B., Goldstein, E., de Vries, S., Moore, L., Hacker, S. and Vinent, O.D., 2019. Simulating dune evolution on managed coastlines: Exploring management options with the Coastal Recovery from Storms Tool (CReST). Shore & Beach, 87(2), p.36. + +2018 +^^^^ +Wittebrood, M., de Vries, S., Goessen, P., Aarninkhof, S., 2018. Aeolian sediment transport at a man-made dune system; building with nature at the hondsbossche dunes. Coast. Eng. Proceedings (36), 83. + +2017 +^^^^ +Hoonhout, B., de Vries, S., 2017. Aeolian sediment supply at a mega nourishment. Coast. Eng. 123, 11–20. + +2016 +^^^^ +Hoonhout, B.M., de Vries, S., 2016. A process-based model for aeolian sediment transport and spatiotemporal varying sediment availability. J. Geophys. Res: Earth Surf. 121 (8), 1555–1575. + +2014 +^^^^ +de Vries, S., de Vries, J.v.T., Van Rijn, L., Arens, S., 2014. Aeolian sediment transport in supply limited situations. Aeolian Res. 12, 75–85. + + +Student theses +-------------- +Meijer, L.M., 2020. Numerical Modelling of Aeolian Sediment Transport, Vegetation Growth and Blowout Formation in Coastal Dunes. MSc Thesis, Delft University of Technology. + +Pak, T. 2019 Marine and aeolian sediment transport at the Hondsbossche Dunes. MSc Thesis, Delft University of Technology. + +van Manen, M. 2023. Numerical Modeling of Constructed Foredune Blowouts in the Dutch Dunes. MSc Thesis, Delft University of Technology. + +van Westen, B. 2018. Numerical modelling of aeolian coastal landform development. Master’s thesis, Delft University of Technology. diff --git a/docs/user/model.rst b/docs/user/model.rst deleted file mode 100644 index 47e3a783..00000000 --- a/docs/user/model.rst +++ /dev/null @@ -1,752 +0,0 @@ -.. _model: - -Model description -================= - -The model approach of :cite:`deVries2014a` is extended to compute the -spatiotemporal varying sediment availability through simulation of the -process of beach armoring. For this purpose the bed is discretized in -horizontal grid cells and in vertical bed layers (2DV). Moreover, the -grain size distribution is discretized into fractions. This allows the -grain size distribition to vary both horizontally and vertically. A -bed composition module is used to compute the sediment availability -for each sediment fraction individually. This model approach is a -generalization of existing model concepts, like the shear velocity -threshold and critical fetch, and therefore compatible with these -existing concepts.. - -Advection Scheme ----------------- - -A 1D advection scheme is adopted in correspondence with -:cite:`deVries2014a` in which :math:`c` [:math:`\mathrm{kg/m^2}`] is -the instantaneous sediment mass per unit area in transport: - -.. math:: - :label: advection - - \frac{\partial c}{\partial t} + u_z \frac{\partial c}{\partial x} = E - D - -:math:`t` [s] denotes time and :math:`x` [m] denotes the cross-shore -distance from a zero-transport boundary. :math:`E` and :math:`D` -[:math:`\mathrm{kg/m^2/s}`] represent the erosion and deposition terms -and hence combined represent the net entrainment of sediment. Note -that Equation :eq:`advection` differs from Equation 9 in -:cite:`deVries2014a` as they use the saltation height :math:`h` [m] -and the sediment concentration :math:`C_{\mathrm{c}}` -[:math:`\mathrm{kg/m^3}`]. As :math:`h` is not solved for, the -presented model computes the sediment mass per unit area :math:`c = h -C_{\mathrm{c}}` rather than the sediment concentration -:math:`C_{\mathrm{c}}`. For conciseness we still refer to :math:`c` as -the *sediment concentration*. - -The net entrainment is determined based on a balance between the -equilibrium or saturated sediment concentration -:math:`c_{\mathrm{sat}}` [:math:`\mathrm{kg/m^2}`] and the -instantaneous sediment transport concentration :math:`c` and is -maximized by the available sediment in the bed :math:`m_{\mathrm{a}}` -[:math:`\mathrm{kg/m^2}`] according to: - -.. math:: - :label: erodep - - E - D = \min \left ( \frac{\partial m_{\mathrm{a}}}{\partial t} \quad ; \quad \frac{c_{\mathrm{sat}} - c}{T} \right ) - -:math:`T` [s] represents an adaptation time scale that is assumed -to be equal for both erosion and deposition. A time scale of 1 second -is commonly used :cite:`deVries2014a`. - -The saturated sediment concentration :math:`c_{\mathrm{sat}}` is computed using an -empirical sediment transport formulation (e.g. :cite:`Bagnold1937a`): - -.. math:: - :label: equilibrum-transport - - q_{\mathrm{sat}} = \alpha C \frac{\rho_{\mathrm{a}}}{g} \sqrt{\frac{d_{\mathrm{n}}}{D_{\mathrm{n}}}} \left ( u_z - u_{\mathrm{th}} \right )^3 - -in which :math:`q_{\mathrm{sat}}` [kg/m/s] is the equilibrium or -saturated sediment transport rate and represents the sediment -transport capacity. :math:`u_z` [m/s] is the wind velocity at height :math:`z` [m] -and :math:`u_{\mathrm{th}}` the velocity threshold [m/s]. The properties of -the sediment in transport are represented by a series of parameters: -:math:`C` [--] is a parameter to account for the grain size distribution -width, :math:`\rho_{\mathrm{a}}` [:math:`\mathrm{kg/m^3}`] is the density of the -air, :math:`g` [:math:`\mathrm{m/s^2}`] is the gravitational constant, -:math:`d_{\mathrm{n}}` [m] is the nominal grain size and :math:`D_{\mathrm{n}}` -[m] is a reference grain size. :math:`\alpha` is a constant to account for -the conversion of the measured wind velocity to the near-bed shear -velocity following Prandtl-Von Kármán's Law of the Wall: -:math:`\left(\frac{\kappa}{\ln z / z'} \right)^3` in which :math:`z'` [m] is the -height at which the idealized velocity profile reaches zero and -:math:`\kappa` [-] is the Von Kármán constant. - -The equilibrium sediment transport rate :math:`q_{\mathrm{sat}}` is -divided by the wind velocity :math:`u_z` to obtain a mass per unit -area (per unit width): - -.. math:: - :label: equilibrium-conc - - c_{\mathrm{sat}} = \max \left ( 0 \quad ; \quad \alpha C \frac{\rho_{\mathrm{a}}}{g} \sqrt{\frac{d_{n}}{D_{n}}} \frac{\left ( u_z - u_{\mathrm{th}} \right )^3}{u_z} \right ) - -in which :math:`C` [--] is an empirical constant to account for -the grain size distribution width, :math:`\rho_{\mathrm{a}}` -[:math:`\mathrm{kg/m^3}`] is the air density, :math:`g` [:math:`\mathrm{m/s^2}`] is the -gravitational constant, :math:`d_{\mathrm{n}}` [m] is the nominal grain -size, :math:`D_{\mathrm{n}}` [m] is a reference grain size, :math:`u_z` [m/s] is -the wind velocity at height :math:`z` [m] and :math:`\alpha` [--] is a constant to -convert from measured wind velocity to shear velocity. - -Note that at this stage the spatial variations in wind velocity are -not solved for and hence no morphological feedback is included in the -simulation. The model is initially intended to provide accurate -sediment fluxes from the beach to the dunes rather than to simulate -subsequent dune formation. - -Multi-fraction Erosion and Deposition -------------------------------------- - -The formulation for the equilibrium or saturated sediment -concentration :math:`c_{\mathrm{sat}}` (Equation -:eq:`equilibrium-conc`) is capable of dealing with variations in -grain size through the variables :math:`u_{\mathrm{th}}`, -:math:`d_{\mathrm{n}}` and :math:`C` :cite:`Bagnold1937a`. However, -the transport formulation only describes the saturated sediment -concentration assuming a fixed grain size distribution, but does not -define how multiple fractions coexist in transport. If the saturated -sediment concentration formulation would be applied to each fraction -separately and summed up to a total transport, the total sediment -transport would increase with the number of sediment fractions. Since -this is unrealistic behavior the saturated sediment concentration -:math:`c_{\mathrm{sat}}` for the different fractions should be -weighted in order to obtain a realistic total sediment -transport. Equation :eq:`erodep` therefore is modified to include a -weighting factor :math:`\hat{w}_k` in which :math:`k` represents the -sediment fraction index: - -.. math:: - :label: erodep_multi - - E_k - D_k = \min \left ( \frac{\partial m_{\mathrm{a},k}}{\partial t} \quad ; \quad \frac{\hat{w}_k \cdot c_{\mathrm{sat},k} - c_k}{T} \right ) - -It is common to use the grain size distribution in the bed as -weighting factor for the saturated sediment concentration -(e.g. :cite:`Delft3DManual`, section 11.6.4). Using the grain size -distribution at the bed surface as a weighting factor assumes, in case -of erosion, that all sediment at the bed surface is equally exposed to -the wind. - -Using the grain size distribution at the bed surface as weighting -factor in case of deposition would lead to the behavior where -deposition becomes dependent on the bed composition. Alternatively, in -case of deposition, the saturated sediment concentration can be -weighted based on the grain size distribution in the air. Due to the -nature of saltation, in which continuous interaction with the bed -forms the saltation cascade, both the grain size distribution in the -bed and in the air are likely to contribute to the interaction between -sediment fractions. The ratio between both contributions in the model -is determined by a bed interaction parameter :math:`\zeta`. - -The weighting of erosion and deposition of individual fractions is -computed according to: - -.. math:: - :label: weigh - - \begin{align} - \hat{w}_k &= \frac{w_k}{ \sum_{k=1}^{n_{\mathrm{k}}}{w_k} } \\ - \mathrm{where} \quad w_k &= (1 - \zeta) \cdot w^{\mathrm{air}}_k + (1 - \hat{S}_k) \cdot w^{\mathrm{bed}}_k - \end{align} - -in which :math:`k` represents the sediment fraction index, -:math:`n_{\mathrm{k}}` the total number of sediment fractions, :math:`w_k` is the -unnormalized weighting factor for fraction :math:`k`, :math:`\hat{w}_k` is its -normalized counterpart, :math:`w^{\mathrm{air}}_k` and :math:`w^{\mathrm{bed}}_k` -are the weighting factors based on the grain size distribution in the -air and bed respectively and :math:`\hat{S}_k` is the effective sediment -saturation of the air. The weighting factors based on the grain size -distribution in the air and the bed are computed using mass ratios: - -.. math:: - :label: weights - - w^{\mathrm{air}}_k = \frac{c_k}{c_{\mathrm{sat},k}} \quad ; \quad - w^{\mathrm{bed}}_k = \frac{m_{\mathrm{a},k}}{\sum_{k=1}^{n_{\mathrm{k}}}{m_{\mathrm{a},k}}} - -The sum of the ratio :math:`w^{\mathrm{air}}_k` over the fractions -denotes the degree of saturation of the air column for fraction -:math:`k`. The degree of saturation determines if erosion of a fraction may -occur. Also in saturated situations erosion of a sediment fraction can -occur due to an exchange of momentum between sediment fractions, which -is represented by the bed interaction parameter :math:`\zeta`. The effective -degree of saturation is therefore also influenced by the bed -interaction parameter and defined as: - -.. math:: - :label: saturation - - \hat{S}_k = \min \left ( 1 \quad ; \quad (1 - \zeta) \cdot \sum_{k=1}^{n_{\mathrm{k}}} w_k^{\mathrm{air}} \right ) - -When the effective saturation is greater than or equal to unity the -air is (over)saturated and no erosion will occur. The grain size -distribution in the bed is consequently less relevant and the second -term in Equation :eq:`weights` is thus minimized and zero in case -:math:`\zeta = 0`. In case the effective saturation is less than unity erosion -may occur and the grain size distribution of the bed also contributes -to the weighting over the sediment fractions. The weighting factors -for erosion are then composed from both the grain size distribution in -the air and the grain size distribution at the bed surface. Finally, -the resulting weighting factors are normalized to sum to unity over -all fractions (:math:`\hat{w}_k`). - -The composition of weighting factors for erosion is based on the -saturation of the air column. The non-saturated fraction determines -the potential erosion of the bed. Therefore the non-saturated fraction -can be used to scale the grain size distribution in the bed in order -to combine it with the grain size distribution in the air according to -Equation :eq:`weights`. The non-saturated fraction of the air column -that can be used for scaling is therefore :math:`1 - \hat{S}_k`. - -For example, if bed interaction is disabled (:math:`\zeta = 0`) and -the air is 70\% saturated, then the grain size distribution in the air -contributes 70\% to the weighting factors for erosion, while the grain -size distribution in the bed contributes the other 30\% (Figure -:numref:`fig-bed-interaction-parameter`, upper left panel). In case of -(over)saturation the grain size distribution in transport contributes -100\% to the weighting factors and the grain size distribution in the -bed is of no influence. Transport progresses in downwind direction -without interaction with the bed. - -.. _fig-bed-interaction-parameter: - -.. figure:: /images/bed_interaction_parameter.png - :width: 600px - :align: center - - Contributions of the grain size distribution in the bed and in the - air to the weighting factors :math:`\hat{w}_k` for the equilibrium - sediment concentration in Equation :eq:`erodep_multi` for different - values of the bed interaction parameter. - -To allow for bed interaction in saturated situations in which no net -erosion can occur, the bed interaction parameter :math:`\zeta` is used (Figure -:numref:`fig-bed-interaction-parameter`). The bed interaction parameter -can take values between 0.0 and 1.0 in which the weighting factors for -the equilibrium or saturated sediment concentration in an -(over)saturated situation are fully determined by the grain size -distribution in the bed or in the air respectively. A bed interaction -value of 0.2 represents the situation in which the grain size -distribution at the bed surface contributes 20\% to the weighting of -the saturated sediment concentration over the fractions. In the -example situation where the air is 70\% saturated such value for the -bed interaction parameter would lead to weighting factors that are -constituted for :math:`70\% \cdot (100\% - 20\%) = 56\%` based on the grain -size distribution in the air and for the other 44\% based on the grain -size distribution at the bed surface (Figure -:numref:`fig-bed-interaction-parameter`, upper right panel). - -The parameterization of the exchange of momentum between sediment -fractions is an aspect of saltation that is still poorly -understood. Therefore calibration of the bed interaction parameter -:math:`\zeta` is necessary. The model parameters in Equation -:eq:`equilibrium-conc` can be chosen in accordance with the -assumptions underlying multi-fraction sediment transport. :math:`C` should -be set to 1.5 as each individual sediment fraction is well-sorted, -:math:`d_{\mathrm{n}}` should be chosen equal to :math:`D_{\mathrm{n}}` as the -grain size dependency is implemented through -:math:`u_{\mathrm{th}}`. :math:`u_{\mathrm{th}}` typically varies between 1 and 6 -m/s for sand. - -Simulation of Sediment Sorting and Beach Armoring -------------------------------------------------- - -Since the equilibrium or saturated sediment concentration -:math:`c_{\mathrm{sat},k}` is weighted over multiple sediment fractions in -the extended advection model, also the instantaneous sediment -concentration :math:`c_k` is computed for each sediment fraction -individually. Consequently, grain size distributions may vary over the -model domain and in time. These variations are thereby not limited to -the horizontal, but may also vary over the vertical since fine -sediment may be deposited on top of coarse sediment or, reversely, -fines may be eroded from the bed surface leaving coarse sediment to -reside on top of the original mixed sediment. In order to allow the -model to simulate the processes of sediment sorting and beach armoring -the bed is discretized in horizontal grid cells and vertical bed -layers (2DV; Figure :numref:`fig-bedcomposition`). - -The discretization of the bed consists of a minimum of three vertical -bed layers with a constant thickness and an unlimited number of -horizontal grid cells. The top layer is the *bed surface layer* and is -the only layer that interacts with the wind and hence determines the -spatiotemporal varying sediment availability and the contribution of -the grain size distribution in the bed to the weighting of the -saturated sediment concentration. One or more *bed composition layers* -are located underneath the bed surface layer and form the upper part -of the erodible bed. The bottom layer is the *base layer* and contains -an infinite amount of erodible sediment according to the initial grain -size distribution. The base layer cannot be eroded, but can supply -sediment to the other layers. - -.. _fig-bedcomposition: - -.. figure:: /images/bed_composition.png - :align: center - - Schematic of bed composition discretisation and advection - scheme. Horizontal exchange of sediment may occur solely through - the air that interacts with the *bed surface layer*. The detail - presents the simulation of sorting and beach armoring where the bed - surface layer in the upwind grid cell becomes coarser due to - non-uniform erosion over the sediment fractions, while the bed - surface layer in the downwind grid cell becomes finer due to - non-uniform deposition over the sediment fractions. Symbols refer - to Equations :eq:`advection` and :eq:`erodep`. - -Each layer in each grid cell describes a grain size distribution over -a predefined number of sediment fractions (Figure -:numref:`fig-bedcomposition`, detail). Sediment may enter or leave a -grid cell only through the bed surface layer. Since the velocity -threshold depends among others on the grain size, erosion from the bed -surface layer will not be uniform over all sediment fractions, but -will tend to erode fines more easily than coarse sediment (Figure -:numref:`fig-bedcomposition`, detail, upper left panel). If sediment -is eroded from the bed surface layer, the layer is repleted by -sediment from the lower bed composition layers. The repleted sediment -has a different grain size distribution than the sediment eroded from -the bed surface layer. If more fines are removed from the bed surface -layer in a grid cell than repleted, the median grain size -increases. If erosion of fines continues the bed surface layer becomes -increasingly coarse. Deposition of fines or erosion of coarse material -may resume the erosion of fines from the bed. - -In case of deposition the process is similar. Sediment is deposited in -the bed surface layer that then passes its excess sediment to the -lower bed layers (Figure :numref:`fig-bedcomposition`, detail, upper -right panel). If more fines are deposited than passed to the lower bed -layers the bed surface layer becomes increasingly fine. - -Simulation of the Emergence of Non-erodible Roughness Elements --------------------------------------------------------------- - -Sediment sorting may lead to the emergence of non-erodible elements -from the bed. Non-erodible roughness elements may shelter the erodible -bed from wind erosion due to shear partitioning, resulting in a -reduced sediment availability :cite:`Raupach1993`. Therefore the -equation of :cite:`Raupach1993` is implemented according to: - -.. math:: - :label: raupach - - u_{\mathrm{* th, R}} = u_{\mathrm{* th}} \cdot \sqrt{ \left( 1 - m \cdot \sum_{k=k_0}^{n_{\mathrm{k}}}{w_k^{\mathrm{bed}}} \right) \left( 1 + \frac{m \beta}{\sigma} \cdot \sum_{k=k_0}^{n_{\mathrm{k}}}{w_k^{\mathrm{bed}}} \right) } - -in which :math:`\sigma` is the ratio between the frontal area and the -basal area of the roughness elements and :math:`\beta` is the ratio -between the drag coefficients of the roughness elements and the bed -without roughness elements. :math:`m` is a factor to account for the -difference between the mean and maximum shear stress and is usually -chosen 1.0 in wind tunnel experiments and may be lowered to 0.5 for -field applications. The roughness density :math:`\lambda` in the -original equation of :cite:`Raupach1993` is obtained from the mass -fraction in the bed surface layer :math:`w_k^{\mathrm{bed}}` according -to: - -.. math:: - :label: rough - - \lambda = \frac{\sum_{k=k_0}^{n_{\mathrm{k}}}{w_k^{\mathrm{bed}}}}{\sigma} - -in which :math:`k_0` is the index of the smallest non-erodible -sediment fraction in current conditions and :math:`n_{\mathrm{k}}` is the -total number of sediment fractions. It is assumed that the sediment -fractions are ordered by increasing size. Whether a fraction is -erodible depends on the sediment transport capacity. - -Simulation of the Hydraulic Mixing ----------------------------------- - -As sediment sorting due to aeolian processes can lead to armoring of a -beach surface, mixing of the beach surface or erosion of course -material may undo the effects of armoring. To ensure a proper balance -between processes that limit and enhance sediment availability in the -model both types of processes need to be sufficiently represented when -simulating spatiotemporal varying bed surface properties and sediment -availability. - -A typical upwind boundary in coastal environments during onshore winds -is the water line. For aeolian sediment transport the water line is a -zero-transport boundary. In the presence of tides, the intertidal -beach is flooded periodically. Hydraulic processes like wave breaking -mix the bed surface layer of the intertidal beach, break the beach -armoring and thereby influence the availability of sediment. - -In the model the mixing of sediment is simulated by averaging the -sediment distribution over the depth of disturbance -(:math:`\Delta z_{\mathrm{d}}`). The depth of disturbance is linearly -related to the breaker height (e.g. :cite:`King1951`, :cite:`Williams1971`, :cite:`Masselink2007`). :cite:`Masselink2007` proposes an empirical factor -:math:`f_{\Delta z_{\mathrm{d}}}` [-] that relates the depth of disturbance -directly to the local breaker height according to: - -.. math:: - :label: disturbance_depth - - \Delta z_{\mathrm{d}} = f_{\Delta z_{\mathrm{d}}} \cdot \min \left ( H \quad ; \quad \gamma \cdot d \right ) - -in which the offshore wave height :math:`H` [m] is taken as the -local wave height maximized by a maximum wave height over depth ratio -:math:`\gamma` [-]. :math:`d` [m] is the water depth that is provided to the model -through an input time series of water levels. Typical values for -:math:`f_{\Delta z_{\mathrm{d}}}` are 0.05 to 0.4 and 0.5 for :math:`\gamma`. - -Simulation of surface moisture ------------------------------- - -Wave runup, capillary rise from the beach groundwater, and precipitation periodically wet the intertidal beach -temporally increasing the shear velocity threshold ( -:numref:`fig-moisture-processes`). Infiltration and -evaporation subsequently dry the beach. - -.. _fig-moisture-processes: - -.. figure:: /images/moisture_processes.jpg - :align: center - - Illustration of processes influencing the volumetric moisture content :math:`\theta` at the beach surface. - -The structure of the surface moisture module and included processes are schematized in :numref:`fig-moisture-scheme`. -The resulting surface moisture is obtained by selecting the largest of the moisture contents computed -with the water balance approach (right column) and due to capillary rise from the groundwater table (left column). -The method is based on the assumption that the flow of soil water is small compared to the flow of groundwater -and that the beach groundwater dynamics primarily is controlled by the water level and wave action at -the seaward boundary :cite:`Raubenheimer1999`, :cite:`Schmutz2014`. Thus, there is no feedback between the processes -in the right column of :numref:`fig-moisture-scheme` and the groundwater dynamics described in the left column. - -.. _fig-moisture-scheme: - -.. figure:: /images/moisture_scheme.jpg - :width: 600px - :align: center - - Implementation of surface moisture processes in the AeoLiS. - - -Runup and wave setup -^^^^^^^^^^^^^^^^^^^^ -The runup height and wave setup are computed using the Stockdon formulas :cite:`Stockdon2006`. -Their parameterization differs depending on the dynamic beach steepness expressed through the Irribaren number: - -.. math:: - :label: irribaren - - \xi = \tan \beta /\sqrt {{H_0}/{L_0}} - -where :math:`{H_0}` is the significant offshore wave height, :math:`{L_0}` is the deepwater wavelength, and :math:`{\tan \beta}` is the foreshore slope. - -For dissipative conditions, :math:`{\xi}` < 0.3, the runup, :math:`{R_2}`, is parameterized as, - -.. math:: - :label: runup_dissipative - - {R_2} = 0.043\sqrt {{H_0}{L_0}} - -and wave setup: - -.. math:: - :label: setup_dissipative - - < \eta > = 0.02\sqrt {{H_0}{L_0}} - -For :math:`{\xi}` > 0.3, runup is paramterized as, - -.. math:: - :label: runup - - {R_2} = 1.1\left( {0.35\beta \sqrt {{H_0}{L_0}} + \frac{{\sqrt {{H_0}{L_0}\left( {0.563{\beta ^2} + 0.004} \right)} }}{2}} \right) - -and wave setup: - -.. math:: - :label: setup - - < \eta > = 0.35\xi - - -Tide- and wave-induced groundwater variations -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -Groundwater under sandy beaches can be considered as shallow aquifers, with only horizontal groundwater -flow so that the pressure distribution is hydrostatic :cite:`Baird1998,Brakenhoff2019,Nielsen1990,Raubenheimer1999`. -The cross-shore flow dominates temporal variations of groundwater levels. Alongshore, groundwater table variations are typically small :cite:`Schmutz2014`. -Although the surface moisture model can be extended over a two-dimensional grid, the groundwater simulations are performed for 1D transects cross-shore -to avoid numerical instabilities at the seaward boundary and reduce computational time. - -The beach aquifers is schematised as a sandy body, with saturated hydraulic conductivity, :math:`K`, and effective porosity, :math:`{n_e}`. -The aquifer is assumed to rest on an impermeable surface, where :math:`D` is the aquifer depth. -The groundwater elevation relative to the mean sea level (MSL) is denoted :math:`\eta`, and the shore-perpendicular x-axis is positive landwards, -with an arbitrary starting point. The sand is assumed to be homogenous and isotropic. In this context, isotropy implies that hydraulic conductivity -is independent of flow direction. - -The horizontal groundwater discharge per unit area, :math:`u`, is then governed by Darcy’s law, - -.. math:: - :label: gw-discharge - - u = - K\frac{{\partial \eta }}{{\partial x}} - -and the continuity equation (see e.g., :cite:`Nielsen2009`), - -.. math:: - :label: gw-continuity - - \frac{{\partial \eta }}{{\partial t}} = - \frac{1}{{{n_e}}}\frac{\partial }{{\partial x}}((D + \eta )u) - -where :math:`t` is time. - -The groundwater overheight due to runup, :math:`{U_l}`, is computed by :cite:`Kang1994,Nielsen1988`, - -.. math:: - :label: gw-runup - - {U_l} = \left\{ \begin{gathered}{C_l}Kf(x)\,\,\,\,{\text{if }}{x_S} \leqslant x \leqslant {x_R} \hfill \\0,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,{\text{if }}x > {x_R} \hfill \\\end{gathered} \right. - -where :math:`{C_l}` is an infiltration coefficient (-), and :math:`f(x)` is a function of :math:`x` ranging from 0 to 1. :math:`{x_S}` is -the horizontal location of the sum of the still water level and wave setup, and :math:`{x_R}` is the horizontal location of the runup limit: - -.. math:: - :label: gw-runup-distribution - - f(x) = \left\{ \begin{gathered} - \frac{{x - {x_s}}}{{\frac{2}{3}\left( {{x_{ru}} - {x_s}} \right)}}\,\,\,\,\,\,\,\,\,\,\,\,\,if\,{x_s} < x \leqslant {x_s} + \frac{2}{3}\left( {{x_{ru}} - {x_s}} \right)\, \hfill \\ - 3 - \frac{{x - {x_s}}}{{\frac{1}{3}\left( {{x_{ru}} - {x_s}} \right)}}\,\,\,\,\,if\,{x_s} + \frac{2}{3}\left( {{x_{ru}} - {x_s}} \right)\, < x < {x_{ru}} \hfill \\ - \end{gathered} \right. - -Substitution of :math:`u` (Equation :eq:`gw-discharge`) in the continuity equation (Equation :eq:`gw-continuity`) with the addition of :math:`{U_l}/{n_e}` gives the nonlinear Boussinesq equation: - -.. math:: - :label: boussinesq - - \frac{{\partial \eta }}{{\partial t}} = \frac{K}{{{n_e}}}\frac{\partial }{{\partial x}}\left( {(D + \eta )\frac{{\partial \eta }}{{\partial x}}} \right) + \frac{{{U_l}}}{{{n_e}}} - - -Capillary rise -^^^^^^^^^^^^^^ -Soil water retention (SWR) functions describe the surface moisture due to capillary transport -of water from the groundwater table :cite:`VanGenuchten1980`: - -.. math:: - :label: vangenuchten - - \theta (h) = {\theta _r} + \frac{{{\theta _s} - {\theta _r}}}{{{{\left[ {1 + {{\left| {\alpha h} \right|}^n}} \right]}^m}}} - - -where :math:`h` is the groundwater table depth, :math:`\alpha` and :math:`n` are fitting parameters -related to the air entry suction and the pore size distribution. The parameter :math:`m` is commonly -parameterised as :math:`m = 1 - 1/n`. - -The resulting surface moisture is computed for both drying and -wetting conditions, i.e., including the -effect of hysteresis. The moisture contents computed with drying and wetting SWR functions are denoted :math:`{\theta ^d}(h)` and :math:`{\theta ^w}(h)`, respectively. -When moving between wetting and drying conditions, the soil moisture content follows an intermediate -retention curve called a scanning curve. The drying scanning curves are scaled from the main -drying curve and wetting scanning curves from the main wetting curve. The drying scanning curve is then obtained from :cite:`Mualem1974`: - -.. math:: - :label: mualem-drying - - {\theta ^d}({h_\Delta },h) = {\theta ^w}(h) + \frac{{\left[ {{\theta ^w}({h_\Delta }) - {\theta ^w}(h)} \right]}}{{\left[ {{\theta _s} - {\theta ^w}(h)} \right]}}\left[ {{\theta ^d}(h) - {\theta ^w}(h)} \right] - -where :math:`{h_\Delta}` is the groundwater table depth at the reversal on the wetting curve. - -The wetting scanning curve is obtained from :cite:`Mualem1974`: - -.. math:: - :label: mualem-wetting - - {\theta ^w}({h_\Delta },h) = {\theta ^w}(h) + \frac{{\left[ {{\theta _s} - {\theta ^w}(h)} \right]}}{{\left[ {{\theta _s} - {\theta ^w}({h_\Delta })} \right]}}\left[ {{\theta ^d}({h_\Delta }) - {\theta ^w}({h_\Delta })} \right] - -where :math:`{h_\Delta}` is the groundwater table depth at the reversal on the drying curve. - -Infiltration -^^^^^^^^^^^^ -Infiltration is accounted for by assuming that excess water infiltrates until the moisture content reaches -field capacity, :math:`{\theta_fc}`. The moisture content at field capacity is the maximum amount of water -that the unsaturated zone of soil can hold against the pull of gravity. For sandy soils, -the matric potential at this soil moisture condition is around - 1/10 bar. In equilibrium, -this potential would be exerted on the soil capillaries at the soil surface when the water -table is about 100 cm below the soil surface, :math:`{\theta _{fc}} = {\theta ^d}(100)`. - -Infiltration is represented by an -exponential decay function that is governed by a drying time scale -:math:`T_{\mathrm{dry}}`. Exploratory model runs of the unsaturated soil with the HYDRUS1D -:cite:`Simunek1998` hydrology model show that the increase of the -volumetric water content to saturation is almost instantaneous with -rising tide. The drying of the beach surface through infiltration -shows an exponential decay. In order to capture this behavior the -volumetric water content is implemented according to: - -.. math:: - :label: infiltration - - \frac{{d\theta }}{{dt}} = \left( {\theta - {\theta _{fc}}} \right)\left( {{e^{ - \ln (2)\frac{{dt}}{{{T_{dry}}}}}}} \right) - -An alternative formulation is used for simulations that does not account for ground water and SWR processes, - -.. math:: - :label: apx-drying - - p_{\mathrm{V}}^{n+1} = \left\{ - \begin{array}{ll} - p & \mathrm{if} ~ \eta > z_{\mathrm{b}} \\ - p_{\mathrm{V}}^n \cdot e^{\frac{\log \left( 0.5 \right)}{T_{\mathrm{dry}}} \cdot \Delta t^n} - E_{\mathrm{v}} \cdot \frac{\Delta t^n}{\Delta z} & \mathrm{if} ~ \eta \leq z_{\mathrm{b}} \\ - \end{array} - \right. - -where :math:`\eta` [m+MSL] is the instantaneous water level, -:math:`z_{\mathrm{b}}` [m+MSL] is the local bed elevation, -:math:`p_{\mathrm{V}}^n` [-] is the volumetric water content in time step -:math:`n`, :math:`\Delta t^n` [s] is the model time step and :math:`\Delta z` is the bed -composition layer thickness. :math:`T_{\mathrm{dry}}` [s] is the beach -drying time scale, defined as the time in which the beach moisture -content halves. - -Precipitation and evaporation -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -A water balance approach accounts for the effect of precipitation and evaporation, - -.. math:: - :label: precipitation - - \frac{{d\theta }}{{dt}} = \frac{{\left( {P - E} \right)\,}}{{\Delta z}}\, - -where :math:`P` is the precipitation, :math:`E` is the evaporation, and :math:`\Delta z` is the thickness of the surface layer. - -Evaporation is simulated using an adapted version -of the Penman-Monteith equation :cite:`Shuttleworth1993` that is -governed by meteorological time series of solar radiation, temperature -and humidity. - -:math:`E_{\mathrm{v}}` [m/s] is the evaporation rate that is -implemented through an adapted version of the Penman equation -:cite:`Shuttleworth1993`: - -.. math:: - :label: apx-penman - - E_{\mathrm{v}} = \frac{m_{\mathrm{v}} \cdot R_{\mathrm{n}} + 6.43 \cdot \gamma_{\mathrm{v}} \cdot (1 + 0.536 \cdot u_2) \cdot \delta e} - {\lambda_{\mathrm{v}} \cdot (m_{\mathrm{v}} + \gamma_{\mathrm{v}})} \cdot 9 \cdot 10^7 - -where :math:`m_{\mathrm{v}}` [kPa/K] is the slope of the -saturation vapor pressure curve, :math:`R_{\mathrm{n}}` -[:math:`\mathrm{MJ/m^2/day}`] is the net radiance, :math:`\gamma_{\mathrm{v}}` -[kPa/K] is the psychrometric constant, :math:`u_2` [m/s] is the wind speed -at 2 m above the bed, :math:`\delta e` [kPa] is the vapor pressure deficit -(related to the relative humidity) and :math:`\lambda_{\mathrm{v}}` [MJ/kg] -is the latent heat vaporization. To obtain an evaporation rate in -[m/s], the original formulation is multiplied by :math:`9 \cdot 10^7`. - - -Shear velocity threshold ------------------------- - -The shear velocity threshold represents the influence of bed surface -properties in the saturated sediment transport equation. The shear -velocity threshold is computed for each grid cell and sediment -fraction separately based on local bed surface properties, like -moisture, roughness elements and salt content. For each bed surface -property supported by the model a factor is computed to increase the -initial shear velocity threshold: - -.. math:: - :label: apx-shearvelocity - - u_{\mathrm{* th}} = - f_{u_{\mathrm{* th}}, \mathrm{M}} \cdot - f_{u_{\mathrm{* th}}, \mathrm{R}} \cdot - f_{u_{\mathrm{* th}}, \mathrm{S}} \cdot - u_{\mathrm{* th, 0}} - -The initial shear velocity threshold :math:`u_{\mathrm{* th, 0}}` [m/s] is -computed based on the grain size following :cite:`Bagnold1937b`: - -.. math:: - :label: shear - - u_{\mathrm{* th, 0}} = A \sqrt{ \frac{\rho_{\mathrm{p}} - \rho_{\mathrm{a}}}{\rho_{\mathrm{a}}} \cdot g \cdot d_{\mathrm{n}}} - -where :math:`A` [-] is an empirical constant, :math:`\rho_{\mathrm{p}}` -[:math:`\mathrm{kg/m^3}`] is the grain density, :math:`\rho_{\mathrm{a}}` -[:math:`\mathrm{kg/m^3}`] is the air density, :math:`g` [:math:`\mathrm{m/s^2}`] is the -gravitational constant and :math:`d_{\mathrm{n}}` [m] is the nominal grain -size of the sediment fraction. - -Moisture content -^^^^^^^^^^^^^^^^ - -The shear velocity threshold is updated based on moisture content -following :cite:`Belly1964`: - -.. math:: - :label: apx-moist - - f_{u_{\mathrm{* th}}, \mathrm{M}} = \max(1 \quad ; \quad 1.8 + 0.6 \cdot \log(p_{\mathrm{g}})) - -where :math:`f_{u_{\mathrm{* th},M}}` [-] is a factor in Equation :eq:`apx-shearvelocity`, :math:`p_{\mathrm{g}}` [-] is the geotechnical -mass content of water, which is the percentage of water compared to -the dry mass. The geotechnical mass content relates to the volumetric -water content :math:`p_{\mathrm{V}}` [-] according to: - -.. math:: - :label: vol-water - - p_{\mathrm{g}} = \frac{p_{\mathrm{V}} \cdot \rho_{\mathrm{w}}}{\rho_{\mathrm{p}} \cdot (1 - p)} - -where :math:`\rho_{\mathrm{w}}` [:math:`\mathrm{kg/m^3}`] and -:math:`\rho_{\mathrm{p}}` [:math:`\mathrm{kg/m^3}`] are the water and particle -density respectively and :math:`p` [-] is the porosity. Values for -:math:`p_{\mathrm{g}}` smaller than 0.005 do not affect the shear velocity -threshold :cite:`Pye1990`. Values larger than 0.064 (or 10\% -volumetric content) cease transport :cite:`DelgadoFernandez2010`, -which is implemented as an infinite shear velocity threshold. - - -Roughness elements -^^^^^^^^^^^^^^^^^^ - -The shear velocity threshold is updated based on the presence of -roughness elements following :cite:`Raupach1993`: - -.. math:: - :label: shear-rough - - f_{u_{\mathrm{* th},R}} = \sqrt{(1 - m \cdot \sum_{k=k_0}^{n_k}{\hat{w}_k^{\mathrm{bed}}}) - (1 + \frac{m \beta}{\sigma} \cdot \sum_{k=k_0}^{n_k}{\hat{w}_k^{\mathrm{bed}}})} - -by assuming: - -.. math:: - :label: lambda-rough - - \lambda = \frac{\sum_{k=k_0}^{n_k}{\hat{w}_k^{\mathrm{bed}}}}{\sigma} - -where :math:`f_{u_{\mathrm{* th},R}}` [-] is a factor in Equation -:eq:`apx-shearvelocity`, :math:`k_0` is the sediment fraction index of -the smallest non-erodible fraction in current conditions and :math:`n_k` is -the number of sediment fractions defined. The implementation is -discussed in detail in section \ref{sec:roughness}. - -Salt content -^^^^^^^^^^^^ - -The shear velocity threshold is updated based on salt content -following :cite:`Nickling1981`: - -.. math:: - :label: salt-rough - - f_{u_{\mathrm{* th}},S} = 1.03 \cdot \exp(0.1027 \cdot p_{\mathrm{s}}) - -where :math:`f_{u_{\mathrm{* th},S}}` [-] is a factor in Equation -:eq:`apx-shearvelocity` and :math:`p_{\mathrm{s}}` [-] is the salt -content [mg/g]. Currently, no model is implemented that predicts the -instantaneous salt content. The spatial varying salt content needs to -be specified by the user, for example through the BMI interface. - diff --git a/docs/user/model_description.rst b/docs/user/model_description.rst new file mode 100644 index 00000000..e677ea8f --- /dev/null +++ b/docs/user/model_description.rst @@ -0,0 +1,1427 @@ +.. _model_description: + +Model description +================= + +Quick Overview +-------------- + +This section provides a summary of the main processes, equations, and configuration parameters in AeoLiS. For more information, refer to the detailed sections linked in the text (or scroll further down this page). + +For guidance on setting up an AeoLiS model, see the :ref:`model in- & output guide `. The main configuration file (default: ``aeolis.txt``) is the basis of the model setup and contains all parameter settings and process-flags, and serves as the central reference for other input files. The computational domain is constructed using x- and y-coordinates (``xgrid_file``, ``ygrid_file``) alongside the initial bed elevation (``bed_file``). External environmental forcing is defined through continuous time series of wind (``wind_file``), water levels (``tide_file``), and waves (``wave_file``). + +The simulation advances sequentially through time steps, repeating all activated processes and continuously updating the morphological model state. The simulation duration runs from a defined start time (``tstart``) to an end time (``tstop``), both specified in seconds relative to a designated reference date (``refdate``). A typical internal time step (``dt``) is 3600 seconds (1 hour). As the model progresses, it exports user-defined variables (``output_vars``) to a NetCDF file (default: ``aeolis.nc``, defined by ``output_file``) at customized intervals (``output_times``). + +.. note:: + In the AeoLiS source code, all model parameters are stored in two dictionaries for BMI-compatibility. All parameters defined on the computational domain, i.e., with dimension (``ny``,``nx``), are stored in the ``s``-dictionary (e.g., ``s['x']``), while all single parameters are stored in the ``p``-dictionary (e.g., ``p['dt']``). + +Sediment Transport +^^^^^^^^^^^^^^^^^^^ +For detailed information, see the :ref:`sediment transport section `. + +Aeolian sediment transport is the core of the AeoLiS model. It is computed using a two-dimensional advection scheme, simplified here for one-dimensional transport of a single sediment fraction: + +.. math:: + :label: advection_overview + + \frac{\partial c}{\partial t} + u_{\mathrm{sed}} \frac{\partial c}{\partial x} = E - D = \min \left ( \frac{\partial m_{\mathrm{a}}}{\partial t} \quad ; \quad \frac{c_{\mathrm{sat}} - c}{T} \right ) + +The right-hand side of the advection equation represents the net entrainment (``pickup``); the difference between erosion :math:`E` and deposition :math:`D` [:math:`\mathrm{kg/m^2/s}`]. The saturated sediment concentration :math:`c_{\mathrm{sat}}` (``Cu``) [:math:`\mathrm{kg/m^2}`] defines the transport capacity, while :math:`c` (``Ct``) [:math:`\mathrm{kg/m^2}`] is the instantaneous concentration in the air. Transport is activated in the configuration file using ``process_transport``. This net entrainment is governed by the adaptation timescale :math:`T` (``T``) [:math:`\mathrm{s}`], which determines how quickly the concentration reaches equilibrium. To allow sediment to actually erode from or deposit to the bed, ``process_bedupdate`` must be enabled. + +Solving this advection equation is one of the most computationally expensive parts of the model. You can choose different numerical approaches using the ``solver`` keyword. For detailed guidance on these options, see the :ref:`solver guide `. + +Several methods are available to compute the saturated sediment concentration (``method_transport``). The equation by :cite:`Bagnold1937a` (``bagnold``) is the default: + +.. math:: + :label: bagnold_overview + + c_{\mathrm{sat}} = \max \left ( 0 \quad ; \quad C \frac{\rho_{\mathrm{a}}}{g} \sqrt{\frac{d_{n}}{D_{n}}} \frac{\left ( u_* - u_{\mathrm{th}} \right )^3}{u_{\mathrm{sed}}} \right ) + +The sediment velocity :math:`u_{\mathrm{sed}}` (``u``, ``us``, ``un``) [:math:`\mathrm{m/s}`] is determined by the ``method_grainspeed`` parameter. It can either be set equal to the governing wind speed (``windspeed``) or calculated using a saltation model (e.g., ``duran``). For more information on grain speed computations, see the :ref:`sediment velocity ` section. + +.. note:: + For all vector variables (like ``uw``, ``ustar``, ``tau``, ``u``, ``q``), the subscripts ``s`` and ``n`` (e.g., ``uws``, ``uwn``) indicate the cross-shore and longshore directions, respectively, and the name without a subscript represents the overall magnitude. + +AeoLiS supports the inclusion of multiple sediment fractions (``grain_size``, ``grain_dist``) across multiple vertical layers (``nlayers``). This allows for the simulation of sediment sorting, mixing, and armoring. More details are provided in the :ref:`multi-fraction sediment transport ` section. + +Enabling ``process_bedinteraction`` incorporates a bed interaction parameter into the advection equation. For more information, see the :ref:`bed interaction approach ` section. + +Wind and Shear Velocity +^^^^^^^^^^^^^^^^^^^^^^^^ +Detailed section: :ref:`wind-shear-velocity` + +The shear velocity :math:`u_*` (``ustar``) [:math:`\mathrm{m/s}`] acts as the primary driver of sediment transport. It is initially computed for a flat bed using the Prandtl-Von Kármán Law of the Wall, based on the wind velocity :math:`u_w` (``uw``) [:math:`\mathrm{m/s}`] at a given elevation. Wind conditions are provided via the ``wind_file`` and the computation is enabled via ``process_wind``. + +.. math:: + :label: lawofwall_overview + + u_* = \frac{u_w}{\ln \left( \frac{z}{z_0} \right)}\kappa + +Topography can steer the wind, causing perturbations in the shear stress :math:`\tau` (``tau``) [:math:`\mathrm{N/m^2}`], where :math:`\tau = \rho_a u_*^2`: + +.. math:: + :label: topo_steering_overview + + \vec{\tau}(x,y) = \vec{\tau}_{0} + |\vec{\tau}_{0}|\delta\vec{\tau}(x,y) + +This steering process can be activated using the ``process_shear`` keyword. Different methods are available to compute these shear perturbations, which can be selected through ``method_shear``. More information on these computations is given in the :ref:`topographic steering section `. + +The presence of vegetation can also reduce the effective shear stress. For more information, see the :ref:`vegetation documentation `. + +Shear Velocity Threshold +^^^^^^^^^^^^^^^^^^^^^^^^^ +Detailed section: :ref:`shear-velocity-threshold` + +Where shear velocity drives transport, the threshold velocity :math:`u_{\mathrm{th}}` (``uth``) [:math:`\mathrm{m/s}`] serves as a supply-limiter. It acts as a collective parameter for all supply-limiting processes, scaling the base threshold :math:`u_{\mathrm{*th,0}}` (``uth0``) [:math:`\mathrm{m/s}`] by various environmental factors. Threshold calculations are enabled via ``process_threshold``. + +.. math:: + :label: threshold_overview + + u_{\mathrm{* th}} = u_{\mathrm{* th, 0}} \cdot f_{\mathrm{M}} \cdot f_{\mathrm{R}} \cdot f_{\mathrm{S}} + +The base threshold :math:`u_{\mathrm{* th, 0}}` [:math:`\mathrm{m/s}`] is computed based on the local grain size [:math:`\mathrm{m}`] and density [:math:`\mathrm{kg/m^3}`] (activated via ``th_grainsize``). This base value is then scaled by supply-limiting factors depending on the enabled model processes. The influence of surface moisture (:math:`f_{\mathrm{M}}`) [:math:`\mathrm{-}`] is activated via ``th_moisture``, while sheltering by non-erodible roughness elements (:math:`f_{\mathrm{R}}`) [:math:`\mathrm{-}`] is configured via ``th_sheltering``. The restricting effect of a non-erodible layer can be included using ``th_nelayer``. + +Vegetation +^^^^^^^^^^^ +Detailed section: :ref:`vegetation` + +Vegetation plays a key role in the development of dunes. The simulation of vegetation growth and spreading, along with the subsequent reduction in shear stress, can be enabled via ``process_vegetation``. The specific vegetation formulation is selected using ``method_vegetation`` (``duran`` for the original implementation, or ``grass`` for the newer framework by :cite:t:`vanWesten2026`). + +In the original description, the vegetation density :math:`\rho_{\mathrm{veg}}` (``rhoveg``) [:math:`\mathrm{-}`] is computed based on the current vegetation height :math:`h_{\mathrm{veg}}` (``hveg``) [:math:`\mathrm{m}`] relative to the maximum attainable height :math:`H_{\mathrm{max}}` (``hveg_max`` or ``Hveg``) [:math:`\mathrm{m}`]: + +.. math:: + :label: rhoveg_overview + + \rho_{\mathrm{veg}} = (\frac{h_{\mathrm{veg}}}{H_{\mathrm{max}}})^2 + +This density determines the magnitude of the shear stress reduction acting on the sand bed, which relies on a vegetation-related roughness parameter :math:`\Gamma` (``gamma_vegshear``) [:math:`\mathrm{-}`] and the basal cover :math:`\rho_{\mathrm{veg}}` (``rhoveg``) [:math:`\mathrm{-}`]: + +.. math:: + :label: raupach_overview + + u_{*}= \frac{u_*}{\sqrt{1 + \Gamma \rho_{\mathrm{veg}}}} + +The vertical development of the vegetation over time is described by: + +.. math:: + :label: dhveg_overview + + \frac{\partial h_{\mathrm{veg}}}{\partial t} = V_{\mathrm{ver}} \left( 1 - \frac{h_{\mathrm{veg}}}{H_{\mathrm{max}}} \right) - \gamma_{\mathrm{veg}} |\Delta z_{\mathrm{burial}}| + +This growth is governed by the intrinsic vertical growth rate :math:`V_{\mathrm{ver}}` (``V_ver``) [:math:`\mathrm{m/s}`] and the plant's sensitivity to sediment burial or erosion :math:`\gamma_{\mathrm{veg}}` (``veg_gamma``) [:math:`\mathrm{-}`]. + + +Hydrodynamics and Surface Moisture +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Detailed section: :ref:`hydrodynamics-moisture` + +Water levels, wave runup, and groundwater can wet the beach, temporarily increasing the shear velocity threshold and mixing sediment fractions. The model reads input water levels (``tide_file``) and wave heights (``wave_file``), which are activated via ``process_tide`` and ``process_wave``. + +The input water level is first projected onto the domain to establish the Still Water Level (``SWL``) [:math:`\mathrm{m}`]. If wave runup is enabled (``process_runup``), the runup height (``R``) [:math:`\mathrm{m}`] is computed and added to form the Total Water Level (``TWL``) [:math:`\mathrm{m}`], where TWL = SWL + R. The local water surface elevation (``zs``) [:math:`\mathrm{m}`] is then determined as the maximum of the bed level (``zb``) [:math:`\mathrm{m}`] and the TWL, from which the actual water depth (``hw``) [:math:`\mathrm{m}`] is derived. Spatial masks (``tide_mask``, ``wave_mask``, ``runup_mask``) can be applied to restrict or modify where these hydrodynamics act. + +Inundation wets the bed, increasing the surface moisture (``moist``) [:math:`\mathrm{-}`]. Once the beach is exposed, infiltration and evaporation gradually dry the surface. This moisture tracking is activated via ``process_moist``. A more advanced description of intertidal groundwater fluctuations by :cite:t:`Hallin2023` can also be enabled through ``process_groundwater``. For more information on these computations, see the :ref:`surface moisture section `. + +Furthermore, wave impacts can mix multiple sediment fractions across several bed layers down to the depth of disturbance. This mixing process is enabled via ``process_mixtoplayer``. For more details on how waves rework the bed, see the :ref:`hydraulic sediment mixing section `. + +Morphological Change +^^^^^^^^^^^^^^^^^^^^^ +Detailed section: :ref:`morphological-change` + +Gradients in aeolian sediment transport result in net erosion or deposition, causing the bed level :math:`z_B` (``zb``) [:math:`\mathrm{m}`] to change over time; :math:`\Delta z_B` (``dzb``) [:math:`\mathrm{m}`]. This morphological updating is enabled by ``process_bedupdate``: + +.. math:: + :label: bedupdate_overview + + \frac{\partial z}{\partial t} = - \frac{1}{\rho_{\mathrm{sed}}(1 - p)} (E - D) + +This change is driven directly by the net entrainment :math:`(E - D)` (``pickup``) [:math:`\mathrm{kg/m^2/s}`] computed in the advection equation, scaled by the sediment density :math:`\rho_{\mathrm{sed}}` (``rhog``) [:math:`\mathrm{kg/m^3}`] and the sediment porosity :math:`p` (``porosity``) [:math:`\mathrm{-}`]. Together, the density and porosity represent the bulk density of the bed. For more detailed mechanics on this mass balance, see the :ref:`morphological change section `. + +To redistribute sediment when the local slope becomes too steep, avalanching can be enabled through ``process_avalanche``. This routine triggers when the bed slope exceeds the static angle of repose (``theta_stat``) [:math:`\mathrm{^\circ}`] and relaxes the slope back to the dynamic angle of repose (``theta_dyn``) [:math:`\mathrm{^\circ}`]. + +.. _fig-aeolis-overview: + +.. figure:: /images/aeolis_overview.png + :width: 900px + :align: center + + Overview of the AeoLiS model structure and simulated processes. + + +.. _aeolian-sediment-transport: +Aeolian Sediment Transport +-------------------------- + +Calculating aeolian sediment transport is the core of the AeoLiS model. +The model is based on the approach of :cite:`deVries2014a` which is extended to compute the +spatiotemporal varying sediment availability through simulation of the +process of beach armoring. For this purpose the bed is discretized in +horizontal grid cells and in vertical bed layers (``nlayers``) [:math:`\mathrm{-}`]. Moreover, the +grain size distribution is discretized into fractions (``grain_size`` [:math:`\mathrm{m}`], ``grain_dist`` [:math:`\mathrm{-}`]). This allows the +grain size distribution to vary both horizontally and vertically. A +bed composition module is used to compute the sediment availability +for each sediment fraction individually. This model approach is a +generalization of existing model concepts, like the shear velocity +threshold and critical fetch, and therefore compatible with these +existing concepts. + + +.. _advection-equation: +Advection Equation +^^^^^^^^^^^^^^^^^^ + +A 1D advection scheme is adopted in correspondence with +:cite:`deVries2014a` in which :math:`c` (``Ct``) [:math:`\mathrm{kg/m^2}`] is +the instantaneous sediment mass per unit area in transport: + +.. math:: + :label: advection + + \frac{\partial c}{\partial t} + u_{\mathrm{sed}} \frac{\partial c}{\partial x} = E - D + +Here, :math:`t` (``_time``) [:math:`\mathrm{s}`] denotes time, :math:`x` (``x``) [:math:`\mathrm{m}`] denotes the cross-shore +distance, and :math:`u_{\mathrm{sed}}` (``u``, ``us``, ``un``) [:math:`\mathrm{m/s}`] is the sediment velocity. :math:`E` and :math:`D` +[:math:`\mathrm{kg/m^2/s}`] represent the erosion and deposition terms +and hence combined represent the net entrainment of sediment (``pickup``). + +.. note:: + Equation :eq:`advection` differs from Equation 9 in + :cite:`deVries2014a` as they use the saltation height :math:`h` [:math:`\mathrm{m}`] + and the volumetric sediment concentration :math:`C_{\mathrm{c}}` + [:math:`\mathrm{kg/m^3}`]. As :math:`h` is not solved for, the + presented model computes the sediment mass per unit area :math:`c = h + C_{\mathrm{c}}` rather than the sediment concentration + :math:`C_{\mathrm{c}}`. For conciseness we still refer to :math:`c` as + the *sediment concentration*. + +The net entrainment is determined based on a balance between the +equilibrium or saturated sediment concentration +:math:`c_{\mathrm{sat}}` (``Cu``) [:math:`\mathrm{kg/m^2}`] and the +instantaneous sediment transport concentration :math:`c`, and is +maximized by the available sediment in the bed :math:`m_{\mathrm{a}}` (``mass``) +[:math:`\mathrm{kg/m^2}`] according to: + +.. math:: + :label: erodep + + E - D = \min \left ( \frac{\partial m_{\mathrm{a}}}{\partial t} \quad ; \quad \frac{c_{\mathrm{sat}} - c}{T} \right ) + +:math:`T` (``T``) [:math:`\mathrm{s}`] represents an adaptation time scale that is assumed +to be equal for both erosion and deposition. A time scale of 1 second +is commonly used :cite:`deVries2014a`. + +Solving this advection equation is one of the most computationally expensive processes in the model. The numerical approach can be selected using the ``solver`` parameter, which provides three options: ``steadystate``, ``euler_backward``, and ``euler_forward``. + +.. tip:: + The ``steadystate`` solver is the default and recommended option for most applications. It is the most thoroughly tested and fastest option available. The steady-state assumption is generally valid for aeolian transport because wind and sediment transport adjust to local conditions on a scale of seconds to minutes, which is orders of magnitude faster than the timescale of typical timesteps in the AeoLiS model (hours). For detailed guidance on configuring these numerical approaches, see the :ref:`solver guide `. + + +.. _saturated-sediment-transport: + +Saturated Sediment Transport +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The equilibrium, or saturated, sediment concentration :math:`c_{\mathrm{sat}}` (``Cu``) [:math:`\mathrm{kg/m^2}`] is computed using an empirical sediment transport formulation selected via the ``method_transport`` parameter. The default formulation is based on Bagnold (:cite:`Bagnold1937a`) via the ``bagnold`` setting: + +.. math:: + :label: bagnold_qsat + + q_{\mathrm{sat}} = C_{\mathrm{b}} \frac{\rho_{\mathrm{a}}}{g} \left( u_* - u_{\mathrm{th}} \right)^3 + +in which :math:`q_{\mathrm{sat}}` [:math:`\mathrm{kg/m/s}`] is the saturated sediment transport rate representing the sediment transport capacity. :math:`u_*` (``ustar``) [:math:`\mathrm{m/s}`] is the shear velocity, and :math:`u_{\mathrm{th}}` (``uth``) [:math:`\mathrm{m/s}`] is the velocity threshold. The properties of the sediment and air are represented by a series of parameters: :math:`C_{\mathrm{b}}` (``Cb``) [:math:`\mathrm{-}`] is an empirical constant, :math:`\rho_{\mathrm{a}}` (``rhoa``) [:math:`\mathrm{kg/m^3}`] is the density of the air, and :math:`g` (``g``) [:math:`\mathrm{m/s^2}`] is the gravitational constant. + +The saturated sediment concentration :math:`c_{\mathrm{sat}}` is directly related to the saturated sediment transport rate :math:`q_{\mathrm{sat}}` and the sediment velocity :math:`u_{\mathrm{sed}}` (``u``) [:math:`\mathrm{m/s}`] through the relationship :math:`q_{\mathrm{sat}} = c_{\mathrm{sat}} \cdot u_{\mathrm{sed}}`. Therefore, to obtain the mass per unit area, the transport rate is divided by the sediment velocity: + +.. math:: + :label: bagnold_csat + + c_{\mathrm{sat}} = \max \left( 0 \quad ; \quad C_{\mathrm{b}} \frac{\rho_{\mathrm{a}}}{g} \frac{\left( u_* - u_{\mathrm{th}} \right)^3}{u_{\mathrm{sed}}} \right) + +Depending on the configuration, several other formulations can be selected to compute the saturated sediment concentration, for example: + +``kawamura``: + + .. math:: + :label: kawamura + + c_{\mathrm{sat}} = C_{\mathrm{k}} \frac{\rho_{\mathrm{a}}}{g} \frac{\left( u_* + u_{\mathrm{th}} \right)^2 \left( u_* - u_{\mathrm{th}} \right)}{u_{\mathrm{sed}}} + +``lettau``: + + .. math:: + :label: lettau + + c_{\mathrm{sat}} = C_{\mathrm{l}} \frac{\rho_{\mathrm{a}}}{g} \frac{u_*^2 \left( u_* - u_{\mathrm{th}} \right)}{u_{\mathrm{sed}}} + +``dk``: + + .. math:: + :label: dk + + c_{\mathrm{sat}} = C_{\mathrm{dk}} \frac{\rho_{\mathrm{a}}}{g} \frac{0.8 u_{\mathrm{th}} \left( u_*^2 - \left( 0.8 u_{\mathrm{th}} \right)^2 \right)}{u_{\mathrm{sed}}} + + +.. _sediment-velocity: + +Sediment Transport Velocity +^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The horizontal sediment velocity :math:`u_{\mathrm{sed}}` (``u``) [:math:`\mathrm{m/s}`] determines the advection speed of the sediment concentration. It can be computed using different approaches selected via the ``method_grainspeed`` parameter. For detailed guidance on selecting the appropriate method and its impact on computational time and landform evolution, see :ref:`this guide `. + +The simplest approach (``windspeed``) assumes the horizontal sediment velocity is equal to the wind velocity :math:`u_{\mathrm{w}}` (``uw``) [:math:`\mathrm{m/s}`]: + +.. math:: + :label: used_windspeed + + u_{\mathrm{sed}} = u_{\mathrm{w}} + +While this method is the fastest and most robust, it overpredicts the horizontal sediment velocity because grains in saltation move slower than the wind. Consequently, it fails to capture deposition patterns, making it suitable only for bulk transport calculations. + +Predictions of the actual saltation velocity provide a more realistic description of horizontal sediment movement :cite:`sauermann2001continuum`. The sediment velocity can be determined from a momentum balance :cite:`duran2007thesis` consisting of three terms: the drag force acting on the grains, the loss of momentum during grain-bed interaction (splashing), and the downhill gravity force: + +.. math:: + :label: used_momentum + + \frac{(\vec{v}_{\mathrm{eff}} - \vec{u}_{\mathrm{sed}})|\vec{v}_{\mathrm{eff}} - \vec{u}_{\mathrm{sed}}|}{u_{\mathrm{f}}^2} - \frac{\vec{u}_{\mathrm{sed}}}{2 \alpha |\vec{u}_{\mathrm{sed}}|} - \vec{\nabla z_{\mathrm{B}}} = 0 + +where :math:`v_{\mathrm{eff}}` [:math:`\mathrm{m/s}`] is the effective wind velocity driving the grains, which depends on the shear velocity :math:`u_*` and the threshold shear velocity :math:`u_{\mathrm{*th}}`. :math:`u_{\mathrm{f}}` [:math:`\mathrm{m/s}`] is the fluid threshold velocity (or grain settling velocity), :math:`\nabla z_{\mathrm{B}}` [:math:`\mathrm{-}`] is the bed slope, and :math:`\alpha` [:math:`\mathrm{-}`] is an effective restitution coefficient for the grain-bed interaction (e.g., :math:`\alpha = 0.42` for :math:`d = 250` :math:`\mathrm{\mu m}`). + +.. note:: + The computed :math:`u_{\mathrm{sed}}` represents the collective horizontal sediment movement, not the velocity of individual grains. + +AeoLiS provides three options based on this momentum balance: + +``duran_full`` solves the full momentum balance equation (Equation :eq:`used_momentum`) numerically for each timestep. This method is computationally heavy but necessary for accurate sediment velocities on steep topography (e.g., steep blowout cliffs). + +``duran`` uses an analytical approximation of the full momentum balance. It accounts for spatial variations and slope effects by assuming slopes are relatively gentle to avoid computationally expensive numerical solving: + + .. math:: + :label: used_duran_approx + + u_{\mathrm{sed}} \approx \left( v_{\mathrm{eff}} - \frac{u_{\mathrm{f}}}{\sqrt{2\alpha A}} \right) \hat{e}_{\tau} - \frac{\sqrt{2\alpha} u_{\mathrm{f}}}{A} \nabla z_{\mathrm{B}} + + where :math:`\hat{e}_{\tau}` is the wind direction unit vector and :math:`A \equiv |\hat{e}_{\tau} + 2\alpha \nabla z_{\mathrm{B}}|`. The first term points toward the wind direction, while the second is directed along the surface gradient, accounting for the competing effects of wind and gravity. + +``duran_uniform`` assumes a flat bed (:math:`\nabla z_{\mathrm{B}} = 0`). The sediment velocity is spatially uniform, simplifying the equation further to: + + .. math:: + :label: used_duran_uniform + + u_{\mathrm{sed}} = v_{\mathrm{eff}} - \frac{u_{\mathrm{f}}}{\sqrt{2\alpha}} + +.. tip:: + **Guidance on selecting a grain speed method (see :ref:`this guide ` for more information)** + + * Use ``duran`` for most simulations involving landform evolution where topographic steering is important. + * Use ``duran_full`` only for simulations involving topography with very steep gradients (e.g., blowout cliffs). + * Use ``duran_uniform`` for static topography where you need realistic deposition patterns but no landform migration. + * Use ``windspeed`` only for basic, bulk transport calculations where morphodynamics are irrelevant. + + + +.. _multi-fraction-sediment-transport: +Multi-fraction Sediment Transport +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The formulation for the equilibrium or saturated sediment +concentration :math:`c_{\mathrm{sat}}` (Equation +:eq:`equilibrium-conc`) is capable of dealing with variations in +grain size through the variables :math:`u_{\mathrm{th}}`, +:math:`d_{\mathrm{n}}` and :math:`C` :cite:`Bagnold1937a`. However, +the transport formulation only describes the saturated sediment +concentration assuming a fixed grain size distribution, but does not +define how multiple fractions coexist in transport. If the saturated +sediment concentration formulation would be applied to each fraction +separately and summed up to a total transport, the total sediment +transport would increase with the number of sediment fractions. Since +this is unrealistic behavior the saturated sediment concentration +:math:`c_{\mathrm{sat}}` for the different fractions should be +weighted in order to obtain a realistic total sediment +transport. Equation :eq:`erodep` therefore is modified to include a +weighting factor :math:`\hat{w}_k` in which :math:`k` represents the +sediment fraction index: + +.. math:: + :label: erodep_multi + + E_k - D_k = \min \left ( \frac{\partial m_{\mathrm{a},k}}{\partial t} \quad ; \quad \frac{\hat{w}_k \cdot c_{\mathrm{sat},k} - c_k}{T} \right ) + +It is common to use the grain size distribution in the bed as +weighting factor for the saturated sediment concentration +(e.g. :cite:`Delft3DManual`, section 11.6.4). Using the grain size +distribution at the bed surface as a weighting factor assumes, in case +of erosion, that all sediment at the bed surface is equally exposed to +the wind. + +Using the grain size distribution at the bed surface as weighting +factor in case of deposition would lead to the behavior where +deposition becomes dependent on the bed composition. Alternatively, in +case of deposition, the saturated sediment concentration can be +weighted based on the grain size distribution in the air. Due to the +nature of saltation, in which continuous interaction with the bed +forms the saltation cascade, both the grain size distribution in the +bed and in the air are likely to contribute to the interaction between +sediment fractions. The ratio between both contributions in the model +is determined by a bed interaction parameter :math:`\zeta` (``bi``). + +.. note:: + The bed interaction parameter (``bi``) described here is currently distinct from the recently introduced bed-interaction factor (``zeta``). While conceptually similar, they serve different purposes: + + * ``bi``: A static variable that weights the contribution of the bed composition (sand in the bed) versus the airborne composition (sand already in transport) when computing the transport rate for multiple sediment fractions. + * ``zeta``: A dynamically computed factor based on surface properties that decouples the air and bed. It determines the extent to which transport is governed by bed conditions (supply-limited) versus airborne conditions (wind-driven capacity) (see :ref:`this section `). + + Future updates should aim to consolidate these two parameters. + + +The weighting of erosion and deposition of individual fractions is +computed according to: + +.. math:: + :label: weigh + + \begin{align} + \hat{w}_k &= \frac{w_k}{ \sum_{k=1}^{n_{\mathrm{k}}}{w_k} } \\ + \mathrm{where} \quad w_k &= (1 - \zeta) \cdot w^{\mathrm{air}}_k + (1 - \hat{S}_k) \cdot w^{\mathrm{bed}}_k + \end{align} + +in which :math:`k` represents the sediment fraction index, +:math:`n_{\mathrm{k}}` the total number of sediment fractions, :math:`w_k` is the +unnormalized weighting factor for fraction :math:`k`, :math:`\hat{w}_k` is its +normalized counterpart, :math:`w^{\mathrm{air}}_k` and :math:`w^{\mathrm{bed}}_k` +are the weighting factors based on the grain size distribution in the +air and bed respectively and :math:`\hat{S}_k` is the effective sediment +saturation of the air. The weighting factors based on the grain size +distribution in the air and the bed are computed using mass ratios: + +.. math:: + :label: weights + + w^{\mathrm{air}}_k = \frac{c_k}{c_{\mathrm{sat},k}} \quad ; \quad + w^{\mathrm{bed}}_k = \frac{m_{\mathrm{a},k}}{\sum_{k=1}^{n_{\mathrm{k}}}{m_{\mathrm{a},k}}} + +The sum of the ratio :math:`w^{\mathrm{air}}_k` over the fractions +denotes the degree of saturation of the air column for fraction +:math:`k`. The degree of saturation determines if erosion of a fraction may +occur. Also in saturated situations erosion of a sediment fraction can +occur due to an exchange of momentum between sediment fractions, which +is represented by the bed interaction parameter :math:`\zeta` (``bi``). The effective +degree of saturation is therefore also influenced by the bed +interaction parameter and defined as: + +.. math:: + :label: saturation + + \hat{S}_k = \min \left ( 1 \quad ; \quad (1 - \zeta) \cdot \sum_{k=1}^{n_{\mathrm{k}}} w_k^{\mathrm{air}} \right ) + +When the effective saturation is greater than or equal to unity the +air is (over)saturated and no erosion will occur. The grain size +distribution in the bed is consequently less relevant and the second +term in Equation :eq:`weights` is thus minimized and zero in case +:math:`\zeta = 0`. In case the effective saturation is less than unity erosion +may occur and the grain size distribution of the bed also contributes +to the weighting over the sediment fractions. The weighting factors +for erosion are then composed from both the grain size distribution in +the air and the grain size distribution at the bed surface. Finally, +the resulting weighting factors are normalized to sum to unity over +all fractions (:math:`\hat{w}_k`). + +The composition of weighting factors for erosion is based on the +saturation of the air column. The non-saturated fraction determines +the potential erosion of the bed. Therefore the non-saturated fraction +can be used to scale the grain size distribution in the bed in order +to combine it with the grain size distribution in the air according to +Equation :eq:`weights`. The non-saturated fraction of the air column +that can be used for scaling is therefore :math:`1 - \hat{S}_k`. + +For example, if bed interaction is disabled (:math:`\zeta = 0`) and +the air is 70\% saturated, then the grain size distribution in the air +contributes 70\% to the weighting factors for erosion, while the grain +size distribution in the bed contributes the other 30\% (Figure +:numref:`fig-bed-interaction-parameter`, upper left panel). In case of +(over)saturation the grain size distribution in transport contributes +100\% to the weighting factors and the grain size distribution in the +bed is of no influence. Transport progresses in downwind direction +without interaction with the bed. + +.. _fig-bed-interaction-parameter: + +.. figure:: /images/bed_interaction_parameter.png + :width: 600px + :align: center + + Contributions of the grain size distribution in the bed and in the + air to the weighting factors :math:`\hat{w}_k` for the equilibrium + sediment concentration in Equation :eq:`erodep_multi` for different + values of the bed interaction parameter. + +To allow for bed interaction in saturated situations in which no net +erosion can occur, the bed interaction parameter :math:`\zeta` is used (Figure +:numref:`fig-bed-interaction-parameter`). The bed interaction parameter +can take values between 0.0 and 1.0 in which the weighting factors for +the equilibrium or saturated sediment concentration in an +(over)saturated situation are fully determined by the grain size +distribution in the bed or in the air respectively. A bed interaction +value of 0.2 represents the situation in which the grain size +distribution at the bed surface contributes 20\% to the weighting of +the saturated sediment concentration over the fractions. In the +example situation where the air is 70\% saturated such value for the +bed interaction parameter would lead to weighting factors that are +constituted for :math:`70\% \cdot (100\% - 20\%) = 56\%` based on the grain +size distribution in the air and for the other 44\% based on the grain +size distribution at the bed surface (Figure +:numref:`fig-bed-interaction-parameter`, upper right panel). + +The parameterization of the exchange of momentum between sediment +fractions is an aspect of saltation that is still poorly +understood. Therefore calibration of the bed interaction parameter +:math:`\zeta` is necessary. The model parameters in Equation +:eq:`equilibrium-conc` can be chosen in accordance with the +assumptions underlying multi-fraction sediment transport. :math:`C` should +be set to 1.5 as each individual sediment fraction is well-sorted, +:math:`d_{\mathrm{n}}` should be chosen equal to :math:`D_{\mathrm{n}}` as the +grain size dependency is implemented through +:math:`u_{\mathrm{th}}`. :math:`u_{\mathrm{th}}` typically varies between 1 and 6 +m/s for sand. + +.. _sediment-sorting: +Sediment Sorting and Beach Armoring +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +Since the equilibrium or saturated sediment concentration +:math:`c_{\mathrm{sat},k}` is weighted over multiple sediment fractions in +the extended advection model, also the instantaneous sediment +concentration :math:`c_k` is computed for each sediment fraction +individually. Consequently, grain size distributions may vary over the +model domain and in time. These variations are thereby not limited to +the horizontal, but may also vary over the vertical since fine +sediment may be deposited on top of coarse sediment or, reversely, +fines may be eroded from the bed surface leaving coarse sediment to +reside on top of the original mixed sediment. In order to allow the +model to simulate the processes of sediment sorting and beach armoring +the bed is discretized in horizontal grid cells and vertical bed +layers (2DV; Figure :numref:`fig-bedcomposition`). + +The discretization of the bed consists of a minimum of three vertical +bed layers with a constant thickness and an unlimited number of +horizontal grid cells. The top layer is the *bed surface layer* and is +the only layer that interacts with the wind and hence determines the +spatiotemporal varying sediment availability and the contribution of +the grain size distribution in the bed to the weighting of the +saturated sediment concentration. One or more *bed composition layers* +are located underneath the bed surface layer and form the upper part +of the erodible bed. The bottom layer is the *base layer* and contains +an infinite amount of erodible sediment according to the initial grain +size distribution. The base layer cannot be eroded, but can supply +sediment to the other layers. + +.. _fig-bedcomposition: + +.. figure:: /images/bed_composition.png + :align: center + + Schematic of bed composition discretisation and advection + scheme. Horizontal exchange of sediment may occur solely through + the air that interacts with the *bed surface layer*. The detail + presents the simulation of sorting and beach armoring where the bed + surface layer in the upwind grid cell becomes coarser due to + non-uniform erosion over the sediment fractions, while the bed + surface layer in the downwind grid cell becomes finer due to + non-uniform deposition over the sediment fractions. Symbols refer + to Equations :eq:`advection` and :eq:`erodep`. + +Each layer in each grid cell describes a grain size distribution (``grain_size``, ``grain_dist``)) over +a predefined number of sediment fractions (``nfractions``) (Figure +:numref:`fig-bedcomposition`, detail). Sediment may enter or leave a +grid cell only through the bed surface layer. Since the velocity +threshold depends among others on the grain size, erosion from the bed +surface layer will not be uniform over all sediment fractions, but +will tend to erode fines more easily than coarse sediment (Figure +:numref:`fig-bedcomposition`, detail, upper left panel). If sediment +is eroded from the bed surface layer, the layer is repleted by +sediment from the lower bed composition layers. The repleted sediment +has a different grain size distribution than the sediment eroded from +the bed surface layer. If more fines are removed from the bed surface +layer in a grid cell than repleted, the median grain size +increases. If erosion of fines continues the bed surface layer becomes +increasingly coarse. Deposition of fines or erosion of coarse material +may resume the erosion of fines from the bed. + +In case of deposition the process is similar. Sediment is deposited in +the bed surface layer that then passes its excess sediment to the +lower bed layers (Figure :numref:`fig-bedcomposition`, detail, upper +right panel). If more fines are deposited than passed to the lower bed +layers the bed surface layer becomes increasingly fine. + +.. _hydraulic: +Hydraulic Mixing +~~~~~~~~~~~~~~~~~~~~ + +As sediment sorting due to aeolian processes can lead to armoring of a +beach surface, mixing of the beach surface or erosion of course +material may undo the effects of armoring. To ensure a proper balance +between processes that limit and enhance sediment availability in the +model both types of processes need to be sufficiently represented when +simulating spatiotemporal varying bed surface properties and sediment +availability. + +A typical upwind boundary in coastal environments during onshore winds +is the water line. For aeolian sediment transport the water line is a +zero-transport boundary. In the presence of tides, the intertidal +beach is flooded periodically. Hydraulic processes like wave breaking +mix the bed surface layer of the intertidal beach, break the beach +armoring and thereby influence the availability of sediment. + +In the model the mixing of sediment is simulated by averaging the +sediment distribution over the depth of disturbance +(:math:`\Delta z_{\mathrm{d}}`). The depth of disturbance is linearly +related to the breaker height (e.g. :cite:`King1951`, :cite:`Williams1971`, :cite:`Masselink2007`). :cite:`Masselink2007` proposes an empirical factor +:math:`f_{\Delta z_{\mathrm{d}}}` (``facdod``) [-] that relates the depth of disturbance +directly to the local breaker height according to: + +.. math:: + :label: disturbance_depth + + \Delta z_{\mathrm{d}} = f_{\Delta z_{\mathrm{d}}} \cdot \min \left ( H \quad ; \quad \gamma \cdot d \right ) + +in which :math:`\Delta z_{\mathrm{d}}` (``DOD``) [m] is the depth of disturbance, and the offshore wave height :math:`H` (``Hsmix``) [m] is taken as the +local wave height maximized by a maximum wave height over depth ratio +:math:`\gamma` (``gamma``) [-]. :math:`d` [m] is the water depth that is provided to the model +through an input time series of water levels. Typical values for +:math:`f_{\Delta z_{\mathrm{d}}}` are 0.05 to 0.4 and 0.5 for :math:`\gamma`. + +More information on the computation of hydrodynamic forcing by the AeoLiS model is described in :ref:`this hydrodynamics section `. + + +.. _bed-interaction-approach: + +Bed-interaction Approach (:math:`\zeta`) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Most existing aeolian models assume that local bed properties dictate the saturated sediment concentration for the entire transport column, relying on a single value for :math:`c_{\mathrm{sat}}` in the advection equation (Equation :eq:`erodep`). However, this assumes that conditions at or near the bed instantly influence the entire air column, which would cause immediate deposition over obstacles like vegetation. + +In reality, transport conditions depend on the vertical position of the sediment within the air column. For instance, over a non-erodible surface or a vegetated area, sediment near (or trapped in) the bed experiences severe drag reduction or a lack of supply, while sediment traveling higher in the air column could still "skim" over the top of the surface, retaining its momentum. + +To capture this decoupling and allow sediment to bypass non-erodible or vegetated surfaces despite reduced transport conditions at the bed, a bed-interaction approach was recently introduced by :cite:`vanWesten2026`. This approach (enabled via ``process_bedinteraction``) divides the saturated sediment concentration into two distinct transport modes: + +* **Bed-dominated transport** :math:`c_{\mathrm{sat,bed}}` (``CuBed``) [:math:`\mathrm{kg/m^2}`]: Sediment directly affected by conditions at or near the bed. This flux responds to local surface constraints, such as vegetation-induced shear reduction (:math:`u_{*,\mathrm{veg}}`) or supply-limiting factors (e.g., moisture, sheltering) that increase the velocity threshold (:math:`u_{\mathrm{th}}`). +* **Airborne transport** :math:`c_{\mathrm{sat,air}}` (``CuAir``) [:math:`\mathrm{kg/m^2}`]: Sediment that remains elevated above the canopy or internal boundary layer, responding primarily to the free-stream wind forcing (:math:`u_*`). This mode operates independently of local surface limitations. + +The combined saturated sediment concentration :math:`c_{\mathrm{sat}}` (``Cu``) [:math:`\mathrm{kg/m^2}`] is calculated as a weighted sum of these two modes: + +.. math:: + :label: csat_combined + + c_{\mathrm{sat}} = w_{\mathrm{air}} c_{\mathrm{sat,air}} + w_{\mathrm{bed}} c_{\mathrm{sat,bed}} + +The dimensionless weights :math:`w_{\mathrm{air}}` and :math:`w_{\mathrm{bed}}` [:math:`\mathrm{-}`] are controlled by a bed-interaction factor :math:`\zeta` (``zeta``) [:math:`\mathrm{-}`], which defines the fraction of the sediment flux actively interacting with the bed. The airborne weight scales with the actual instantaneous sediment concentration :math:`c` (``Ct``) [:math:`\mathrm{kg/m^2}`] relative to the airborne carrying capacity: + +.. math:: + :label: weights_zeta + + w_{\mathrm{air}} = (1 - \zeta) \frac{c}{c_{\mathrm{sat,air}}}, \quad \quad w_{\mathrm{bed}} = 1 - w_{\mathrm{air}} + +.. note:: + In the case of fully saturated transport (:math:`c = c_{\mathrm{sat,air}}`), Equation :eq:`csat_combined` simplifies to :math:`c_{\mathrm{sat}} = (1 - \zeta) c_{\mathrm{sat,air}} + \zeta c_{\mathrm{sat,bed}}`. The relative saturation term :math:`\frac{c}{c_{\mathrm{sat,air}}}` basically prevents the model from bypassing sediment over an obstacle when the air is actually empty. If the incoming wind carries no sediment (:math:`c = 0`), the airborne weight drops to zero, and all transport must be initiated entirely by local bed conditions. + +This formulation allows the model to dynamically simulate different surface types through the parameter :math:`\zeta`: + +* Bare sediment surface (:math:`\zeta = 1`): All transport interacts with the bed. If local shear drops or the threshold increases, deposition occurs directly (scaled only by the adaptation time :math:`T` in Equation :eq:`erodep`). Under these conditions, Equation :eq:`csat_combined` simplifies to :math:`c_{\mathrm{sat}} = c_{\mathrm{sat,bed}}`. +* Non-erodible surface (:math:`\zeta = 0`): Transport is fully decoupled from conditions at the bed. Even if the local pickup capacity is zero (:math:`c_{\mathrm{sat,bed}} = 0`), sediment entering from upwind passes over the cell without depositing, effectively creating an infinite deposition length. +* Vegetation (:math:`0 < \zeta < 1` **): The vegetation canopy intercepts a portion of the sediment flux, while the remainder skims over the top. Consequently, the effective deposition length scale increases, allowing the depositional area to extend further downwind into the vegetation patch. + +The actual dynamic computation of :math:`\zeta` based on vegetation height and the vertical transport profile is described further down in the :ref:`vegetation section `. + +.. note:: + The bed interaction parameter (``bi``) described earlier is currently distinct from the recently introduced bed-interaction factor (``zeta``). While conceptually similar, they serve different purposes: + + * ``bi``: A static variable that weights the contribution of the bed composition (sand in the bed) versus the airborne composition (sand already in transport) when computing the transport rate for multiple sediment fractions. + * ``zeta``: A dynamically computed factor based on surface properties that decouples the air and bed. It determines the extent to which transport is governed by bed conditions (supply-limited) versus air conditions (wind-driven capacity). + + Future updates aim to consolidate these two parameters. + +.. _wind-shear-velocity: + +Wind and Shear Velocity +----------------------------------- + +Wind is the primary driver of aeolian sediment transport (``process_wind``). Time-varying wind conditions are provided to the model through the ``wind_file``, which contains both the wind magnitude [:math:`\mathrm{m/s}`] and direction [:math:`\mathrm{^\circ}`]. This wind velocity is measured at a specific reference height :math:`z` (``z``) [:math:`\mathrm{m}`], which defaults to 10 m. The model automatically interpolates the input time series to the internal computational time steps and decomposes the wind into cross-shore :math:`u_{\mathrm{w,s}}` (``uws``) and longshore :math:`u_{\mathrm{w,n}}` (``uwn``) [:math:`\mathrm{m/s}`] components. + +.. _shear-velocity: + +Shear Velocity +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The shear velocity over a flat bed :math:`u_{*,0}` (``ustar0``) [:math:`\mathrm{m/s}`] is first computed from the wind velocity :math:`u_{\mathrm{w}}` (``uw``) [:math:`\mathrm{m/s}`] using the Prandtl-Von Kármán Law of the Wall: + +.. math:: + :label: law_of_the_wall + + u_{*,0} = \frac{u_{\mathrm{w}} \kappa}{\ln\left(\frac{z}{z_0}\right)} + +where :math:`\kappa` (``kappa``) [:math:`\mathrm{-}`] is the Von Kármán constant, :math:`z` (``z``) [:math:`\mathrm{m}`] is the reference elevation of the wind measurements, and :math:`z_0` (``z0``) [:math:`\mathrm{m}`] is the aerodynamic roughness length. + +The model offers multiple methods to compute the roughness length :math:`z_0`, selected via the ``method_roughness`` parameter: + +* ``constant`` (default): Uses the user-defined roughness parameter :math:`k` (``k``) [:math:`\mathrm{m}`] directly as the roughness length (:math:`z_0 = k`). This is implemented to ensure backward compatibility and does not follow the standard Nikuradse definition. +* ``constant_nikuradse``: Follows the definition introduced by Nikuradse, scaling the user-defined bed roughness by 30 (:math:`z_0 = k / 30`). +* ``mean_grainsize_initial``: Computes a static roughness based on the initial mean grain size across the domain (:math:`z_0 = d_{\mathrm{mean}} / 30`). This is most applicable to flat beds with a uniform grain size distribution. +* ``mean_grainsize_adaptive``: Dynamically updates the roughness through time and space based on the evolving local mean grain size. +* ``median_grainsize_adaptive``: Uses the local median grain size :math:`d_{50}` (:math:`z_0 = 2d_{50} / 30`). This approach is based on Sherman and Greenwood (1982) and is appropriate for naturally occurring grain size distributions. +* ``vanrijn_strypsteen``: An advanced dynamic formulation based on van Rijn and Strypsteen (2019) and Strypsteen et al. (2021). It calculates the roughness dynamically using the local :math:`d_{50}` and :math:`d_{90}` to account for the additional roughness generated by the saltation layer and ripple formation phases. + +.. tip:: + Although the bed roughness :math:`k` (``k``) is a physical parameter, it can be used in practice to calibrate transport rates. A pragmatic workflow is to select the ``bagnold`` transport method, establish flat-bed transport with representative conditions, and use ``k`` (with ``method_roughness = constant``) to calibrate the transport magnitudes before adding more complexity to the model. This approach could be effective if your primary goal is to simulate representative morphological evolution and you're less interested in the accuracy of the physical representation of the aeolian transport. + + +.. _topographic-steering: + +Topographic Steering +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +To simulate the topographic steering effects on dunes, Computational Fluid Dynamics (CFD) methods are often used. However, their high computational expense makes them unsuitable for long-term morphodynamic simulations. To reduce computational costs, the topographic steering of the wind due to smooth gradients is implemented following an analytical perturbation theory for turbulent boundary layer flow :cite:`weng1991air, kroy2002minimal` (``process_shear``). + +This approach builds upon the flat bed shear velocity :math:`u_{*0}` (``ustar0``) [:math:`\mathrm{m/s}`] established in the previous step. This velocity provides a baseline, unperturbed shear stress :math:`\vec{\tau}_{0}` (``tau0``) [:math:`\mathrm{N/m^2}`], where :math:`|\vec{\tau}_{0}| = \rho_{\mathrm{a}} u_{*0}^2`. The method then computes the topographically steered shear stress :math:`\vec{\tau}(x,y)` (``tau``) by applying a spatial perturbation :math:`\delta\vec{\tau}(x,y)` to this baseline: + +.. math:: + :label: shear_perturbation_base + + \vec{\tau}(x,y) = \vec{\tau}_{0} + |\vec{\tau}_{0}|\delta\vec{\tau}(x,y) + +where :math:`\delta\vec{\tau}(x,y)` (``dtau``) is the shear stress perturbation and :math:`\vec{\tau}_{0}` is the computed shear stress on a flat topography. + +For two-dimensional situations, the shear stress perturbation in the x- and y-directions (:math:`\delta\tau_{x}` and :math:`\delta\tau_{y}`) (``dtaux``, ``dtauy``) is computed in Fourier space according to the following equations: + +.. math:: + :label: shear_pert_x + + \delta\tilde{\tau}_{x}(\vec{k})=\frac{2\tilde{z}_{b}(\vec{k})}{U^2(l)} + \frac{k_{x}^2}{|\vec{k}|}\left\lbrace-1+\left(2\ln\frac{l}{z'_{0}}+\frac{|k|^2}{k_{x}^2}\right)\sigma\frac{K_{1}(2\sigma)}{K_{0}(2\sigma)}\right\rbrace + +.. math:: + :label: shear_pert_y + + \delta\tilde{\tau}_{y}(\vec{k})=\frac{2\tilde{z}_{b}(\vec{k})}{U^2(l)} + \frac{k_{x}k_{y}}{|\vec{k}|}2\sqrt{2}\sigma K_{1} (2\sqrt{2}\sigma) + +.. math:: + :label: shear_sigma + + \sigma=\sqrt{iLk_{x}z'_{0}/l} + +where :math:`\tilde{}` indicates the Fourier-transformed components of the parameters, :math:`k_x` and :math:`k_y` are the components of the wave vector :math:`\vec{k}` in Fourier space, and :math:`K_0` and :math:`K_1` are modified Bessel functions. As illustrated in Figure :numref:`fig-concept-topo-steering`, the depth of the inner layer of flow :math:`l` [m], the dimensionless vertical velocity profile :math:`U(l)` [-] at height :math:`l`, and the height of the middle layer of flow :math:`z_m` [m] are defined as: + +.. math:: + :label: flow_layer_parameters + + l = \frac{2 \kappa^2 L}{\ln \left( \frac{l}{z'_{0}} \right)} \qquad \qquad U(l) \equiv \frac{\ln \left( \frac{l}{z'_{0}} \right)}{\ln \left( \frac{z_{m}}{z'_{0}} \right)} \qquad \qquad z_{m} = \sqrt{\frac{L^2}{\ln \left( \frac{z_{m}}{z'_{0}} \right)}} + +where :math:`L` (``L``) [m] is the typical length scale of the hill. + +.. tip:: + Tuning the length scale :math:`L` (``L``): The typical length scale of the hill (:math:`L`) influences the strength of the shear perturbation. A higher :math:`L` will result in a stronger shear stress perturbation (higher wind speed-up over the crest or reduction at the toe) and thus in a more outspoken morphodynamic shape. A practical approach is to vary this parameter between 10 and 1000 m depending on your desired morphological outcome. + +For one-dimensional situations, a simplified solution of the shear perturbation approach is implemented. By ignoring some minor terms, it provides a less computationally expensive approach :cite:`kroy2002minimal`: + +.. math:: + :label: shear_pert_1d + + \delta \tau =\alpha \int_{-\infty}^{\infty}d\xi\frac{\frac{\delta z_b}{\delta x}(x-\xi)}{\pi \xi}+\beta\frac{\delta z_b}{\delta x}(x) + +where :math:`\alpha` [-] and :math:`\beta` [-] both depend on :math:`L/z_0`, but are user-defined fixed variables rather than computed in the model. :math:`\xi` [-] is the normalized cross-shore distance :math:`x/L`. + +Finally, the computed shear stresses are converted back into shear velocities. The topographically steered shear velocity :math:`u_*` (``ustar``) [:math:`\mathrm{m/s}`], which now includes the computed perturbation, is derived from the total shear stress :math:`\vec{\tau}(x,y)`: + +.. math:: + :label: ustar_from_tau + + u_* = \sqrt{\frac{|\vec{\tau}(x,y)|}{\rho_{\mathrm{a}}}} + + +.. _flow-separation: +Flow separation +^^^^^^^^^^^^^^^^^ + +The implementation of the shear perturbation theory by :cite:`weng1991air` is only valid in situations with relatively smooth surfaces. The occurrence of steep slopes limits the validity of the approach. To address this, a description of flow separation is used following the Coastal Dune Model (CDM) :cite:`sauermann2001continuum, kroy2002minimal, DuranMoore2013` (``process_separation``). + +A smooth envelope is created, which separates the main flow when a sharp edge is detected in the windward direction, i.e. when the bed slope is steeper than a certain user-defined angle (``mu_b``). This smooth envelope is called a separation bubble, :math:`z_{sep}` (``zsep``) [m] (Figure :numref:`fig-concept-topo-steering`). This separation bubble represents the surface that divides the region of flow reversal from the main flow stream along the smooth hill. Subsequently, in all cells for which the bed level is lower than the separation bubble (:math:`z_b < z_{sep}`), the shear velocity :math:`u_{*}` is set to 0 m/s. This assumes that eventual flow reversal velocities are not significant enough to initiate aeolian transport. + +The separation bubble surface :math:`z_{sep}` is modelled by a third-order polynomial. The height of the brinkline, or the location where the separation bubble starts to detach from the bed, is defined by :math:`z_b(x_{\mathrm{brink}}) \equiv z_{\mathrm{brink}}`. Assuming a maximum slope :math:`c` (``c_b``) [deg] for the separation surface that determines the shape of the bubble, the reattachment length :math:`l_r` is obtained by: + +.. math:: + :label: reattachment_length + + l_r \approx \frac{3 z_{\mathrm{brink}}}{2c}\left(1+\frac{z_{\mathrm{brink}}}{4c}+2\left(\frac{z_{\mathrm{brink}}}{4c}\right)^2\right) + +The separation bubble profile :math:`z_{sep}` is then calculated as: + +.. math:: + :label: separation_bubble_poly + + z_{sep}(x)=a_3(x-x_{\mathrm{brink}})^3+a_2(x-x_{\mathrm{brink}})^2+z_{\mathrm{brink}}'(x-x_{\mathrm{brink}})+z_{\mathrm{brink}} + +where the polynomial coefficients are: + +.. math:: + :label: poly_coeffs + + a_2=-\frac{3 z_{\mathrm{brink}} + 2 z_{\mathrm{brink}}' l_r}{l_r^2} \qquad \qquad a_3=\frac{2 z_{\mathrm{brink}} + z_{\mathrm{brink}}' l_r}{l_r^3} + +.. tip:: + Enabling the separation bubble (``process_separation = T``) is recommended for solely aerodynamically dominated landforms (e.g., barchan dunes). However, it can produce undesirable morphodynamics in complex or irregular topographies, such as densely vegetated environments, so use it judiciously. + +.. _fig-concept-topo-steering: + +.. figure:: /images/concept_topo_steering.jpg + :alt: concept topographic steering + :width: 800px + :align: center + + Schematic overview of the shear perturbation and flow separation approach. Based on :cite:`weng1991air` and :cite:`kroy2002minimal`. + +The computed shear stress as a result of the combined influence of the implemented shear stress perturbations and flow separation is shown in Figure :numref:`fig-compare-topo-steering`. These results show the decrease on the windward and lee sides of both Gaussian- and barchan-shaped landforms and an increase over the crest. Additionally, a shear velocity of zero is shown below the separation bubble. + +.. _fig-compare-topo-steering: + +.. figure:: /images/compare_topo_steering.jpg + :alt: topographic steering + :width: 800px + :align: center + + Spatial variation in shear stress due to topographic steering of the wind field. The upper panels show the bed level :math:`z_b` [m] and shear stress velocity perturbation :math:`\delta u_*` [m/s] over a uniform Gaussian hill. The lower panels show topographic steering over a barchan dune, including the influence of flow separation. The right panels compare outcomes of the one- and two-dimensional approaches. + +Directional winds +~~~~~~~~~~~~~~~~~~~ + +The underlying implementation of the perturbation theory and separation bubble originally allows only for wind conditions that are perpendicular to the grid. An overlaying computational grid is introduced in AeoLiS, which rotates with the changing wind direction per time step. By doing this, the shear stresses are always estimated in the positive x-direction of the computational grid. The following steps are executed for each time step: + +1. Create a computational ('Rotational') grid aligned with the wind direction (``set_computational_grid``). +2. Add and fill a buffer around the original ('Primary') grid. +3. Populate the computational grid by rotating it to the current wind direction and interpolate the original topography onto it. +4. Compute the morphology-wind induced shear stress by using the perturbation theory. +5. Add the wind-induced shear stresses to the computational grid. +6. Rotate both the grids and the total shear stress results in the opposite direction. +7. Interpolate the total shear stress results from the computational grid to the original grid. +8. Rotate the wind shear stress results and the original grid back to the original orientation. + +.. tip:: + Generating the rotational grid is computationally expensive. Consider the following optimizations to improve performance: + + * **Resolution:** The secondary rotational grid uses its own resolution parameters (``dx`` and ``dy``) defined in the configuration file. Ensure these are not coarser than your primary grid resolution to prevent information loss. + * **Buffer zones (FFT):** The FFT method assumes periodic boundaries. If the bed elevations at opposite edges of the domain differ, the FFT will artificially include this steep gradient, causing numerical wiggles. To mitigate this, define a buffer zone (``buffer``) that smoothly connects the edges outside your domain of interest. As a rule of thumb, set the buffer width to at least 5 times the maximum height difference between the domain edges. Check the boundaries for wiggles after an initial run, and reduce the buffer size if possible to save computational time. + * **Grid shape and 1D alternative:** Because the secondary grid acts as a bounding box, its size increases drastically for highly non-rectangular domains under oblique winds (e.g., a 1x100 grid under a 45° wind requires a secondary grid of approximately 71x71 cells). For (semi-)1D simulations, avoid this overhead by selecting ``method_shear = 1Dstacks``. This uses a direct analytical solution, bypassing the need for FFTs and rotational grids. + + +.. _vid-rotating-shear: + +.. video:: /images/rotating_shear.mp4 + :autoplay: + :loop: + :muted: + :width: 100% + + Animation demonstrating the rotational computational grid aligning with the changing wind direction to solve for topographic steering at each time step. + + +.. _shear-velocity-threshold: + +Shear Velocity Threshold +--------------------------- + +The shear velocity threshold represents the influence of bed surface +properties in the saturated sediment transport equation (``process_threshold``). The shear +velocity threshold is computed for each grid cell and sediment +fraction separately based on local bed surface properties, like +moisture, roughness elements and salt content. For each bed surface +property supported by the model a factor is computed to increase the +initial shear velocity threshold: + +.. math:: + :label: apx-shearvelocity + + u_{\mathrm{* th}} = + f_{u_{\mathrm{* th}}, \mathrm{M}} \cdot + f_{u_{\mathrm{* th}}, \mathrm{R}} \cdot + f_{u_{\mathrm{* th}}, \mathrm{NE}} \cdot + u_{\mathrm{* th, 0}} + +.. _base-threshold-grainsize: + +Grainsize (base) +^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The base shear velocity threshold :math:`u_{\mathrm{* th, 0}}` (``uth0``) [m/s] is +computed based on the grain size following :cite:`Bagnold1937b`: + +.. math:: + :label: shear + + u_{\mathrm{* th, 0}} = A \sqrt{ \frac{\rho_{\mathrm{p}} - \rho_{\mathrm{a}}}{\rho_{\mathrm{a}}} \cdot g \cdot d_{\mathrm{n}}} + +where :math:`A` (``Aa``) [-] is an empirical constant, :math:`\rho_{\mathrm{p}}` (``rhog``) +[:math:`\mathrm{kg/m^3}`] is the grain density, :math:`\rho_{\mathrm{a}}` (``rhoa``) +[:math:`\mathrm{kg/m^3}`] is the air density, :math:`g` (``g``) [:math:`\mathrm{m/s^2}`] is the +gravitational constant and :math:`d_{\mathrm{n}}` (``grain_size``) [m] is the nominal grain +size of the sediment fraction. + + +.. _threshold-moisture-content: + +Moisture content +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The shear velocity threshold (``th_moisture``) is updated based on moisture content +following :cite:`Belly1964`: + +.. math:: + :label: apx-moist + + f_{u_{\mathrm{* th}}, \mathrm{M}} = \max(1 \quad ; \quad 1.8 + 0.6 \cdot \log(p_{\mathrm{g}})) + +where :math:`f_{u_{\mathrm{* th},M}}` [-] is a factor in Equation :eq:`apx-shearvelocity`, :math:`p_{\mathrm{g}}` [-] is the geotechnical +mass content of water, which is the percentage of water compared to +the dry mass. The geotechnical mass content relates to the volumetric +water content :math:`p_{\mathrm{V}}` [-] according to: + +.. math:: + :label: vol-water + + p_{\mathrm{g}} = \frac{p_{\mathrm{V}} \cdot \rho_{\mathrm{w}}}{\rho_{\mathrm{p}} \cdot (1 - p)} + +where :math:`\rho_{\mathrm{w}}` [:math:`\mathrm{kg/m^3}`] and +:math:`\rho_{\mathrm{p}}` [:math:`\mathrm{kg/m^3}`] are the water and particle +density respectively and :math:`p` [-] is the porosity. Values for +:math:`p_{\mathrm{g}}` smaller than 0.005 do not affect the shear velocity +threshold :cite:`Pye1990`. Values larger than 0.064 (or 10\% +volumetric content) cease transport :cite:`DelgadoFernandez2010`, +which is implemented as an infinite shear velocity threshold. + +.. _threshold-roughness-elements: + +Roughness elements +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Sediment sorting may lead to the emergence of non-erodible elements +from the bed. Non-erodible roughness elements may shelter the erodible +bed from wind erosion due to shear partitioning, resulting in a +reduced sediment availability :cite:`Raupach1993` (``th_sheltering``). Therefore the +equation of :cite:`Raupach1993` is implemented according to: + +.. math:: + :label: raupach + + u_{\mathrm{* th, R}} = u_{\mathrm{* th}} \cdot \sqrt{ \left( 1 - m \cdot \sum_{k=k_0}^{n_{\mathrm{k}}}{w_k^{\mathrm{bed}}} \right) \left( 1 + \frac{m \beta}{\sigma} \cdot \sum_{k=k_0}^{n_{\mathrm{k}}}{w_k^{\mathrm{bed}}} \right) } + +in which :math:`\sigma` (``sigma``) is the ratio between the frontal area and the +basal area of the roughness elements and :math:`\beta` (``beta``) is the ratio +between the drag coefficients of the roughness elements and the bed +without roughness elements. :math:`m` (``m``) is a factor to account for the +difference between the mean and maximum shear stress and is usually +chosen 1.0 in wind tunnel experiments and may be lowered to 0.5 for +field applications. The roughness density :math:`\lambda` in the +original equation of :cite:`Raupach1993` is obtained from the mass +fraction in the bed surface layer :math:`w_k^{\mathrm{bed}}` according +to: + +.. math:: + :label: rough + + \lambda = \frac{\sum_{k=k_0}^{n_{\mathrm{k}}}{w_k^{\mathrm{bed}}}}{\sigma} + +in which :math:`k_0` is the index of the smallest non-erodible +sediment fraction in current conditions and :math:`n_{\mathrm{k}}` is the +total number of sediment fractions. It is assumed that the sediment +fractions are ordered by increasing size. Whether a fraction is +erodible depends on the sediment transport capacity. + +.. _threshold-non-erodible-layer: + +Non-erodible layer +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +The model allows for the definition of a spatially varying non-erodible layer beneath the active sand surface (``ne_file``). When the bed elevation :math:`z_{\mathrm{b}}` (``zb``) [:math:`\mathrm{m}`] erodes down to the elevation of this non-erodible layer :math:`z_{\mathrm{ne}}` (``zne``) [:math:`\mathrm{m}`], the sediment supply is completely cut off. + +This process (``th_nelayer``) implements the restriction by forcing the non-erodible scaling factor :math:`f_{u_{\mathrm{* th}}, \mathrm{NE}}` to approach infinity: + +.. math:: + :label: nelayer + + f_{u_{\mathrm{* th}}, \mathrm{NE}} = + \begin{cases} + \infty & \text{if } z_{\mathrm{b}} \leq z_{\mathrm{ne}} \\ + 1 & \text{if } z_{\mathrm{b}} > z_{\mathrm{ne}} + \end{cases} + +This effectively raises the velocity threshold to infinity, instantly ceasing any further entrainment from that grid cell. + +.. tip:: + AeoLiS does not include groundwater processes on the upper beach or in the dunes. I you suspect a wet layer restricts erosion on the upper beach or within dune slacks, the non-erodible layer can function as a proxy to keep the profile stable. It is also an essential processes for simulating bedforms migrating over hard surfaces, such as barchan dunes. + + + + +.. _vegetation: +Vegetation +------------ + +The description of the implementation of vegetation dynamics in AeoLiS is based on :cite:`Strypsteen2024`. + +In AeoLiS, the influence of vegetation on dune evolution is comprehensively +addressed. This includes modelling the intrinsic growth of vegetation, +accounting for factors such as growth and decay due to burial :cite:`DuranMoore2013`, +lateral expansion and establishment :cite:`Keijsers2016`, as well as simulating +the destruction of vegetation caused by hydrodynamic processes.In the event of +cell inundation, vegetation density is reduced as a result. + +.. _vegetation-metrics: +Vegetation Metrics +^^^^^^^^^^^^^^^^^^^ + +The vegetation density :math:`\rho_{\text{veg}}` can vary in space and time and is determined by the ratio of the actual vegetation height (hveg) +to the maximum vegetation height (:math:`h_{\text{veg,max}}`), and can vary between 0 and 1 (:cite:`DuranHerrmann2006`): + +.. math:: + :label: Vegetation_density + + \rho_{\text{veg}} = \left( \frac{h_{\text{veg}}}{h_{\text{veg,max}}} \right)^2 + + +This assumption is based on the idea that burying vegetation reduces its height, which indicates a decrease in +actual cover. The change in vegetation density per grid cell is directly linked to the alteration in vegetation +height within that specific cell. This height variation is influenced by both the growth rate of the vegetation and +the rate of sediment burial. If the vegetation density remains constant over time, it suggests either no +sedimentation or a growth rate equal to the rate of sediment burial within the cell. + + +.. _vegetation-development: + +Vegetation Development +^^^^^^^^^^^^^^^^^^^^^^^ + +Vegetation growth and decay follow the model proposed by :cite:`DuranHerrmann2006`, modified to include :math:`\delta z_{\text{b,opt}}` +(m/year), representing sediment burial for optimal growth that shifts the peak of optimal growth: + +.. math:: + :label: changes_vegetation_height + + \frac{\delta h_{\text{veg}}}{\delta t} = V_{\text{ver}} \left(1 - \frac{h_{\text{veg}}}{h_{\text{veg,max}}}\right) - \gamma_{\text{veg}} \left| \frac{\delta z_{\text{b,veg}}}{\delta t} - \delta z_{\text{b,opt}} \right| + +Here, :math:`\gamma_{\text{veg}}` (default = 1) is a sediment burial factor that accounts for the impact of +sediment burial on vegetation. The height of the vegetation (:math:`h_{\text{veg}}` in m) cannot be less than zero. +Vver represents the maximum vertical growth rate of vegetation given in m/year, while the sediment burial rate +:math:`\delta z_{\text{b,veg}}` [m] is determined as the bed level change per time step. By simply converting this +value to a bed level change per year multiple errors are induced, as the time scale over which the bed level change +actually occurs is much shorter than this one year. To compare the bed level change per time step with the +vegetation growth rate per year, an average bed level change is estimated over a specified time (default is one +day). This average is then extrapolated to an annual rate. This method ensures that sudden changes in the bed level +change over one time step are not used as an estimate of the total bed level change in one year, which would be far +too high. + +The optimal growth rate for certain vegetation species in dune environments is depending upon sediment burial :cite:`Maun1998`. +The optimal burial rate for maximum vegetation growth for marram grass for the neighbouring Dutch +coast is around 0.31 m/year with a burying tolerance of 0.78 to 0.96 m burial/year :cite:`Nolet2018`. This +optimal value is used in the model. :math:`V_{\text{ver}}` contains information of meteorological and local +conditions that enhance or inhibit vegetation growth process :cite:`Danin1991`, :cite:`Hesp1991`. + +.. _fig-Veg_growth: + +.. figure:: /images/Veg_growth.png + :width: 600px + :align: center + + A) The vegetation growth response varies with different vertical growth rates (example for Vver = 1 and 2 m/year). Optimal vegetation growth is determined by a burial rate of 0.31 + m/year, with a maximum vegetation height set at 1 m and a plant height of 0.5 m. Additionally, the growth response for varying burial factors is depicted (:math:`\lambda_{\text{veg}}` + = 1 and 2). B) Shear stress reduction for two different vegetation-related roughness parameters and vegetation densities (:math:`\Gamma` = 16 and 32). + +Vegetation can begin to grow through lateral propagation or random germination. Once established, it can continue +to grow and spread laterally. The uncertainties associated with random germination are handled on a cell-by-cell +basis using a probabilistic approach, similar to the cellular automata method described by Keijsers et al. (2016). +AeoLiS incorporates a germination probability, denoted as ρ_{ger}, for each grid cell. This probability is constant +across the domain, except in eroding grid cells (where bed elevation decreases), where ρ_{ger} is set to 0. Lateral +propagation is determined by identifying the boundaries between vegetated and non-vegetated cells, with the +parameter ρ_{lat} adjusting the likelihood of lateral propagation at these boundaries. + +.. tip:: + Meaning of these variables (Vver or Gh) -> 4 m/year does not mean vegetation 4 meter high after 1 year. + +.. _vegetation-induced-shear-reduction: +Vegetation-induced Shear Reduction +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +Inspired by the Coastal Dune Model (CDM) proposed by :cite:`DuranMoore2013`, AeoLiS +incorporates vegetation-wind interaction using the expression established by :cite:`DuranHerrmann2006`: + +.. math:: + :label: shear_reduction_vegetation + + \frac{u_{\text{veg}}}{u_*} = \frac{1}{\sqrt{1 + \Gamma \rho_{\text{veg}}}} + + +where the ratio of shear velocity in the presence of vegetation (:math:`u_{*,\text{veg}}`) to the unobstructed +shear velocity (:math:`u_*`) is determined by a vegetation-related roughness parameter (:math:`\Gamma`) and the +vegetation density within a unit area of the grid cell (:math:`\rho_{\text{veg}}`). In the model, :math:`\Gamma` = 16 is derived +from plant form drag and geometry values documented for creosote communities :cite:`DuranHerrmann2006`. +This implementation calculates the expression on each model grid cell, with higher vegetation density +(expressed by :math:`\rho_{\text{veg}}`) leading to a more substantial reduction in shear velocity compared to sparse +vegetation. By integrating these physical and ecological processes, AeoLiS simulates spatial patterns and temporal +variations in sediment transport and morphological changes resulting from aeolian processes in coastal +environments. + + +.. _vegetation-computing-zeta: +Computing bed-interaction (zeta) over vegetation +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +PLACEHOLDER + + +.. _vegetation-mortality: +Vegetation Mortality +^^^^^^^^^^^^^^^^^^^^^^^^ + +PLACEHOLDER + + +.. _hydrodynamics-moisture: +Hydrodynamics and Surface Moisture +------------------------------------- + +Aeolis computes .... for ... and ... and ... + + +.. _water-levels-waves-run-up: + +Water levels, Waves and Run-up +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +PLACEHOLDER: TWL, SWL, zs, hw, eta, R, ... + +The runup height and wave setup are computed using the Stockdon formulas :cite:`Stockdon2006`. +Their parameterization differs depending on the dynamic beach steepness expressed through the Irribaren number: + +.. math:: + :label: irribaren + + \xi = \tan \beta /\sqrt {{H_0}/{L_0}} + +where :math:`{H_0}` is the significant offshore wave height, :math:`{L_0}` is the deepwater wavelength, and :math:`{\tan \beta}` is the foreshore slope. + +For dissipative conditions, :math:`{\xi}` < 0.3, the runup, :math:`{R_2}`, is parameterized as, + +.. math:: + :label: runup_dissipative + + {R_2} = 0.043\sqrt {{H_0}{L_0}} + +and wave setup: + +.. math:: + :label: setup_dissipative + + < \eta > = 0.02\sqrt {{H_0}{L_0}} + +For :math:`{\xi}` > 0.3, runup is paramterized as, + +.. math:: + :label: runup + + {R_2} = 1.1\left( {0.35\beta \sqrt {{H_0}{L_0}} + \frac{{\sqrt {{H_0}{L_0}\left( {0.563{\beta ^2} + 0.004} \right)} }}{2}} \right) + +and wave setup: + +.. math:: + :label: setup + + < \eta > = 0.35\xi + + +.. _surface-moisture: +Surface Moisture +^^^^^^^^^^^^^^^^^^^^^ + +PLACEHOLDER + + +.. _hydraulic-sediment-mixing: +Hydraulic Sediment Mixing +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +PLACEHOLDER + +.. _marine-driven-bed-level-change: +Marine-driven Bed Level Change +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +PLACEHOLDER + + +.. _groundwater-module: +Groundwater Module (Hallin, 2023) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + +Wave runup, capillary rise from the beach groundwater, and precipitation periodically wet the intertidal beach +temporally increasing the shear velocity threshold ( +:numref:`fig-moisture-processes`). Infiltration and +evaporation subsequently dry the beach. + +.. _fig-moisture-processes: + +.. figure:: /images/moisture_processes.jpg + :align: center + + Illustration of processes influencing the volumetric moisture content :math:`\theta` at the beach surface. + +The structure of the surface moisture module and included processes are schematized in :numref:`fig-moisture-scheme`. +The resulting surface moisture is obtained by selecting the largest of the moisture contents computed +with the water balance approach (right column) and due to capillary rise from the groundwater table (left column). +The method is based on the assumption that the flow of soil water is small compared to the flow of groundwater +and that the beach groundwater dynamics primarily is controlled by the water level and wave action at +the seaward boundary :cite:`Raubenheimer1999`, :cite:`Schmutz2014`. Thus, there is no feedback between the processes +in the right column of :numref:`fig-moisture-scheme` and the groundwater dynamics described in the left column. + +.. _fig-moisture-scheme: + +.. figure:: /images/moisture_scheme.jpg + :width: 600px + :align: center + + Implementation of surface moisture processes in the AeoLiS. + +Groundwater under sandy beaches can be considered as shallow aquifers, with only horizontal groundwater +flow so that the pressure distribution is hydrostatic :cite:`Baird1998,Brakenhoff2019,Nielsen1990,Raubenheimer1999`. +The cross-shore flow dominates temporal variations of groundwater levels. Alongshore, groundwater table variations are typically small :cite:`Schmutz2014`. +Although the surface moisture model can be extended over a two-dimensional grid, the groundwater simulations are performed for 1D transects cross-shore +to avoid numerical instabilities at the seaward boundary and reduce computational time. + +The beach aquifers is schematised as a sandy body, with saturated hydraulic conductivity, :math:`K`, and effective porosity, :math:`{n_e}`. +The aquifer is assumed to rest on an impermeable surface, where :math:`D` is the aquifer depth. +The groundwater elevation relative to the mean sea level (MSL) is denoted :math:`\eta`, and the shore-perpendicular x-axis is positive landwards, +with an arbitrary starting point. The sand is assumed to be homogenous and isotropic. In this context, isotropy implies that hydraulic conductivity +is independent of flow direction. + +The horizontal groundwater discharge per unit area, :math:`u`, is then governed by Darcy’s law, + +.. math:: + :label: gw-discharge + + u = - K\frac{{\partial \eta }}{{\partial x}} + +and the continuity equation (see e.g., :cite:`Nielsen2009`), + +.. math:: + :label: gw-continuity + + \frac{{\partial \eta }}{{\partial t}} = - \frac{1}{{{n_e}}}\frac{\partial }{{\partial x}}((D + \eta )u) + +where :math:`t` is time. + +The groundwater overheight due to runup, :math:`{U_l}`, is computed by :cite:`Kang1994,Nielsen1988`, + +.. math:: + :label: gw-runup + + {U_l} = \left\{ \begin{gathered}{C_l}Kf(x)\,\,\,\,{\text{if }}{x_S} \leqslant x \leqslant {x_R} \hfill \\0,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,\,{\text{if }}x > {x_R} \hfill \\\end{gathered} \right. + +where :math:`{C_l}` is an infiltration coefficient (-), and :math:`f(x)` is a function of :math:`x` ranging from 0 to 1. :math:`{x_S}` is +the horizontal location of the sum of the still water level and wave setup, and :math:`{x_R}` is the horizontal location of the runup limit: + +.. math:: + :label: gw-runup-distribution + + f(x) = \left\{ \begin{gathered} + \frac{{x - {x_s}}}{{\frac{2}{3}\left( {{x_{ru}} - {x_s}} \right)}}\,\,\,\,\,\,\,\,\,\,\,\,\,if\,{x_s} < x \leqslant {x_s} + \frac{2}{3}\left( {{x_{ru}} - {x_s}} \right)\, \hfill \\ + 3 - \frac{{x - {x_s}}}{{\frac{1}{3}\left( {{x_{ru}} - {x_s}} \right)}}\,\,\,\,\,if\,{x_s} + \frac{2}{3}\left( {{x_{ru}} - {x_s}} \right)\, < x < {x_{ru}} \hfill \\ + \end{gathered} \right. + +Substitution of :math:`u` (Equation :eq:`gw-discharge`) in the continuity equation (Equation :eq:`gw-continuity`) with the addition of :math:`{U_l}/{n_e}` gives the nonlinear Boussinesq equation: + +.. math:: + :label: boussinesq + + \frac{{\partial \eta }}{{\partial t}} = \frac{K}{{{n_e}}}\frac{\partial }{{\partial x}}\left( {(D + \eta )\frac{{\partial \eta }}{{\partial x}}} \right) + \frac{{{U_l}}}{{{n_e}}} + +Numerical solution of the Boussinesq groundwater equation +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +The Boussinesq equation is solved numerically with a central finite difference +method in space and a fourth-order Runge-Kutta integration technique in time: + +.. math:: + :label: solve-boussinesq + + f(\eta ) = \frac{K}{{{n_e}}}\left[ {D\underbrace {\frac{{{\partial ^2}\eta }}{{\partial {x^2}}}}_a + \underbrace {\frac{\partial }{{\partial x}}\underbrace {\left\{ {\eta \frac{{\partial \eta }}{{\partial x}}} \right\}}_b}_c} \right] + +The Runge-Kutta time-stepping, where :math:`\Delta t` is the length of the timestep, is defined as, + +.. math:: + :label: runge-kutta + + \begin{gathered} + \eta _i^{t + 1} = \eta _i^t + \frac{{\Delta t}}{6}\left( {{f_1} + 2{f_2} + 2{f_3} + {f_4}} \right) \hfill \\ + {f_1} = f(\eta _i^t) \hfill \\ + {f_2} = f\left( {\eta _i^t + \frac{{\Delta t}}{2}{f_1}} \right) \hfill \\ + {f_3} = f\left( {\eta _i^t + \frac{{\Delta t}}{2}{f_2}} \right) \hfill \\ + {f_4} = f\left( {\eta _i^t + \Delta t{f_3}} \right) \hfill \\ + \end{gathered} + +where, :math:`i` is the grid cell in x-direction and :math:`t` is the timestep. The central difference solution to :math:`f(\eta)` is obtained through discretisation of the Boussinesq equation, + +.. math:: + :label: a-solve + + {a_i} = \frac{{\eta _{i + 1}^{} - 2\eta _i^{} + \eta _{i - 1}^{}}}{{{{(\Delta x)}^2}}} + +.. math:: + {b_i} = \frac{{\eta _i^{}\left( {\eta _{i + 1}^{} - \eta _{i - 1}^{}} \right)}}{{\Delta x}} + +.. math:: + {c_i} = \frac{{\left( {b_{i + 1}^{} - b_{i - 1}^{}} \right)}}{{\Delta x}} + +The seaward boundary condition is defined as the still water level plus the wave setup . +If the groundwater elevation is larger than the bed elevation, there is a seepage face, +and the groundwater elevation is set equal to the bed elevation. On the landward boundary, +a no-flow condition, :math:`\frac{{\partial \eta }}{{\partial t}} = 0` (Neumann condition), or constant head, :math:`\eta = constant` (Dirichlet condition), is prescribed. + +Capillary rise +~~~~~~~~~~~~~~~~ +Soil water retention (SWR) functions describe the surface moisture due to capillary transport +of water from the groundwater table :cite:`VanGenuchten1980`: + +.. math:: + :label: vangenuchten + + \theta (h) = {\theta _r} + \frac{{{\theta _s} - {\theta _r}}}{{{{\left[ {1 + {{\left| {\alpha h} \right|}^n}} \right]}^m}}} + + +where :math:`h` is the groundwater table depth, :math:`\alpha` and :math:`n` are fitting parameters +related to the air entry suction and the pore size distribution. The parameter :math:`m` is commonly +parameterised as :math:`m = 1 - 1/n`. + +The resulting surface moisture is computed for both drying and +wetting conditions, i.e., including the +effect of hysteresis. The moisture contents computed with drying and wetting SWR functions are denoted :math:`{\theta ^d}(h)` and :math:`{\theta ^w}(h)`, respectively. +When moving between wetting and drying conditions, the soil moisture content follows an intermediate +retention curve called a scanning curve. The drying scanning curves are scaled from the main +drying curve and wetting scanning curves from the main wetting curve. The drying scanning curve is then obtained from :cite:`Mualem1974`: + +.. math:: + :label: mualem-drying + + {\theta ^d}({h_\Delta },h) = {\theta ^w}(h) + \frac{{\left[ {{\theta ^w}({h_\Delta }) - {\theta ^w}(h)} \right]}}{{\left[ {{\theta _s} - {\theta ^w}(h)} \right]}}\left[ {{\theta ^d}(h) - {\theta ^w}(h)} \right] + +where :math:`{h_\Delta}` is the groundwater table depth at the reversal on the wetting curve. + +The wetting scanning curve is obtained from :cite:`Mualem1974`: + +.. math:: + :label: mualem-wetting + + {\theta ^w}({h_\Delta },h) = {\theta ^w}(h) + \frac{{\left[ {{\theta _s} - {\theta ^w}(h)} \right]}}{{\left[ {{\theta _s} - {\theta ^w}({h_\Delta })} \right]}}\left[ {{\theta ^d}({h_\Delta }) - {\theta ^w}({h_\Delta })} \right] + +where :math:`{h_\Delta}` is the groundwater table depth at the reversal on the drying curve. + +Infiltration +~~~~~~~~~~~~~~ +Infiltration is accounted for by assuming that excess water infiltrates until the moisture content reaches +field capacity, :math:`{\theta_fc}`. The moisture content at field capacity is the maximum amount of water +that the unsaturated zone of soil can hold against the pull of gravity. For sandy soils, +the matric potential at this soil moisture condition is around - 1/10 bar. In equilibrium, +this potential would be exerted on the soil capillaries at the soil surface when the water +table is about 100 cm below the soil surface, :math:`{\theta _{fc}} = {\theta ^d}(100)`. + +Infiltration is represented by an +exponential decay function that is governed by a drying time scale +:math:`T_{\mathrm{dry}}`. Exploratory model runs of the unsaturated soil with the HYDRUS1D +:cite:`Simunek1998` hydrology model show that the increase of the +volumetric water content to saturation is almost instantaneous with +rising tide. The drying of the beach surface through infiltration +shows an exponential decay. In order to capture this behavior the +volumetric water content is implemented according to: + +.. math:: + :label: infiltration + + \frac{{d\theta }}{{dt}} = \left( {\theta - {\theta _{fc}}} \right)\left( {{e^{ - \ln (2)\frac{{dt}}{{{T_{dry}}}}}}} \right) + +An alternative formulation is used for simulations that does not account for ground water and SWR processes, + +.. math:: + :label: apx-drying + + p_{\mathrm{V}}^{n+1} = \left\{ + \begin{array}{ll} + p & \mathrm{if} ~ \eta > z_{\mathrm{b}} \\ + p_{\mathrm{V}}^n \cdot e^{\frac{\log \left( 0.5 \right)}{T_{\mathrm{dry}}} \cdot \Delta t^n} - E_{\mathrm{v}} \cdot \frac{\Delta t^n}{\Delta z} & \mathrm{if} ~ \eta \leq z_{\mathrm{b}} \\ + \end{array} + \right. + +where :math:`\eta` [m+MSL] is the instantaneous water level, +:math:`z_{\mathrm{b}}` [m+MSL] is the local bed elevation, +:math:`p_{\mathrm{V}}^n` [-] is the volumetric water content in time step +:math:`n`, :math:`\Delta t^n` [s] is the model time step and :math:`\Delta z` is the bed +composition layer thickness. :math:`T_{\mathrm{dry}}` [s] is the beach +drying time scale, defined as the time in which the beach moisture +content halves. + +Precipitation and evaporation +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +A water balance approach accounts for the effect of precipitation and evaporation, + +.. math:: + :label: precipitation + + \frac{{d\theta }}{{dt}} = \frac{{\left( {P - E} \right)\,}}{{\Delta z}}\, + +where :math:`P` is the precipitation, :math:`E` is the evaporation, and :math:`\Delta z` is the thickness of the surface layer. + +Evaporation is simulated using an adapted version +of the Penman-Monteith equation :cite:`Shuttleworth1993` that is +governed by meteorological time series of solar radiation, temperature +and humidity. + +:math:`E_{\mathrm{v}}` [m/s] is the evaporation rate that is +implemented through an adapted version of the Penman equation +:cite:`Shuttleworth1993`: + +.. math:: + :label: apx-penman + + E_{\mathrm{v}} = \frac{m_{\mathrm{v}} \cdot R_{\mathrm{n}} + 6.43 \cdot \gamma_{\mathrm{v}} \cdot (1 + 0.536 \cdot u_2) \cdot \delta e} + {\lambda_{\mathrm{v}} \cdot (m_{\mathrm{v}} + \gamma_{\mathrm{v}})} \cdot 9 \cdot 10^7 + +where :math:`m_{\mathrm{v}}` [kPa/K] is the slope of the +saturation vapor pressure curve, :math:`R_{\mathrm{n}}` +[:math:`\mathrm{MJ/m^2/day}`] is the net radiance, :math:`\gamma_{\mathrm{v}}` +[kPa/K] is the psychrometric constant, :math:`u_2` [m/s] is the wind speed +at 2 m above the bed, :math:`\delta e` [kPa] is the vapor pressure deficit +(related to the relative humidity) and :math:`\lambda_{\mathrm{v}}` [MJ/kg] +is the latent heat vaporization. To obtain an evaporation rate in +[m/s], the original formulation is multiplied by :math:`9 \cdot 10^7`. + + + +.. _morphological-change: + +Morphological change +--------------------- + +PLACEHOLDER + +.. _bed-level-update: + +Bed Level Update +^^^^^^^^^^^^^^^^^ + +PLACEHOLDER + +.. _avalanching: +Avalanching +^^^^^^^^^^^^^ + +PLACEHOLDER + +Marine-driven Morphodynamics +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +PLACEHOLDER: See section... + diff --git a/docs/user/model_interaction.rst b/docs/user/model_interaction.rst new file mode 100644 index 00000000..c4d64022 --- /dev/null +++ b/docs/user/model_interaction.rst @@ -0,0 +1,90 @@ +Model interaction +================= + +AeoLiS includes several features that enable user-model interaction during runtime. These interactions can be used to modify model parameters over time, integrate with other models, or perform model-data assimilation. + +Callback function +----------------- + +As a convenience functionality the current implementation +supports the specification of a callback function. The callback +function is called at the start of each time step and can be used to +exchange data with the model, e.g. update the topography from +measurements. + +An example of a callback function, that is referenced in the model +input file or through the model command-line options as +``callback.py:update``, is: + +.. code:: + + import numpy as np + + def update(model): + val = model.get_var('zb') + val_new = val.copy() + val_new[:,:] = np.loadtxt('measured_topography.txt') + model.set_var('zb', val_new) + + + +Hotstart +-------- + + +Basic Model Interface (BMI) +--------------------------- + +A Basic Model Interface (BMI, :cite:`Peckham2013`) is implemented +that allows interaction with the model during run time. The model can +be implemented as a library within a larger framework as the interface +exposes the initialization, finalization and time stepping +routines. Because of that, we can use this set of functions to control +and interact with AeoLiS from a Python environment. + + +.. code:: + + import numpy as np + + # Timing settigns + start_time = 0. + end_time = 157680000. + dt = 3600. # 1 day (output frequency of dfm output) + + # Find file in the same directory as this script that contains aeolis.txt + configfile = 'aeolis.txt' + os.chdir(os.path.dirname(configfile)) + + # Create AeoLiS BMI Wrapper + aeolis_wrapper = AeoLiSRunner(configfile) + + # Initialize the wrapper + aeolis_wrapper.initialize() + + # Loop over all timesteps to run the model + for t in np.arange(start_time, end_time, dt): + + # Update AeoLiS + aeolis_wrapper.update(dt) + aeolis_wrapper.output_write() + + # Make modifications to the variables in the model via data or another model, e.g.: + # x_aeolis = aeolis_wrapper.get_var('x') + # y_aeolis = aeolis_wrapper.get_var('y’) + + # aeolis_wrapper.set_var('zb', zb_aeolis) + + # Finalize the wrapper + aeolis_wrapper.finalize() + + +An overview of recent BMI-AeoLiS applications: + - van Westen, B., Luijendijk, A. P., de Vries, S., Cohn, N., Leijnse, T. W., & de Schipper, M. A. (2024). Predicting marine and aeolian contributions to the Sand Engine’s evolution using coupled modelling. Coastal Engineering, 188, 104444. (https://www.sciencedirect.com/science/article/pii/S0378383923001680) + - van Westen, B., Leijnse, T., de Schipper, M., Cohn, N., & Luijendijk, A. (2023). Integrated modelling of coastal landforms. In Coastal Sediments 2023: The Proceedings of the Coastal Sediments 2023 (pp. 760-771). (https://pure.tudelft.nl/ws/portalfiles/portal/152631531/Integrated_modelling_Bvw_CS23.pdf) + + + + + + diff --git a/docs/user/model_setup.rst b/docs/user/model_setup.rst new file mode 100644 index 00000000..203c699d --- /dev/null +++ b/docs/user/model_setup.rst @@ -0,0 +1,919 @@ +.. _model-input-output: + +Model in- & output +================= +Setting up an AeoLiS model involves configuring various parameters and input files. In this section, we will cover: + +- **Model Input**: The input files and their formats. +- **Model Output**: How to analyse the output. +- **Default settings**: Overview of the model parameters, incl. default values. +- **Activate/deactivate processes**: Process flags. +- **Model state/output**: Overview of model state variables. +- **Guidance on solver use** + +A general tip for setting up an AeoLiS model is to start simple and build up the complexity. As a starting point, use the default values and then slowly deviate from those and turn on processes. Start with a relatively coarse grid to allow for faster simulation testing. It is also highly recommended to start with constant conditions, such as a one-directional constant wind, making it easier to interpret if the model output is logical. + +While testing, go through the sequential steps AeoLiS takes, plot the variables, and critically assess whether the results are expected. Important model state variables to check include: wind speed and direction (``uws``, ``uwn``), shear velocity (``ustars``, ``ustarn``), velocity threshold (``uth``), sediment concentrations (``Cu``, ``Ct``), pickup (``pickup``), and, finally, the resulting bed level change (``zb``, ``dzb``). + +In case you run into issues, we encourage users to post questions and case studies on the `AeoLiS Discussion Board`_. We use this public forum so our help and advice is available to everyone. + +.. _AeoLiS Discussion Board: https://github.com/openearth/aeolis-python/discussions + +.. _model-input: + +Model input +----------- + +The computational grid and boundary conditions for AeoLiS are specified through external +input files called by the main configuration file. The computational domain is defined +using specific spatial files (``*.grd``), while boundary conditions for wind, wave, and tides +are provided via ``*.txt`` files. An overview of these files is provided in the table below. + +.. list-table:: + :widths: 15 15 15 15 40 + :header-rows: 1 + + * - Input File + - Keyword + - Dimensions + - Requirement + - File Description + * - aeolis.txt + - N/A + - N/A + - Mandatory + - Main file containing parameter definitions + * - x.grd + - ``xgrid_file`` + - (ny, nx) + - Mandatory + - File containing cross-shore grid coordinates + * - y.grd + - ``ygrid_file`` + - (ny, nx) + - Mandatory + - File containing alongshore grid coordinates + * - z.grd + - ``bed_file`` + - (ny, nx) + - Mandatory + - File containing topography and bathymetry data (bed level) + * - zne.grd + - ``ne_layer_file`` + - (ny, nx) + - Optional + - File containing the non-erodible layer elevation + * - veg.grd + - ``veg_file`` + - (ny, nx) + - Optional + - Initial vegetation density (if ``process_vegetation = T``) + * - hveg.grd + - ``hveg_file`` + - (ny*nx*nspecies) + - Optional + - Vegetation height per species (if ``method_vegetation = grass``) + * - Nt.grd + - ``Nt_file`` + - (ny*nx*nspecies) + - Optional + - Vegetation density/tillers per species (if ``method_vegetation = grass``) + * - mass.txt + - ``mass_file`` + - (nx*ny, nfractions*nlayers) + - Optional + - Sediment mass data (for space-varying grain sizes) + * - wind.txt + - ``wind_file`` + - (ntimesteps, 3) + - Mandatory + - File containing wind speed and direction data + * - tide.txt + - ``tide_file`` + - (ntimesteps, 2) + - Optional + - Water elevation data (if ``process_tide = T``) + * - wave.txt + - ``wave_file`` + - (ntimesteps, 3) + - Optional + - Wave height and period data (if ``process_wave = T``) + * - meteo.txt + - ``meteo_file`` + - (ntimesteps, 6) + - Optional + - Meteorological data (if ``process_groundwater = T``) + * - mask_*.grd + - ``mask_tide``, etc. + - (ny, nx) + - Optional + - Spatial masks for tide, wave, or runup boundary conditions + +Configuration file (aeolis.txt) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +The main configuration file controls all processes and input files. +Parameters in the file are specified by various keywords; each keyword has a pre-defined +default value (see ``constants.py`` and the Default settings tab) that will be used if it is not directly specified. Among the keywords +are those defining grid files (``xgrid_file``, ``ygrid_file``, +``bed_file``) and boundary conditions (``tide_file``, ``wave_file``, ``wind_file``). +Physical processes in AeoLiS can be toggled by setting process keywords to True (``T``) or False (``F``). +Example parameter files can be found in the examples folder on the AeoLiS GitHub. + +.. _grid-files: + +Grid files (\*.grd) +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +All grid files (``x.grd``, ``y.grd``, ``z.grd``, ``zne.grd``, ``veg.grd``, etc.) must have the exact same dimensions. +Each value (or element) within these matrices represents a single computational cell. This means that element `[i, j]` +in the ``x.grd`` file corresponds to the exact same physical cell as element `[i, j]` in the ``z.grd`` file. + +The model can be run in 1D and 2D mode depending on the input dimensions. Most processes are implemented in 2D mode. To run the model in 2D mode, all grid files should contain 2D matrices ``(ny, nx)`` of the same size. To run the model in 1D mode, all grid files should contain 1D vectors ``(nx, 1)``. Because some processes are easier to solve in 2D, the 1D model is internally converted to a quasi-2D model by repeating the vectors three times ``(nx, 3)``, assuming the same resolution spacing as the cross-shore direction. Results are then converted back to 1D by extracting the middle vector. + +x.grd and y.grd (coordinates) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +The ``x.grd`` and ``y.grd`` files define the coordinates of the computational grid in meters. Important: The structure and order of the elements in these files determines the boundary definitions (i.e., which boundary is on which edge, what is longshore, what is cross-shore), while the specific coordinates determine the location and orientation of the domain. To ensure the model correctly interprets model grids, generation should follow this step-by-step approach (see also Python example further down below): + +1. **Define dimensions and resolution:** Set your domain length and grid spacing. At this stage, the x-direction always represents cross-shore and y-direction longshore. The model does not (yet) support variable grid sizes; the cross-shore resolution must equal the alongshore resolution (e.g., ``dx = 10; dy = 10``). +2. **Create domain axes:** Generate 1D arrays for the cross-shore (x) and alongshore (y) directions. Both arrays must be ascending. In case of the x-array, the first element (``x[0]``) is at the onshore boundary, and the last element (``x[-1]``) is the offshore boundary (e.g., ``x = np.arange(0, Lx + dx, dx)``). +3. **Generate the grid:** Use the 1D axes to create 2D coordinate matrices (e.g., ``X, Y = np.meshgrid(x, y)``). +4. **Shift and rotate:** Now, shift and rotate the coordinatet to match the desired real-world location and orientation (e.g., ``Xr = X * np.cos(theta) - Y * np.sin(theta) + x0``). Following this order ensures both the structure of the files and the actual coordinates are correct. + +By handling the physical orientation through the grid coordinates, the model orientation keyword ``alfa`` is no longer required and should be left untouched. + +z.grd (bed level) +~~~~~~~~~~~~~~~~~ +The ``z.grd`` file provides the surface elevation for every cell defined in the spatial grids. Elevation values should be defined such that positive values are above the vertical datum (up) and negative values are below (down). + +zne.grd (non-erodible Layer) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +The ``zne.grd`` file defines the elevation of the non-erodible layer beneath the sand surface. The model will not erode sediment below this elevation. It follows the same dimensions and elevation datum as ``z.grd``. + +veg.grd (vegetation) +~~~~~~~~~~~~~~~~~~~~ +The ``veg.grd`` file is an optional grid providing the initial vegetation coverage (density) at each cell (0-1). + +.. _fig-veg-inputs: + +.. figure:: /images/vegetation_text_file.jpeg + :alt: vegetation input format + :width: 200px + :align: center + + File format for a 1D AeoLis vegetation grid. Each red dot is the vegetation density at a specific location in the computational grid. + +.. _masks: + +Masks (tide, wave, and runup) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Masks (e.g., ``mask_tide``, ``mask_wave``, ``mask_runup``) can be used to spatially modify boundary conditions. This can be useful when, for instance, onshore elevations are lower than the offshore water level but remain dry, or when water bodies are disconnected from the offshore (such as a barrier island where the lagoon has no tidal or wave action). + +Masks use complex numbers to apply both a scaling multiplier (real) and a static offset (complex) to the boundary condition. For instance, for waveheight (Hs): ``Hs = $\mathbb{R}$ * Hs + $\mathbb{C}$``. To half the boundary value in a specific area (e.g., sheltered waves inland), use ``0.5``. To set a fixed static value regardless of the incoming boundary condition (e.g., an inland lake permanently fixed at +2m water level), use a complex value such as ``0 + 2j``. + +*Example Python script* +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +Generating the grid files described above + +.. code-block:: python + + import numpy as np + + # 1. Define dimensions and resolution + Lx, Ly = 1000, 500 # Lx is always cross-shore, Ly is longshore + dx = 10 # dx must equal dy + + x0, y0 = 5000, 5000 # coordinates for a grid corner point + theta = np.radians(30) # grid rotation in radians + + # 2. Create axes + x = np.arange(0, Lx + dx, dx) # must be ascending (first=onshore, last=offshore) + y = np.arange(0, Ly + dx, dx) + + # 3. Create orthogonal grid + X, Y = np.meshgrid(x, y) + + # 4. Rotate and shift domain to real-world coordinates + Xr = X * np.cos(theta) - Y * np.sin(theta) + x0 + Yr = X * np.sin(theta) + Y * np.cos(theta) + y0 + # *Because orientation is baked into the coordinates, set `alfa = 0` in aeolis.txt* + + # 5. Populate specific grid variables + z = np.zeros_like(X) # example: Flat bed level at 0.0m + zne = np.full_like(z, -2.0) # example: Flat non-erodible layer at -2.0m + veg = np.zeros_like(z) # example: no initial vegetation + + # 6. Create masks (e.g., tide mask for an inland lake) + tide_mask = np.ones_like(X, dtype=complex) + tide_mask[:, :10] = 0.0 + 2.0j # 0.0 multiplier (no tidal variation) + 2.0j elevated + + # Save outputs to text files (to be read as .grd) + np.savetxt('x.grd', Xr) + np.savetxt('y.grd', Yr) + np.savetxt('z.grd', z) + np.savetxt('zne.grd', zne) + np.savetxt('veg.grd', veg) + np.savetxt('mask_tide.grd', tide_mask) + +Multi-dimensional input +~~~~~~~~~~~~~~~~~~~~~~~ +Some variables require multiple dimensions per spatial grid cell, such as spatially varying grain sizes (multiple fractions and bed layers) or complex vegetation cover (multiple species). AeoLiS requires these multi-dimensional arrays to be flattened into lower-dimensional formats before they can be saved as textfiles. + +* **mass.txt**: Defines the mass of each sediment fraction per bed layer. If the grain size distribution is uniform across the domain, which is most often the case, this file is not needed (see keywords ``grain_dist`` and ``grain_size`` in the configuration file). The 4D shape of `(ny, nx, nlayers, nfractions)` must be reshaped into a 2D matrix of shape `(nx * ny, nfractions * nlayers)`. The rows represent the flattened spatial coordinates, and the columns are grouped by bed layer (e.g., Layer 1: Fraction 1, Fraction 2; Layer 2: Fraction 1, Fraction 2). +* **hveg.grd and Nt.grd**: When using the grass vegetation method (``method_vegetation = grass``), the model needs vegetation height (``hveg``) and density (``Nt``). Because this method supports multiple interacting species, the 3D shape of `(ny, nx, nspecies)` is flattened into a 1D vector of shape `(ny * nx * nspecies)`. + +.. _fig-mass-inputs-2D: + +.. figure:: /images/mass_text_file_2D.jpeg + :alt: mass file format 2D + :width: 550px + :align: center + + File format for a 2D AeoLis mass file for spatially variable grain size distributions. Each red dot is the mass for a specific sediment fraction within a specific bed layer at a given spatial location. + +Example Python script +~~~~~~~~~~~~~~~~~~~~~ +Loading spatial grid dimensions and generating multi-dimensional input grids. + +.. code-block:: python + + import numpy as np + + # 1. Load spatial grid to get dimensions + X = np.loadtxt('x.grd') + ny, nx = X.shape + n_cells = ny * nx + n_species = 2 + + # 2a. Create mass.txt (sediment fractions and layers) + n_layers = 3 + n_fractions = 4 + mass_per_fraction = np.array([0.4, 0.3, 0.2, 0.1]) # kg per fraction (uniform sediment distribution across the domain) + + # Create the mass matrix using tile + mass_matrix = np.tile(mass_per_fraction, (n_cells, n_layers)) # (n_cells, n_fractions * n_layers) + + # Initialize the vegetation arrays + hveg = np.zeros((ny, nx, n_species)) + Nt = np.zeros((ny, nx, n_species)) + + # Fill the vegetation arrays + hveg[:, :, 0] = 0.5 # first species is 0.5m tall + hveg[:, :, 1] = 1.0 # second species is 1.0m tall + Nt[:, :, 0] = 10.0 # tillers/m2 + Nt[:, :, 1] = 5.0 + + # Flatten the vegetation arrays + hveg_flat = hveg.reshape(-1) + Nt_flat = Nt.reshape(-1) + + # Save files + np.savetxt('mass.txt', mass_matrix) + np.savetxt('hveg.grd', hveg_flat) + np.savetxt('Nt.grd', Nt_flat) + +.. _timeseries: + +Time-series (*.txt) +^^^^^^^^^^^^^^^^^^^ +Environmental forcing in AeoLiS (wind, water, waves) is provided through time-series files. For all of these files, the format follows the same structure: the first column represents time in seconds w.r.t. ``refdate`` in the configruation file. The other columns contain the variables at those given times. The model will automatically interpolate these data points to match the modelling time steps. + +wind.txt +~~~~~~~~ +The ``wind.txt`` file provides the wind boundary conditions driving aeolian transport. It contains three columns: 1. Time (s), 2. Wind speed (m/s), 3. Wind direction (degrees). Wind directions can be specified in either nautical or cartesian convention, which is set using the ``wind_convention`` keyword in the configuration file. + +.. _fig-wind-inputs: + +.. figure:: /images/wind_text_file_graphic.jpeg + :alt: wind input format + :width: 300px + :align: center + + File format for wind boundary conditions file for AeoLis input. + +tide.txt +~~~~~~~~ +The ``tide.txt`` file contains the water elevation data for the duration of the simulation. It contains two columns: 1. Time (s), 2. Water elevation (m) + +.. _fig-tide-inputs: + +.. figure:: /images/tide_text_file.jpeg + :alt: tide input format + :width: 300px + :align: center + + File format for the water elevation conditions file for AeoLis input. + +wave.txt +~~~~~~~~ +The ``wave.txt`` file provides the wave data used by AeoLiS to calculate runup. It contains three columns: 1. Time (s), 2. Significant wave height (m), 3. Peak wave period (s) + +.. _fig-wave-inputs: + +.. figure:: /images/wave_text_file_graphic.jpeg + :alt: wave input format + :width: 300px + :align: center + + File format for the wave conditions file for AeoLis input. + +meteo.txt +~~~~~~~~~ +The ``meteo.txt`` file contains meteorological data and is only required if using the groundwater module by Hallin (2023) to simulate surface moisture (``process_groundwater = T``). It contains six columns: 1. Time (s), 2. Temperature (°C), 3. Precipitation (mm/hr), 4. Relative humidity (%), 5. Global radiation (MJ/$m^2$/day), 6. Air pressure (kPa) + +.. _fig-meteo-inputs: + +.. figure:: /images/meteo_file_format.jpeg + :alt: meteo file format + :width: 550px + :align: center + + File format for meteorological data used to simulate surface moisture in AeoLiS. + +Example Python script +~~~~~~~~~~~~~~~~~~~~ +Generating and saving time-series files. In this example, we generate a 10-day simulation with a constant onshore wind, a harmonic tide, and constant wave conditions. + +.. code-block:: python + + import numpy as np + + # 1. Define time array + days = 10 + dt = 3600 # 1-hour intervals + time_sec = np.arange(0, days * 24 * 3600 + dt, dt) + + # 2. Wind (constant onshore wind) + # Assuming 270 degrees is straight onshore + wind_speed = np.full_like(time_sec, 8.0) # 8 m/s + wind_dir = np.full_like(time_sec, 270.0) # 270 degrees + wind_data = np.column_stack((time_sec, wind_speed, wind_dir)) + + # 3. Tide (harmonic tide) + tide_amp = 1.0 # 1 meter amplitude + tide_period = 12 * 3600 # 12-hour period in seconds + water_level = tide_amp * np.sin(2 * np.pi * time_sec / tide_period) + tide_data = np.column_stack((time_sec, water_level)) + + # 4. Waves (constant wave height and period) + wave_height = np.full_like(time_sec, 1.5) # 1.5m significant wave height + wave_period = np.full_like(time_sec, 6.0) # 6s peak period + wave_data = np.column_stack((time_sec, wave_height, wave_period)) + + # 5. Save to text files + np.savetxt('wind.txt', wind_data, fmt='%.2f') + np.savetxt('tide.txt', tide_data, fmt='%.2f') + np.savetxt('wave.txt', wave_data, fmt='%.2f') + +Visualizating input settings +^^^^^^^^^^^^^^^^^^^^ +When running the model, you can automatically generate diagnostic plots by setting the keyword ``visualization = T`` in the configuration file. This will automatically generate figures in your simulation folder to help verify your setup: + +* ``figure_grid_initialization.png``: Displays the grid orientation and boundary definitions. +* ``figure_params_initialization.png``: Shows the most relevant spatial parameters mapped onto the domain. +* ``figure_timeseries_initialization.png``: Visualizes the time series of your environmental boundary conditions. + +.. _default-settings: + +.. _parameters: + +All parameters and defaults +--------------------------- + +All available configuration parameters, and their default values, are collected in ``constants.py``. +For any configuration parameters not defined in the model configuration file, +the default value is used. + +.. literalinclude:: ../../aeolis/constants.py + :language: python + :start-after: #: AeoLiS model default configuration + :end-before: #: Merge initial and model state + +.. _processes: + +Processes, Thresholds, Methods, and Boundary Conditions +------------------ +Processes in AeoLiS can be activated (``T``) or deactivated (``F``) via the configuration file. Several thresholds (``th_...``) can be set seperately and methods keywords (``method_...``) determine which methods are used to compute these processes. Seperate keywords set which boundary conditions are applied. + +More detailed descriptions of these processes can be found in :ref:`the model description `. To see exactly where specific process, threshold, and method flags are utilized in the code, an easy approach is to use the search bar on the main page of the AeoLiS GitHub repository. + +List overview +^^^^^^^^^^^^^ + +* ``process_wind``: Interpolates wind speed and direction to each time step. *The model cannot run without this flag.* +* ``process_threshold``: Computes the threshold shear velocity based on various processes. (Note: This is overridden if a static threshold file is provided). +* ``process_transport``: Computes the sediment transport rates. +* ``process_bedupdate``: Allows the bed level to change based on calculated erosion and deposition. +* ``process_shear``: Computes the shear stress perturbation caused by topography (needed for landform simulations). +* ``process_separation``: Computes flow separation bubbles over steep slopes (requires ``process_shear``). +* ``process_avalanche``: Computes avalanching when bed slopes exceed a critical static angle. +* ``process_tide``: Computes water level elevations, determining whether cells becomes submerged. +* ``process_wave``: Computes wave heights across the domain, including $Hs_{mix}$, required for the mixing of sediment. +* ``process_runup``: Computes the runup extent using the Stockdon equation (requires ``process_wave`` and ``process_tide``). +* ``process_moist``: Computes soil moisture content via different surface moisture methods. (Related flags include ``process_groundwater``, ``process_seepage_face``, and ``process_scanning``). +* ``process_mixtoplayer``: Mixes sediment fractions over several layers down to the Depth of Disturbance (requires ``process_wave``). +* ``process_wet_bed_reset``: Resets the bed to the original bathymetry if submerged. Execution depends on Total Water Level (TWL), requiring ``process_runup``, ``process_wave``, and ``process_tide``. +* ``process_vegetation``: Computes vegetation growth and shear stress reduction. +* ``process_fences``: Computes shear velocity reduction based on user-provided fence characteristics (Okin model). +* ``process_dune_erosion``: Computes dune erosion and triggers avalanching when water levels impact the dunes. +* ``process_meteo``: *(Placeholder flag; currently has no functionality).* + +Thresholds +~~~~~~~~~~ +* ``th_grainsize``: Computes threshold velocity based on grain size (base value, ``uth0``). +* ``th_moisture``: Modifies threshold velocity based on moisture content (requires ``process_moist``). +* ``th_sheltering``: Modifies threshold based on sheltering by roughness elements (coarser sediment fractions). +* ``th_nelayer``: Modifies threshold based on the presence of a non-erodible layer. +* *(Note: ``th_bedslope``, ``th_drylayer``, ``th_salt``, and ``th_humidity`` are currently not fully implemented or rarely used).* + +Methods +~~~~~~~ +*Note: More guidance on the decision for ``method_grainspeed``, ``method_shear``, and ``solver`` is given in the "Guidance on advection, shear and grainspeed solvers" section later on.* + +* ``method_transport``: Defines the transport equation (Options: ``bagnold``, ``bagnold_gs``, ``kawamura``, ``lettau``, ``dk``, ``sauermann``, ``vanrijn_strypsteen``). +* ``method_grainspeed``: Defines the speed of sediment in the air (Options: ``windspeed``, ``duran``, ``duran_uniform``, ``duran_full``). +* ``method_shear``: Computes topographic effects on wind shear stress (Options: ``fft``, ``1Dstacks``). +* ``method_roughness``: Computes the roughness height (Options: ``constant``, ``constant_nikuradse``, ``vanrijn_strypsteen``). +* ``method_vegetation``: Defines the vegetation formulation (Options: ``duran``, ``grass``). The newest vegetation implementation is called through ``grass``. +* ``method_moist_process``: Computes soil moisture content (Options: ``infiltration``, ``surface_moisture``). +* ``method_moist_threshold``: Computes wind velocity threshold based on soil moisture (Options: ``belly_johnson``). +* ``solver``: Defines the numerical advection solver (Options: ``steadystate``, ``euler_backward``, ``euler_forward``). + +Boundary Conditions +~~~~~~~~~~~~~~~~~~~ +* ``boundary_offshore``, ``boundary_onshore``, ``boundary_lateral``: Defines the method for handling sediment concentrations at the domain edges. Options include: + + * ``constant``: Applies a zero-gradient boundary condition (incoming concentration equals the adjacent internal cell). + * ``flux``: Applies a user-defined incoming sediment flux based on the equilibrium concentration. + * ``circular``: Applies periodic boundaries where sediment leaving one side re-enters the opposite side (Note: offshore and onshore boundaries must both be set to ``circular`` together). + +* ``offshore_flux``, ``onshore_flux``, ``lateral_flux``: Defines the incoming sediment concentration as a fraction of the equilibrium concentration (``Cu``) when the respective boundary is set to ``flux`` (e.g., ``1.0`` for fully saturated incoming wind, ``0.0`` for clean air with no sediment). + +Typical Configurations +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +When building an AeoLiS model, it helps to know which processes and methods are typically required for different environments. The table below provides a general baseline for five common simulation types. + +.. list-table:: + :widths: 25 15 15 15 15 15 + :header-rows: 1 + + * - Parameter / Flag + - Wind-only [1]_ + - Barchan [2]_ + - Parabolic [3]_ + - Beach [4]_ + - Blowout [5]_ + * - **Processes** + - + - + - + - + - + * - ``process_wind`` + - ✅ + - ✅ + - ✅ + - ✅ + - ✅ + * - ``process_threshold`` + - ✅ + - ✅ + - ✅ + - ✅ + - ✅ + * - ``process_transport`` + - ✅ + - ✅ + - ✅ + - ✅ + - ✅ + * - ``process_bedupdate`` + - ✅ + - ✅ + - ✅ + - ✅ + - ✅ + * - ``process_shear`` + - ❌ + - ✅ + - ✅ + - ✅ + - ✅ + * - ``process_separation`` + - ❌ + - ✅ + - ✅ + - ❌ + - ❌ + * - ``process_avalanche`` + - ❌ + - ✅ + - ✅ + - ✅ + - ✅ + * - ``process_vegetation`` + - ❌ + - ❌ + - ✅ + - ✅ + - ✅ + * - ``process_tide`` + - ❌ + - ❌ + - ❌ + - ✅ + - ✅ + * - ``process_wave`` + - ❌ + - ❌ + - ❌ + - ✅ + - ✅ + * - ``process_runup`` + - ❌ + - ❌ + - ❌ + - ✅ + - ✅ + * - ``process_moist`` + - ❌ + - ❌ + - ❌ + - ✅ + - ✅ + * - ``process_mixtoplayer`` + - ❌ + - ❌ + - ❌ + - ✅ + - ✅ + * - ``process_wet_bed_reset`` + - ❌ + - ❌ + - ❌ + - ✅ + - ✅ + * - ``process_dune_erosion`` + - ❌ + - ❌ + - ❌ + - ✅ (maybe) + - ❌ + * - **Thresholds** + - + - + - + - + - + * - ``th_grainsize`` + - ✅ + - ✅ + - ✅ + - ✅ + - ✅ + * - ``th_moisture`` + - ❌ + - ❌ + - ❌ + - ✅ + - ✅ + * - ``th_sheltering`` + - ❌ + - ❌ + - ❌ + - ✅ + - ✅ + * - ``th_nelayer`` + - ❌ + - ✅ + - ✅ + - ❌ + - ❌ + * - **Methods** + - + - + - + - + - + * - ``solver`` + - ``steadystate`` + - ``steadystate`` + - ``steadystate`` + - ``steadystate`` + - ``steadystate`` + * - ``method_transport`` + - ``bagnold`` + - ``bagnold`` + - ``bagnold`` + - ``bagnold`` + - ``bagnold`` + * - ``method_grainspeed`` + - ``duran_uniform`` + - ``duran`` + - ``duran`` + - ``duran`` + - ``duran_full`` + * - ``method_shear`` + - - + - ``fft`` + - ``fft`` + - ``1Dstacks`` + - ``fft`` + * - ``method_vegetation`` + - - + - - + - ``duran`` + - ``grass`` + - ``grass`` + * - **Boundary Conditions** + - + - + - + - + - + * - ``boundary_lateral`` + - ``circular`` + - ``circular`` + - ``circular`` + - ``circular`` + - ``constant`` + * - ``boundary_offshore`` + - ``circular`` + - ``constant`` + - ``constant`` + - ``flux (0)`` + - ``flux (0)`` + * - ``boundary_onshore`` + - ``circular`` + - ``constant`` + - ``constant`` + - ``flux (0)`` + - ``flux (0)`` +.. [1] **Wind-only:** A basic flat-bed simulation without topographic, vegetation or marine influences. +.. [2] **Barchan:** A migrating barchan simulation requiring topographic shear steering, flow separation, and avalanching. +.. [3] **Parabolic:** A vegetated dune simulation combining topographic steering with vegetation processes. +.. [4] **Beach:** A simplistic (semi-1D) beach-dune profile simulation describing foredune growth. +.. [5] **Blowout:** A complex coastal dune simulation involving a combination of most AeoLiS processes. + +.. _model-output: + +Model output +------------ + +AeoLiS writes its simulation results to a NetCDF4 file (by default named ``aeolis.nc``). The outputed variables (``output_vars``) and frequency (``output_times``) of this file are configured via the configuration file. You can request any of the variables listed in the :ref:`Model state/output` section, while ``x`` and ``y`` are automatically included. + +While most output variables have 2D spatial dimensions combined with a ``time`` dimension (time, ny, nx), some contain additional dimensions. For example, sediment mass (``mass``) is calculated per grid cell, bed layer, and sediment fraction. Outputting such a five-dimensional variable can result in large file sizes. To reduce this, AeoLiS offers ``masstop`` as output, which provides the sediment distribution only for the active top layer. + +By default, the output represents the model state at the exact moment defined by the output interval. If the internal time step (``dt``) is smaller than this interval, intermediate calculations are not saved. To evaluate variable behavior between output intervals, statistical summaries can be requested by appending suffixes directly to the variable names in ``output_vars``. Available suffixes include ``_avg`` (average), ``_sum`` (cumulative sum), ``_var`` (variance), ``_min`` (minimum), and ``_max`` (maximum) over the output interval. + +.. note:: + **Known Issue:** Because the model parses the underscore (``_``) to identify these statistical requests, variables that contain underscores in their base names will cause parsing conflicts. + +Example Python script +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Below is a Python script showing how to read the NetCDF output data en create a single plot. + +.. code-block:: python + + import netCDF4 as nc + import matplotlib.pyplot as plt + + # 1. Open the NetCDF output file + ncfile = 'aeolis.nc' + ds = nc.Dataset(ncfile, 'r') + + # 2. Load spatial coordinates and bed level + x = ds.variables['x'][:, :] + y = ds.variables['y'][:, :] + zb_final = ds.variables['zb'][-1, :, :] # (time, y, x) + ds.close() + + # 3. Plot the final bed level + fig, ax = plt.subplots(figsize=(8, 6)) + pc = ax.pcolormesh(x, y, zb_final, cmap='viridis', shading='auto') + ax.set_aspect('equal') + ax.set_xlabel('x (m)') + ax.set_ylabel('y (m)') + ax.set_title('Final Bed Level (zb)') + fig.colorbar(pc, ax=ax, label='Bed level (m)') + + plt.tight_layout() + plt.show() + + +Example Python script for animation +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +Below is a second example demonstrating how to animate time-series output of the cross-shore (``ustars``) and alongshore (``ustarn``) shear velocity components. + +.. code-block:: python + + import netCDF4 as nc + import numpy as np + import matplotlib.pyplot as plt + import matplotlib.animation as animation + + # 1. Open the NetCDF output file and load variables + ncfile = 'aeolis.nc' + ds = nc.Dataset(ncfile, 'r') + + time = ds.variables['time'][:] + x = ds.variables['x'][:, :] + y = ds.variables['y'][:, :] + ustar = ds.variables['ustar'][:] # (time, y, x) + ustars = ds.variables['ustars'][:] # (time, y, x) + ustarn = ds.variables['ustarn'][:] # (time, y, x) + ds.close() + + # 2. Set up the figure layout + fig, ax = plt.subplots(figsize=(8, 6)) + title = ax.set_title(f'Shear Velocity at t = {time[0]:.0f} s') + ax.set_aspect('equal') + ax.set_xlabel('x (m)') + ax.set_ylabel('y (m)') + + # Initial background mesh, colorbar and overlaying quiver plot (vectors) + pc = ax.pcolormesh(x, y, ustar[0, :, :], cmap='YlOrRd', shading='auto', vmin=0, vmax=np.max(ustar)) + fig.colorbar(pc, ax=ax, label='Shear velocity magnitude (m/s)') + Q = ax.quiver(x, y, ustars[0, :, :], ustarn[0, :, :], color='black') + + # 3. Define the update function for the animation + def update(frame): + pc.set_array(ustar[frame, :, :].ravel()) # update basemap + Q.set_UVC(ustars[frame, :, :], ustarn[frame, :, :]) # update quiver + title.set_text(f'Shear Velocity at t = {time[frame]:.0f} s') # update title + return pc, Q, title + + # 4. Create the animation + ani = animation.FuncAnimation(fig, update, frames=len(time), blit=False) + ani.save('ustar_animation.mp4', writer='ffmpeg', fps=10) + + + +Model state/output +------------------- + +The AeoLiS model state is described by a collection of spatial grid +variables with at least one value per horizontal grid cell. Specific +model state variables can also be subdivided over bed composition +layers and/or grain size fractions. All model state variables can be +part of the model netCDF4 output. The current model state variables +are listed below. + +.. literalinclude:: ../../aeolis/constants.py + :language: python + :start-after: #: Aeolis model state variables + :end-before: #: AeoLiS model default configuration + +.. _solver-guide: + +Guide on model schematization +--------------------------------------------------- + +Advection solver +^^^^^^^^^^^^^^^^ +The advection equation is the core of sediment transport computations in AeoLiS. It balances the spatial change in sediment transport with the pickup or deposition rate: + +.. math:: + + \frac{\partial C U_s}{\partial x} = \frac{C_{\mathrm{sat}} - C}{T} + +Where :math:`C` is the actual sediment concentration, :math:`U_s` is the sediment velocity, :math:`x` is the distance in the transport direction, :math:`C_{\mathrm{sat}}` is the equilibrium sediment concentration, and :math:`T` is the adaptation time scale. + +You can solve this using three different methods (via the ``solver`` keyword): + +* **steadystate (default):** Highly recommended for most cases. Assumes concentration does not change over time within a single timestep (:math:`dc/dt = 0`) and solves rapidly using a finite difference sweeping algorithm. +* **euler_backward:** An implicit, time-varying solver (formerly ``pieter_solver``). Recommended primarily for legacy purposes or when the steady-state assumption is problematic (e.g., :math:`dt < 10` s). +* **euler_forward:** A simple explicit solver. Slow due to strict CFL stability conditions. Included mainly for testing or educational purposes. + +Shear and grainspeed schematization +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +There are several options for schematizing spatial shear and sediment velocity. Higher complexity yields more realistic physics but increases computational cost. To illustrate the impact of these choices, we use a consistent demonstration case: A cone-shaped bedform sits on a non-erodible layer, upwind of a vegetated patch designed to capture all incoming sediment. We expect the landform to migrate downwind and evolve into a crescentic barchan dune. We also track the amount of deposition in the vegetated area to monitor mass balance. + +Case 0: Windspeed - original method by Hoonhout (2016) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +* **Configuration:** ``process_shear = F``, ``method_grainspeed = windspeed`` + +Topographic feedback is disabled (:math:`\nabla \tau = 0`), meaning the wind blows over the cone as if it were flat. The sediment velocity simply equals the wind speed (:math:`u_s = u_w`). As a result, no landform development occurs. Sediment is stripped from the cone and deposited directly into the vegetation. This is the fastest method (20 mins), but should only be used for bulk transport calculations where morphodynamics are irrelevant. + +.. video:: /images/case_00.mp4 + :autoplay: + :loop: + :muted: + :width: 900 + +Case 1: Uniform grainspeed +~~~~~~~~~~~~~~~~~~~~~~~~~~~ +* **Configuration:** ``process_shear = F``, ``method_grainspeed = duran_uniform`` + +Sediment in saltation moves significantly slower than the wind. This case introduces the saltation model by Durán (2007) so that :math:`u_s < u_w`, but keeps the flat-bed assumption for shear velocity. Deposition patterns become more localized, but the landform still does not migrate because there is no topographic steering. It is slightly slower (33 mins) but physically more realistic than Case 0 for static topographies. + +.. video:: /images/case_01.mp4 + :autoplay: + :loop: + :muted: + :width: 900 + +Case 2: Topographic steering +~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +* **Configuration:** ``process_shear = T``, ``method_grainspeed = duran_uniform`` + +The shear velocity vector is now perturbed by the topography, creating spatial gradients in transport capacity. The sediment velocity :math:`u_s` remains uniform. The variation in shear velocity causes the entire landform to migrate towards the vegetation. However, without flow separation or spatial variation in grain speed, it fails to evolve into a crescentic shape. Computational cost increases significantly (2:01 hrs) due to the secondary rotational grid required to calculate shear and increased spatial variability in transport which causes the advection solver to need more iterations. + +.. video:: /images/case_02.mp4 + :autoplay: + :loop: + :muted: + :width: 900 + +Case 3: Separation bubble (special) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +* **Configuration:** ``process_separation = T`` (Requires ``process_shear = T``) + +Steep lee-side slopes cause airflow to separate, creating a zone of recirculation and low shear. Activating the separation bubble prevents sediment transport on the lee side, preserving the steep slip face and allowing the crescentic barchan shape to form (2:10 hrs). Note: In highly complex topographies (like dense vegetation), the bubble may produce undesirable morphodynamics, so use it judiciously. + +.. video:: /images/case_03.mp4 + :autoplay: + :loop: + :muted: + :width: 900 + +Case 4: Spatially varying grainspeed +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +* **Configuration:** ``process_shear = T``, ``method_grainspeed = duran`` + +For a complete description of transport around landforms, the sediment velocity :math:`u_s` must also vary spatially. This method uses Durán's analytical approximation, which incorporates slope terms but assumes slopes are relatively gentle to avoid heavy numerical solving. Produces the expected crescentic morphodynamics efficiently (2:03 hrs). **This is the recommended configuration** for most simulations involving bedform evolution where topographic steering is important. + +.. video:: /images/case_04.mp4 + :autoplay: + :loop: + :muted: + :width: 900 + +Case 5: Steeper Slopes (numerical solution) +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +* **Configuration:** ``process_shear = T``, ``method_grainspeed = duran_full`` + +The analytical approximation in Case 4 can overestimate upslope transport on very steep slopes (e.g., :math:`> 33^\circ`). This method solves the full sediment velocity equation numerically to account for strong gravitational effects. While differences are subtle in standard dune simulations, this method is crucial for extreme topography like steep blowout cliffs (2:09 hrs). Caution: Dynamic avalanching is not fully coupled yet, so schematize steep slopes carefully. + +.. video:: /images/case_05.mp4 + :autoplay: + :loop: + :muted: + :width: 900 + +Summary of Parameter Settings +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. list-table:: + :widths: 5 25 5 5 15 15 10 + :header-rows: 1 + + * - Case + - Description + - ``shear`` + - ``sep.`` + - ``grainspeed`` + - Application + - Time + * - **0** + - Flat / Windspeed + - ``F`` + - ``F`` + - ``windspeed`` + - Bulk transport + - 0:20 + * - **1** + - Flat / Grainspeed + - ``F`` + - ``F`` + - ``duran_uniform`` + - Static topography + - 0:33 + * - **2** + - Topo Steering + - ``T`` + - ``F`` + - ``duran_uniform`` + - Veg-dominated dunes + - 2:01 + * - **3** + - Separation Bubble + - ``T`` + - ``T`` + - ``duran_uniform`` + - Moderate morphology + - 2:10 + * - **4** + - Varying $u_s$ (Approx) + - ``T`` + - ``T`` + - ``duran`` + - **Landform evolution** + - 2:03 + * - **5** + - Varying $u_s$ (Full) + - ``T`` + - ``T`` + - ``duran_full`` + - Extreme topography + - 2:09 + diff --git a/docs/user/output.rst b/docs/user/output.rst deleted file mode 100644 index 7acd5ec7..00000000 --- a/docs/user/output.rst +++ /dev/null @@ -1,14 +0,0 @@ -Model state/output -================== - -The AeoLiS model state is described by a collection of spatial grid -variables with at least one value per horizontal grid cell. Specific -model state variables can also be subdivided over bed composition -layers and/or grain size fractions. All model state variables can be -part of the model netCDF4 output. The current model state variables -are listed below. - -.. literalinclude:: ../../aeolis/constants.py - :language: python - :start-after: #: Aeolis model state variables - :end-before: #: AeoLiS model default configuration diff --git a/docs/user/bibliography.rst b/docs/user/references.rst similarity index 75% rename from docs/user/bibliography.rst rename to docs/user/references.rst index 1109f3f3..ebe4af17 100644 --- a/docs/user/bibliography.rst +++ b/docs/user/references.rst @@ -1,8 +1,8 @@ -Bibliography +References ============= .. rubric:: References in this documentation .. bibliography:: :cited: - :style: plain \ No newline at end of file + :style: plain