From d03d6c98d4a4406968f55a68274356ed917dfaa5 Mon Sep 17 00:00:00 2001 From: Axel Larsson <65452706+axla-io@users.noreply.github.com> Date: Mon, 3 Feb 2025 18:41:43 -0500 Subject: [PATCH 1/7] Squared singular values --- lib/linalg/BasisGenerator.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/linalg/BasisGenerator.cpp b/lib/linalg/BasisGenerator.cpp index 9e2cec4ae..3702de343 100644 --- a/lib/linalg/BasisGenerator.cpp +++ b/lib/linalg/BasisGenerator.cpp @@ -321,7 +321,7 @@ BasisGenerator::finalSummary( double sum = 0.0; for (int sv = first_sv; sv < sing_vals->dim(); ++sv) { - sum += (*sing_vals)(sv); + sum += std::pow((*sing_vals)(sv), 2); } int p = std::floor(-std::log10(energyFractionThreshold)); @@ -345,7 +345,7 @@ BasisGenerator::finalSummary( } for (int sv = first_sv; sv < sing_vals->dim(); ++sv) { - partialSum += (*sing_vals)(sv); + partialSum += std::pow((*sing_vals)(sv),2); for (int i = count; i < p; ++i) { if (partialSum / sum > 1.0 - std::pow(10, -1 - i)) From 9d2bf98def617332db30fe9220ec98a80cbff697 Mon Sep 17 00:00:00 2001 From: Axel Larsson <65452706+axla-io@users.noreply.github.com> Date: Tue, 4 Feb 2025 15:46:45 -0500 Subject: [PATCH 2/7] Added command line option for squared singular values --- examples/prom/mixed_nonlinear_diffusion.cpp | 15 +++++++++------ examples/prom/nonlinear_elasticity_global_rom.cpp | 10 +++++----- lib/linalg/BasisGenerator.cpp | 8 +++++--- lib/linalg/BasisGenerator.h | 2 +- 4 files changed, 20 insertions(+), 15 deletions(-) diff --git a/examples/prom/mixed_nonlinear_diffusion.cpp b/examples/prom/mixed_nonlinear_diffusion.cpp index 236e0ca2f..b15252ce6 100644 --- a/examples/prom/mixed_nonlinear_diffusion.cpp +++ b/examples/prom/mixed_nonlinear_diffusion.cpp @@ -428,7 +428,7 @@ CAROM::Matrix* GetFirstColumns(const int N, const CAROM::Matrix* A) // TODO: move this to the library? void MergeBasis(const int dimFOM, const int nparam, const int max_num_snapshots, - std::string name) + std::string name, bool squareSV) { MFEM_VERIFY(nparam > 0, "Must specify a positive number of parameter sets"); @@ -448,7 +448,7 @@ void MergeBasis(const int dimFOM, const int nparam, const int max_num_snapshots, generator.endSamples(); // save the merged basis file int cutoff = 0; - generator.finalSummary(1e-4, cutoff, "mergedSV_" + name); + generator.finalSummary(1e-4, cutoff, "mergedSV_" + name,0,squaredSV); } // TODO: move this to the library? @@ -512,6 +512,7 @@ int main(int argc, char *argv[]) bool use_eqp = false; bool writeSampleMesh = false; int num_samples_req = -1; + bool squareSV; bool pointwiseSnapshots = false; int pwx = 0; @@ -577,6 +578,8 @@ int main(int argc, char *argv[]) "Enable or disable the online phase."); args.AddOption(&merge, "-merge", "--merge", "-no-merge", "--no-merge", "Enable or disable the merge phase."); + args.AddOption(&squareSV, "-sqsv", "--square-sv", "-no-sqsv", "--no-square-sv", + "Use singular values squared in energy fraction."); args.AddOption(&samplingType, "-hrtype", "--hrsamplingtype", "Sampling type for hyperreduction."); args.AddOption(&num_samples_req, "-nsr", "--nsr", @@ -705,13 +708,13 @@ int main(int argc, char *argv[]) totalTimer.Clear(); totalTimer.Start(); - MergeBasis(R_space.GetTrueVSize(), nsets, max_num_snapshots, "R"); - MergeBasis(R_space.GetTrueVSize(), nsets, max_num_snapshots, "FR"); - MergeBasis(W_space.GetTrueVSize(), nsets, max_num_snapshots, "W"); + MergeBasis(R_space.GetTrueVSize(), nsets, max_num_snapshots, "R", squareSV); + MergeBasis(R_space.GetTrueVSize(), nsets, max_num_snapshots, "FR", squareSV); + MergeBasis(W_space.GetTrueVSize(), nsets, max_num_snapshots, "W", squareSV); if (hyperreduce_source) { - MergeBasis(W_space.GetTrueVSize(), nsets, max_num_snapshots, "S"); + MergeBasis(W_space.GetTrueVSize(), nsets, max_num_snapshots, "S", squareSV); } totalTimer.Stop(); diff --git a/examples/prom/nonlinear_elasticity_global_rom.cpp b/examples/prom/nonlinear_elasticity_global_rom.cpp index f645c3558..83385cb09 100644 --- a/examples/prom/nonlinear_elasticity_global_rom.cpp +++ b/examples/prom/nonlinear_elasticity_global_rom.cpp @@ -308,7 +308,7 @@ CAROM::Matrix *GetFirstColumns(const int N, const CAROM::Matrix *A) // TODO: move this to the library? void MergeBasis(const int dimFOM, const int nparam, const int max_num_snapshots, - std::string name) + std::string name, bool squareSV) { MFEM_VERIFY(nparam > 0, "Must specify a positive number of parameter sets"); @@ -328,7 +328,7 @@ void MergeBasis(const int dimFOM, const int nparam, const int max_num_snapshots, generator.endSamples(); // save the merged basis file int cutoff = 0; - generator.finalSummary(1e-7, cutoff, "mergedSV_" + name + ".txt"); + generator.finalSummary(1e-7, cutoff, "mergedSV_" + name + ".txt",0,squaredSV); } const CAROM::Matrix *GetSnapshotMatrix(const int dimFOM, const int nparam, @@ -643,11 +643,11 @@ int main(int argc, char *argv[]) // Merge bases if (x_base_only == false) { - MergeBasis(true_size, nsets, max_num_snapshots, "V"); + MergeBasis(true_size, nsets, max_num_snapshots, "V",squareSV); } - MergeBasis(true_size, nsets, max_num_snapshots, "X"); - MergeBasis(true_size, nsets, max_num_snapshots, "H"); + MergeBasis(true_size, nsets, max_num_snapshots, "X",squareSV); + MergeBasis(true_size, nsets, max_num_snapshots, "H",squareSV); totalTimer.Stop(); if (myid == 0) diff --git a/lib/linalg/BasisGenerator.cpp b/lib/linalg/BasisGenerator.cpp index 3702de343..d7f0c9173 100644 --- a/lib/linalg/BasisGenerator.cpp +++ b/lib/linalg/BasisGenerator.cpp @@ -312,7 +312,7 @@ BasisGenerator::finalSummary( const double energyFractionThreshold, int & cutoff, const std::string & cutoffOutputPath, - const int first_sv) + const int first_sv, const bool squareSV) { const int rom_dim = getSpatialBasis()->numColumns(); const Vector* sing_vals = getSingularValues(); @@ -321,7 +321,8 @@ BasisGenerator::finalSummary( double sum = 0.0; for (int sv = first_sv; sv < sing_vals->dim(); ++sv) { - sum += std::pow((*sing_vals)(sv), 2); + const double s = (*sing_vals)(sv); + sum += squareSV ? s * s : s; } int p = std::floor(-std::log10(energyFractionThreshold)); @@ -345,7 +346,8 @@ BasisGenerator::finalSummary( } for (int sv = first_sv; sv < sing_vals->dim(); ++sv) { - partialSum += std::pow((*sing_vals)(sv),2); + const double s = (*sing_vals)(sv); + partialSum += squareSV ? s * s : s; for (int i = count; i < p; ++i) { if (partialSum / sum > 1.0 - std::pow(10, -1 - i)) diff --git a/lib/linalg/BasisGenerator.h b/lib/linalg/BasisGenerator.h index 87604447e..a5bf6ab1a 100644 --- a/lib/linalg/BasisGenerator.h +++ b/lib/linalg/BasisGenerator.h @@ -260,7 +260,7 @@ class BasisGenerator const double energyFractionThreshold, int & cutoff, const std::string & cutoffOutputPath = "", - const int first_sv = 0); + const int first_sv = 0, const bool squareSV = true); protected: /** From 10958cfc02fdaf5371bb7fbc5b2efc49a442c772 Mon Sep 17 00:00:00 2001 From: Axel Larsson <65452706+axla-io@users.noreply.github.com> Date: Tue, 4 Feb 2025 15:48:36 -0500 Subject: [PATCH 3/7] Added command line options for nonlinear elasticity --- examples/prom/nonlinear_elasticity_global_rom.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/examples/prom/nonlinear_elasticity_global_rom.cpp b/examples/prom/nonlinear_elasticity_global_rom.cpp index 83385cb09..21d67095f 100644 --- a/examples/prom/nonlinear_elasticity_global_rom.cpp +++ b/examples/prom/nonlinear_elasticity_global_rom.cpp @@ -416,6 +416,7 @@ int main(int argc, char *argv[]) bool x_base_only = false; int num_samples_req = -1; const char *samplingType = "gnat"; + bool squareSV; int nsets = 0; int id_param = 0; @@ -478,6 +479,8 @@ int main(int argc, char *argv[]) "Enable or disable the online phase."); args.AddOption(&merge, "-merge", "--merge", "-no-merge", "--no-merge", "Enable or disable the merge phase."); + args.AddOption(&squareSV, "-sqsv", "--square-sv", "-no-sqsv", "--no-square-sv", + "Use singular values squared in energy fraction."); args.AddOption(&samplingType, "-hrtype", "--hrsamplingtype", "Sampling type for hyperreduction."); args.AddOption(&num_samples_req, "-nsr", "--nsr", From f0f146a118389eed969f8bc64ba8da0f1c0afa95 Mon Sep 17 00:00:00 2001 From: Axel Larsson <65452706+axla-io@users.noreply.github.com> Date: Tue, 4 Feb 2025 15:58:25 -0500 Subject: [PATCH 4/7] Fixed typos --- examples/prom/mixed_nonlinear_diffusion.cpp | 4 ++-- examples/prom/nonlinear_elasticity_global_rom.cpp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/prom/mixed_nonlinear_diffusion.cpp b/examples/prom/mixed_nonlinear_diffusion.cpp index b15252ce6..e5002fdf0 100644 --- a/examples/prom/mixed_nonlinear_diffusion.cpp +++ b/examples/prom/mixed_nonlinear_diffusion.cpp @@ -448,7 +448,7 @@ void MergeBasis(const int dimFOM, const int nparam, const int max_num_snapshots, generator.endSamples(); // save the merged basis file int cutoff = 0; - generator.finalSummary(1e-4, cutoff, "mergedSV_" + name,0,squaredSV); + generator.finalSummary(1e-4, cutoff, "mergedSV_" + name,0,squareSV); } // TODO: move this to the library? @@ -512,7 +512,7 @@ int main(int argc, char *argv[]) bool use_eqp = false; bool writeSampleMesh = false; int num_samples_req = -1; - bool squareSV; + bool squareSV = true; bool pointwiseSnapshots = false; int pwx = 0; diff --git a/examples/prom/nonlinear_elasticity_global_rom.cpp b/examples/prom/nonlinear_elasticity_global_rom.cpp index 21d67095f..63a63bed1 100644 --- a/examples/prom/nonlinear_elasticity_global_rom.cpp +++ b/examples/prom/nonlinear_elasticity_global_rom.cpp @@ -328,7 +328,7 @@ void MergeBasis(const int dimFOM, const int nparam, const int max_num_snapshots, generator.endSamples(); // save the merged basis file int cutoff = 0; - generator.finalSummary(1e-7, cutoff, "mergedSV_" + name + ".txt",0,squaredSV); + generator.finalSummary(1e-7, cutoff, "mergedSV_" + name + ".txt",0,squareSV); } const CAROM::Matrix *GetSnapshotMatrix(const int dimFOM, const int nparam, @@ -416,7 +416,7 @@ int main(int argc, char *argv[]) bool x_base_only = false; int num_samples_req = -1; const char *samplingType = "gnat"; - bool squareSV; + bool squareSV = true; int nsets = 0; int id_param = 0; From 1fbbf9908f8a0b65de1a6d78a61213bf5489dfbd Mon Sep 17 00:00:00 2001 From: Axel Larsson <65452706+axla-io@users.noreply.github.com> Date: Tue, 4 Feb 2025 18:20:22 -0500 Subject: [PATCH 5/7] astyle --- examples/prom/mixed_nonlinear_diffusion.cpp | 2 +- examples/prom/nonlinear_elasticity_global_rom.cpp | 2 +- lib/linalg/BasisGenerator.cpp | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/prom/mixed_nonlinear_diffusion.cpp b/examples/prom/mixed_nonlinear_diffusion.cpp index e5002fdf0..05910afac 100644 --- a/examples/prom/mixed_nonlinear_diffusion.cpp +++ b/examples/prom/mixed_nonlinear_diffusion.cpp @@ -579,7 +579,7 @@ int main(int argc, char *argv[]) args.AddOption(&merge, "-merge", "--merge", "-no-merge", "--no-merge", "Enable or disable the merge phase."); args.AddOption(&squareSV, "-sqsv", "--square-sv", "-no-sqsv", "--no-square-sv", - "Use singular values squared in energy fraction."); + "Use singular values squared in energy fraction."); args.AddOption(&samplingType, "-hrtype", "--hrsamplingtype", "Sampling type for hyperreduction."); args.AddOption(&num_samples_req, "-nsr", "--nsr", diff --git a/examples/prom/nonlinear_elasticity_global_rom.cpp b/examples/prom/nonlinear_elasticity_global_rom.cpp index 63a63bed1..548e310c7 100644 --- a/examples/prom/nonlinear_elasticity_global_rom.cpp +++ b/examples/prom/nonlinear_elasticity_global_rom.cpp @@ -480,7 +480,7 @@ int main(int argc, char *argv[]) args.AddOption(&merge, "-merge", "--merge", "-no-merge", "--no-merge", "Enable or disable the merge phase."); args.AddOption(&squareSV, "-sqsv", "--square-sv", "-no-sqsv", "--no-square-sv", - "Use singular values squared in energy fraction."); + "Use singular values squared in energy fraction."); args.AddOption(&samplingType, "-hrtype", "--hrsamplingtype", "Sampling type for hyperreduction."); args.AddOption(&num_samples_req, "-nsr", "--nsr", diff --git a/lib/linalg/BasisGenerator.cpp b/lib/linalg/BasisGenerator.cpp index d7f0c9173..c0a3f2273 100644 --- a/lib/linalg/BasisGenerator.cpp +++ b/lib/linalg/BasisGenerator.cpp @@ -322,7 +322,7 @@ BasisGenerator::finalSummary( double sum = 0.0; for (int sv = first_sv; sv < sing_vals->dim(); ++sv) { const double s = (*sing_vals)(sv); - sum += squareSV ? s * s : s; + sum += squareSV ? s * s : s; } int p = std::floor(-std::log10(energyFractionThreshold)); @@ -347,7 +347,7 @@ BasisGenerator::finalSummary( for (int sv = first_sv; sv < sing_vals->dim(); ++sv) { const double s = (*sing_vals)(sv); - partialSum += squareSV ? s * s : s; + partialSum += squareSV ? s * s : s; for (int i = count; i < p; ++i) { if (partialSum / sum > 1.0 - std::pow(10, -1 - i)) From 89caae42433768f6e5ae4e4a9940f7c4f4442832 Mon Sep 17 00:00:00 2001 From: Axel Larsson <65452706+axla-io@users.noreply.github.com> Date: Tue, 4 Feb 2025 21:11:28 -0500 Subject: [PATCH 6/7] comma spacing --- examples/prom/mixed_nonlinear_diffusion.cpp | 2 +- examples/prom/nonlinear_elasticity_global_rom.cpp | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/examples/prom/mixed_nonlinear_diffusion.cpp b/examples/prom/mixed_nonlinear_diffusion.cpp index 05910afac..83a9a9ef5 100644 --- a/examples/prom/mixed_nonlinear_diffusion.cpp +++ b/examples/prom/mixed_nonlinear_diffusion.cpp @@ -448,7 +448,7 @@ void MergeBasis(const int dimFOM, const int nparam, const int max_num_snapshots, generator.endSamples(); // save the merged basis file int cutoff = 0; - generator.finalSummary(1e-4, cutoff, "mergedSV_" + name,0,squareSV); + generator.finalSummary(1e-4, cutoff, "mergedSV_" + name,0, squareSV); } // TODO: move this to the library? diff --git a/examples/prom/nonlinear_elasticity_global_rom.cpp b/examples/prom/nonlinear_elasticity_global_rom.cpp index 548e310c7..31d5f1adb 100644 --- a/examples/prom/nonlinear_elasticity_global_rom.cpp +++ b/examples/prom/nonlinear_elasticity_global_rom.cpp @@ -328,7 +328,7 @@ void MergeBasis(const int dimFOM, const int nparam, const int max_num_snapshots, generator.endSamples(); // save the merged basis file int cutoff = 0; - generator.finalSummary(1e-7, cutoff, "mergedSV_" + name + ".txt",0,squareSV); + generator.finalSummary(1e-7, cutoff, "mergedSV_" + name + ".txt",0, squareSV); } const CAROM::Matrix *GetSnapshotMatrix(const int dimFOM, const int nparam, @@ -646,11 +646,11 @@ int main(int argc, char *argv[]) // Merge bases if (x_base_only == false) { - MergeBasis(true_size, nsets, max_num_snapshots, "V",squareSV); + MergeBasis(true_size, nsets, max_num_snapshots, "V", squareSV); } - MergeBasis(true_size, nsets, max_num_snapshots, "X",squareSV); - MergeBasis(true_size, nsets, max_num_snapshots, "H",squareSV); + MergeBasis(true_size, nsets, max_num_snapshots, "X", squareSV); + MergeBasis(true_size, nsets, max_num_snapshots, "H", squareSV); totalTimer.Stop(); if (myid == 0) From b5020b2278308a3c2a47c27810d19aa169d0c277 Mon Sep 17 00:00:00 2001 From: Axel Larsson <65452706+axla-io@users.noreply.github.com> Date: Tue, 4 Feb 2025 23:59:48 -0500 Subject: [PATCH 7/7] added missing spaces before comma --- examples/prom/mixed_nonlinear_diffusion.cpp | 2 +- examples/prom/nonlinear_elasticity_global_rom.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/prom/mixed_nonlinear_diffusion.cpp b/examples/prom/mixed_nonlinear_diffusion.cpp index 83a9a9ef5..7d8d17c43 100644 --- a/examples/prom/mixed_nonlinear_diffusion.cpp +++ b/examples/prom/mixed_nonlinear_diffusion.cpp @@ -448,7 +448,7 @@ void MergeBasis(const int dimFOM, const int nparam, const int max_num_snapshots, generator.endSamples(); // save the merged basis file int cutoff = 0; - generator.finalSummary(1e-4, cutoff, "mergedSV_" + name,0, squareSV); + generator.finalSummary(1e-4, cutoff, "mergedSV_" + name, 0, squareSV); } // TODO: move this to the library? diff --git a/examples/prom/nonlinear_elasticity_global_rom.cpp b/examples/prom/nonlinear_elasticity_global_rom.cpp index 31d5f1adb..204a386e8 100644 --- a/examples/prom/nonlinear_elasticity_global_rom.cpp +++ b/examples/prom/nonlinear_elasticity_global_rom.cpp @@ -328,7 +328,7 @@ void MergeBasis(const int dimFOM, const int nparam, const int max_num_snapshots, generator.endSamples(); // save the merged basis file int cutoff = 0; - generator.finalSummary(1e-7, cutoff, "mergedSV_" + name + ".txt",0, squareSV); + generator.finalSummary(1e-7, cutoff, "mergedSV_" + name + ".txt", 0, squareSV); } const CAROM::Matrix *GetSnapshotMatrix(const int dimFOM, const int nparam,