NCAR / icar

The Intermediate Complexity Atmospheric Research model (ICAR)
MIT License
72 stars 53 forks source link

Advection changes from HICAR merge #156

Closed d-reynolds closed 1 year ago

d-reynolds commented 1 year ago

TYPE: new feature

KEYWORDS: Advection, higher-order, structural, flux-limiter

SOURCE: Dylan Reynolds, SLF

DESCRIPTION OF CHANGES: These changes first generalize advection in the model such that the advection driver loops through a dictionary of advectable variables stored in the domain object. The driver then calls individual advection routines from each advection module. The upwind module has been changed to be a 'standard' advection scheme, where different spatial differencing stencils can be applied from the namelist. In this way, upwind becomes just a particular case of the 'standard' advection scheme. RK3 time-stepping is also facilitated for the advection variables through the advection driver, and the necesarry flux limiter is added to allow this. Both the flux limiter and the spatial orders of the advection scheme are now namelist options under advection options.

These changes also necessitated making the grid halo variable in size. This is why higher order schemes and the flux limiter have a large hit on computation time: they require more data to be exchanged through CoArrays. So note that going to a higher order advection scheme will have a doubling/trippling/etc effect on the run time over the upwind scheme, but we have seen justifiable improvements in essentially all advected fields as a result.

NOTES: These changes have been found to have a large impact on precipitation, especially at high resolutions and in complex terrain. Running with horder, vorder=3, flux_corr=1 is recommended for a performance/computation tradeoff.

Documentation to follow once all HICAR merges are complete

d-reynolds commented 1 year ago

Cool integration test feature -- where can I change the namelist that it uses?

scrasmussen commented 1 year ago

@gutmann the CI tests are now passing with the commits I made. Once these are in the hicar branch then they can be pulled into PR #157 and that PR should pass as well, it did with my tests at least.