Try to speed up SurfaceAlbedo
- Dominant language
- Fortran
- Stars
- 352
- Forks
- 361
- Avg merge
- 2d 21h
- Merged PRs (30d)
- 7
Description
From test `PFS.f09_g17.I2000Ctsm50NwpSpGswpGs.cheyenne_intel` from 64afc8a, one thing that stands out is the 'surfalb' time: this is responsible for nearly 25% of the total run time.
One thing I notice about SurfaceAlbedo is that most calculations are done on full arrays, rather than using filters. I think this is done this way because this routine is called near the end of the time step in order to calculate albedos for the next time step - and it's possible that the set of active vs. inactive points could change in the next time step.
If it were acceptable to reorder this so that this routine were called at the start of the time step, calculating albedos for the current time step, then we could probably use filters here. (We could also then presumably decrease the restart file size.) Alternatively, maybe we could do the dyn subgrid stuff near the end of the time step (but before SurfaceAlbedo) calculating subgrid areas for the next time step; again, then we could use filters in SurfaceAlbedo. However, before doing either of those substantial changes, we could investigate whether we actually get a significant speedup in SurfaceAlbedo from using filters, in various configurations (maybe test this for a configuration where there aren't too many inactive points in memory and for another configuration that has many inactive points in memory).
Contributor guide
Assessment
This issue has not been assessed yet.