Skip to content

Commit

Permalink
fix: SummaryStatisticsMaxRms has no max
Browse files Browse the repository at this point in the history
One of the summary statistics was called `SummaryStatisticsMaxRms`, but
it actually has the mean and RMS, not max and RMS.
Change `SummaryStatisticsMaxRms` to `SummaryStatisticsMeanMaxRms` and
add the maximum to it.
  • Loading branch information
musoke committed Jul 21, 2021
1 parent a443385 commit 91d32a8
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 11 deletions.
2 changes: 1 addition & 1 deletion examples/growth.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -697,7 +697,7 @@
"output_dir = \"$(pwd())/output\"\n",
"num_saves = 100\n",
"output_times = t_init:(t_final-t_init)/num_saves:t_final\n",
"output_config = OutputConfig(output_dir, output_times, summary_statistics=UltraDark.Output.SummaryStatisticsMaxRms)\n",
"output_config = OutputConfig(output_dir, output_times, summary_statistics=UltraDark.Output.SummaryStatisticsMeanMaxRms)\n",
"\n",
"options = Config.SimulationConfig(10, a)"
]
Expand Down
24 changes: 14 additions & 10 deletions src/output.jl
Original file line number Diff line number Diff line change
Expand Up @@ -214,11 +214,11 @@ function SummaryStatistics(wall_time, sim_time, a, Δt, grids)
end

"""
SummaryStatisticsMaxRms
SummaryStatisticsMeanMaxRms
Summary statistics including the maximum and RMS values of the density grid ρx.
Summary statistics including the mean density and RMS density contrast.
"""
struct SummaryStatisticsMaxRms
struct SummaryStatisticsMeanMaxRms
"wall time"
date::Dates.DateTime
"time"
Expand All @@ -229,18 +229,21 @@ struct SummaryStatisticsMaxRms
Δt::Float64
"mean of density"
ρx_mean::Float64
"max of density"
ρx_max::Float64
"RMS of density contrast"
δx_rms::Float64
"number of grid points summarized"
n::Int64
end

function SummaryStatisticsMaxRms(wall_time, sim_time, a, Δt, grids)
function SummaryStatisticsMeanMaxRms(wall_time, sim_time, a, Δt, grids)
ρx_mean = mean(grids.ρx)
ρx_max = maximum(grids.ρx)
δx_rms = mean(((grids.ρx .- ρx_mean).^2))^0.5
n = prod(size(grids.ρx))

SummaryStatisticsMaxRms(wall_time, sim_time, a, Δt, ρx_mean, δx_rms, n)
SummaryStatisticsMeanMaxRms(wall_time, sim_time, a, Δt, ρx_mean, ρx_max, δx_rms, n)
end

"""
Expand All @@ -249,7 +252,7 @@ end
Generate column titles for a CSV file from fields names of a struct
"""
function column_titles(stat_struct)
reduce(replace, [":"=>"", "("=>"", ")"=>"", " "=>""], init="$(fieldnames(stat_struct))") * ",\n"
reduce(replace, [":"=>"", "("=>"", ")"=>"", " "=>""], init="$(fieldnames(stat_struct))") * "\n"
end

"""
Expand All @@ -259,7 +262,7 @@ MPI reduction operator for summary statistics.
Check that t, a, Δt are equal and return them.
"""
function pool_summarystat(S1::SummaryStatistics, S2::SummaryStatistics)
function pool_summarystat(S1::SummaryStatistics, S2::SummaryStatistics)::SummaryStatistics

if (S1.t != S2.t) || (S1.a != S2.a) || (S1.Δt != S2.Δt)
@error "Summaries incompatible across nodes" S1 S2
Expand All @@ -269,21 +272,22 @@ function pool_summarystat(S1::SummaryStatistics, S2::SummaryStatistics)
end

"""
pool_summarystat(S1::SummaryStatisticsMaxRms, S2::SummaryStatisticsMaxRms)
pool_summarystat(S1::SummaryStatisticsMeanMaxRms, S2::SummaryStatisticsMeanMaxRms)
MPI reduction operator for summary statistics.
"""
function pool_summarystat(S1::SummaryStatisticsMaxRms, S2::SummaryStatisticsMaxRms)
function pool_summarystat(S1::SummaryStatisticsMeanMaxRms, S2::SummaryStatisticsMeanMaxRms)::SummaryStatisticsMeanMaxRms

if (S1.t != S2.t) || (S1.a != S2.a) || (S1.Δt != S2.Δt)
@error "Summaries incompatible across nodes" S1 S2
end

n = S1.n + S2.n
ρx_mean = (S1.ρx_mean * S1.n + S2.ρx_mean * S2.n) / n
ρx_max = maximum(S1.ρx_max, S2.ρx_max)
δx_rms = ((S1.n * S1.δx_rms^2 + S2.n * S2.δx_rms^2) / n)^0.5

SummaryStatisticsMaxRms(S1.date, S1.t, S1.a, S1.Δt, ρx_mean, δx_rms, n)
SummaryStatisticsMeanMaxRms(S1.date, S1.t, S1.a, S1.Δt, ρx_mean, ρx_max, δx_rms, n)
end

end # module

0 comments on commit 91d32a8

Please sign in to comment.