diff --git a/include/rom_handler.hpp b/include/rom_handler.hpp index 337b5c95..a49efdc8 100644 --- a/include/rom_handler.hpp +++ b/include/rom_handler.hpp @@ -157,7 +157,7 @@ class ROMHandlerBase virtual void SaveOperator(const std::string input_prefix="") = 0; virtual void LoadOperatorFromFile(const std::string input_prefix="") = 0; - virtual void LoadOperator(BlockMatrix *input_mat) = 0; + virtual void SetRomMat(BlockMatrix *input_mat) = 0; virtual void SaveBasisVisualization(const Array &fes, const std::vector &var_names) = 0; @@ -233,7 +233,7 @@ class MFEMROMHandler : public ROMHandlerBase virtual void SaveOperator(const std::string input_prefix=""); virtual void LoadOperatorFromFile(const std::string input_prefix=""); - virtual void LoadOperator(BlockMatrix *input_mat); + virtual void SetRomMat(BlockMatrix *input_mat); virtual void SaveBasisVisualization(const Array &fes, const std::vector &var_names); diff --git a/src/multiblock_solver.cpp b/src/multiblock_solver.cpp index bd2cccd3..cb69f42d 100644 --- a/src/multiblock_solver.cpp +++ b/src/multiblock_solver.cpp @@ -588,7 +588,7 @@ void MultiBlockSolver::AssembleROM() } romMat->Finalize(); - rom_handler->LoadOperator(romMat); + rom_handler->SetRomMat(romMat); } void MultiBlockSolver::InitVisualization(const std::string& output_path) diff --git a/src/rom_handler.cpp b/src/rom_handler.cpp index 4ec55e69..263c5d0b 100644 --- a/src/rom_handler.cpp +++ b/src/rom_handler.cpp @@ -370,8 +370,7 @@ void MFEMROMHandler::ProjectOperatorOnReducedBasis(const Array2D &mat assert(mats.NumCols() == num_rom_blocks); assert(romMat->NumRowBlocks() == num_rom_blocks); assert(romMat->NumColBlocks() == num_rom_blocks); - - if (!basis_loaded) LoadReducedBasis(); + assert(basis_loaded); Array2D rom_mats; ProjectGlobalToDomainBasis(mats, rom_mats); @@ -380,11 +379,7 @@ void MFEMROMHandler::ProjectOperatorOnReducedBasis(const Array2D &mat romMat->SetBlock(i, j, rom_mats(i, j)); romMat->Finalize(); - operator_loaded = true; - - romMat_mono = romMat->CreateMonolithic(); - - if (linsol_type == SolverType::DIRECT) SetupDirectSolver(); + SetRomMat(romMat); } void MFEMROMHandler::SaveOperator(const std::string input_prefix) @@ -832,22 +827,23 @@ void MFEMROMHandler::LoadOperatorFromFile(const std::string input_prefix) assert(file_id >= 0); romMat = hdf5_utils::ReadBlockMatrix(file_id, "ROM_matrix", rom_block_offsets); - romMat_mono = romMat->CreateMonolithic(); + SetRomMat(romMat); errf = H5Fclose(file_id); assert(errf >= 0); - - if (linsol_type == SolverType::DIRECT) SetupDirectSolver(); - - operator_loaded = true; } -void MFEMROMHandler::LoadOperator(BlockMatrix *input_mat) +void MFEMROMHandler::SetRomMat(BlockMatrix *input_mat) { - delete romMat; + if (romMat != input_mat) + { + delete romMat; + romMat = input_mat; + } + delete romMat_mono; - romMat = input_mat; romMat_mono = romMat->CreateMonolithic(); + if (linsol_type == SolverType::DIRECT) SetupDirectSolver(); operator_loaded = true; }