Releases: ChuningWang/roms-iceplume
Bug fixing and new README page.
Bug fixing and new README page on github. The README is rewritten using materials from my thesis.
More modifications on the averaging algorithm.
More optimization on the averaging algorithm. Using ROMS internal function mp_assemble to substitute mp_aggregate in the coupling function. This is to avoid fetching global arrays of density at each timestep. Instead, each tile calculates the weighted SUM, and mp_assemble is used to get and broadcast the reduced sum from and to each tile; then the weighted average is calculated using the reduced sum.
Since this is a better scheme over the method introduced in Ver 1.1.0, I decide to remove the temporarily used CPP flag ICEPLUME_CTIL_AVG. From now on only the new default averaging method is available.
Other modifications - Previously ICEPLUME_DET_AVERAGE averages density profiles on \sigma surfaces. This is based on the assumption that the depth near glacier grounding is somewhat constant, which is fine for idealized simulation. To generalize for realistic applications, in the current version the density profile is averaged on z surfaces. This is realized by linearly interpolating the density profile from each grid.
Chuning Wang
2020-12-03
Fix and Improve ICEPLUME_DET_AVERAGE
This is a major update. In this update I attempt to fix and improve the ICEPLUME_DET_AVERAGE method. The major issue I had is to average data across tiles. Depending on the MPI method, accessing data from another tile may not be allowed. This happened when I run the code on a super computer with Intel MPI. Historically it has also caused issues for other uses; in my own applications I 'fix' it by manually set averaging span within a single tile.
However this simple 'patch' is not a good solution. It is necessary to design the code so it can either
-
Automatically detect the tile boundary and restrict the average span within it; or
-
Accessing data across tiles for the spatial averaging.
Therefore, two methods are applied to fix the same problem. The first solution is to iteratively find the boundary of each tile, and compare the averaging span with tile boundaries; this is easy to achieve, however, it may generate slightly difference solution when the domain is tiled differently. The second solution, which is more aggressive, uses ROMS internal function mp_aggregate2d and mp_aggregate3d to collect data from each tile and then apply the average. It guarantees the same averaging span each time, but exchanging data between tiles can be numerically expensive when the tile number is large.
In this new version, the default averaging method is the the first one, which thoeretically is 'faster'. To use the more aggressive approach, user needs to manually activate it with the cpp flag ICEPLUME_CTIL_AVG as well as the original flag ICEPLUME_DET_AVERAGE; CTIL stands for cross tile. User should run benchmark tests to decide which strategy works best for the machine.
Another improvement is that the spatial averaging calculation now skips land-masked points, and weight the average with respect to each grid size, which aims to serve realistic topography in future applications. Other modifications include but not limited to data broadcasting, tile exchange, etc.
ROMS-ICEPLUME 1.0.0
This is the first release of the ROMS-ICEPLUME coupled modeling system.
It is a stable version and is tested for most functionalities. The purpose for this release is for this software to be cited by scientific journals.
At this stage no test case or example is provided in this repo; if needed please contact the author. A manual is also being developed, which will be added later.