@@ -26,6 +26,7 @@ ClimaOcean.DataWrangling.dataset_defaults.FloatType = Float64
2626# ####
2727
2828struct FluxStatistics{F}
29+ flux :: F
2930 mean :: F
3031 meansq :: F
3132 std :: F
@@ -46,29 +47,31 @@ function FluxStatistics(f::Field)
4647 fill! (max, 0 )
4748 fill! (min, 0 )
4849
49- return FluxStatistics (mean, meansq, std, max, min)
50+ return FluxStatistics (f, mean, meansq, std, max, min)
5051end
5152
52- Adapt. adapt_structure (to, f:: FluxStatistics ) = FluxStatistics (Adapt. adapt (to, f. mean),
53+ Adapt. adapt_structure (to, f:: FluxStatistics ) = FluxStatistics (Adapt. adapt (to, f. flux),
54+ Adapt. adapt (to, f. mean),
5355 Adapt. adapt (to, f. meansq),
5456 Adapt. adapt (to, f. std),
5557 Adapt. adapt (to, f. max),
5658 Adapt. adapt (to, f. min))
5759
58- on_architecture (arch, f:: FluxStatistics ) = FluxStatistics (on_architecture (arch, f. mean),
60+ on_architecture (arch, f:: FluxStatistics ) = FluxStatistics (on_architecture (arch, f. flux),
61+ on_architecture (arch, f. mean),
5962 on_architecture (arch, f. meansq),
6063 on_architecture (arch, f. std),
6164 on_architecture (arch, f. max),
6265 on_architecture (arch, f. min))
6366
64- function update_stats! (stats:: FluxStatistics , flux, iteration)
67+ function update_stats! (stats:: FluxStatistics , iteration)
6568 grid = flux. grid
6669 arch = architecture (grid)
67- launch! (arch, grid, :xy , _update_stats!, stats, flux, iteration)
70+ launch! (arch, grid, :xy , _update_stats!, stats, iteration)
6871 return nothing
6972end
7073
71- @kernel function _update_stats! (stats, flux, iteration)
74+ @kernel function _update_stats! (stats, iteration)
7275 i, j = @index (Global, NTuple)
7376
7477 inverse_iteration = 1 / (iteration + 1 )
7780 # mean_n = (x1 + ... + xn) / n ->
7881 # -> mean_{n+1} = mean_n * (1 - 1/(n+1)) * x_{n+1} / (n+1)
7982 @inbounds begin
80- f = flux[i, j, 1 ]
83+ f = stats . flux[i, j, 1 ]
8184 stats. mean[i, j, 1 ] *= 1 - inverse_iteration
8285 stats. mean[i, j, 1 ] += f * inverse_iteration
8386 stats. meansq[i, j, 1 ] *= 1 - inverse_iteration
@@ -107,12 +110,12 @@ function compute_flux_climatology(earth)
107110
108111 function update_flux_stats! (earth)
109112 iteration = earth. model. clock. iteration
110- update_stats! (τx, net_fluxes . u, iteration)
111- update_stats! (τy, net_fluxes . v, iteration)
112- update_stats! (Jᵀ, net_fluxes . T, iteration)
113- update_stats! (Jˢ, net_fluxes . S, iteration)
114- update_stats! (Qc, atmos_ocean_fluxes . sensible_heat, iteration)
115- update_stats! (Qv, atmos_ocean_fluxes . latent_heat, iteration)
113+ update_stats! (τx, iteration)
114+ update_stats! (τy, iteration)
115+ update_stats! (Jᵀ, iteration)
116+ update_stats! (Jˢ, iteration)
117+ update_stats! (Qc, iteration)
118+ update_stats! (Qv, iteration)
116119
117120 return nothing
118121 end
0 commit comments