diff --git a/docker/Dockerfile b/docker/Dockerfile index 2ecee0ed..50297c93 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -69,4 +69,4 @@ RUN sudo apt-get install -yq hdf5-tools gmsh # create and switch to a user WORKDIR /home/$USERNAME -ENV MUMPS_DIR=$LIB_DIR/mumps/build/local \ No newline at end of file +ENV MUMPS_DIR=$LIB_DIR/mumps/build/local diff --git a/include/sample_generator.hpp b/include/sample_generator.hpp index 91a20bcd..118c297c 100644 --- a/include/sample_generator.hpp +++ b/include/sample_generator.hpp @@ -115,7 +115,7 @@ class SampleGenerator void AddSnapshotGenerator(const int &fom_vdofs, const std::string &prefix, const BasisTag &basis_tag); void WriteSnapshots(); void WriteSnapshotPorts(); - const CAROM::Matrix* LookUpSnapshot(const BasisTag &basis_tag); + std::shared_ptr LookUpSnapshot(const BasisTag &basis_tag); Array2D* LookUpSnapshotPortColOffsets(const PortTag &port_tag); void ReportStatus(const int &sample_idx); diff --git a/sketches/librom_qr.cpp b/sketches/librom_qr.cpp index 93e42c2a..4ac6c96c 100644 --- a/sketches/librom_qr.cpp +++ b/sketches/librom_qr.cpp @@ -49,7 +49,7 @@ int main(int argc, char *argv[]) } printf("\n"); - CAROM::Matrix* rand_proj = snapshot_matrix->mult(rand_mat); + std::unique_ptr rand_proj = snapshot_matrix->mult(*rand_mat); printf("rand_proj (%d x %d) in RandomizedSVD::computeSVD.\n", rand_proj->numRows(), rand_proj->numColumns()); for (int i = 0; i < rand_proj->numRows(); i++) { for (int j = 0; j < rand_proj->numColumns(); j++) { @@ -85,7 +85,7 @@ int main(int argc, char *argv[]) } printf("\n"); - rand_proj = snapshot_matrix->mult(rand_mat); + rand_proj = snapshot_matrix->mult(*rand_mat); Q = rand_proj->qr_factorize().get(); printf("After perturbation, 2nd/3rd columns of Q totally changed.\n"); for (int i = 0; i < Q->numRows(); i++) { @@ -100,4 +100,4 @@ int main(int argc, char *argv[]) MPI_Finalize(); return 0; -} \ No newline at end of file +} diff --git a/sketches/librom_svd.cpp b/sketches/librom_svd.cpp index 536ef518..8334b834 100644 --- a/sketches/librom_svd.cpp +++ b/sketches/librom_svd.cpp @@ -41,13 +41,13 @@ int main(int argc, char *argv[]) // basis_generator->writeSnapshot(); basis_generator->endSamples(); - const CAROM::Vector *rom_sv = basis_generator->getSingularValues(); + std::shared_ptr rom_sv = basis_generator->getSingularValues(); printf("Singular values: "); for (int d = 0; d < rom_sv->dim(); d++) printf("%.3f\t", rom_sv->item(d)); printf("\n"); - const CAROM::Matrix* spatialbasis; + std::shared_ptr spatialbasis; spatialbasis = basis_generator->getSpatialBasis(); printf("Basis.\n"); for (int i = 0; i < spatialbasis->numRows(); i++) { @@ -61,4 +61,4 @@ int main(int argc, char *argv[]) MPI_Finalize(); return 0; -} \ No newline at end of file +} diff --git a/sketches/linalg_interface.cpp b/sketches/linalg_interface.cpp index a441a7a0..c4a74766 100644 --- a/sketches/linalg_interface.cpp +++ b/sketches/linalg_interface.cpp @@ -51,7 +51,7 @@ int main(int argc, char *argv[]) } // librom snapshot matrix. - const CAROM::Matrix *carom_mat = generator->getSnapshotMatrix(); + std::shared_ptr carom_mat = generator->getSnapshotMatrix(); printf("carom_mat (%d x %d)\n", carom_mat->numRows(), carom_mat->numColumns()); for (int i = 0; i < carom_mat->numRows(); i++) { @@ -62,7 +62,7 @@ int main(int argc, char *argv[]) printf("\n"); // librom pod basis. - const CAROM::Matrix *basis = generator->getSpatialBasis(); + std::shared_ptr basis = generator->getSpatialBasis(); printf("basis (%d x %d)\n", basis->numRows(), basis->numColumns()); for (int i = 0; i < basis->numRows(); i++) { @@ -73,14 +73,14 @@ int main(int argc, char *argv[]) printf("\n"); // librom singular value; - const CAROM::Vector *sv = generator->getSingularValues(); + std::shared_ptr sv = generator->getSingularValues(); printf("singular values (%d)\n", sv->dim()); for (int i = 0; i < sv->dim(); i++) printf("%.3E\t", sv->item(i)); printf("\n\n"); // librom right singular vector. - const CAROM::Matrix *right_basis = generator->getTemporalBasis(); + std::shared_ptr right_basis = generator->getTemporalBasis(); printf("right_basis (%d x %d)\n", right_basis->numRows(), right_basis->numColumns()); for (int i = 0; i < right_basis->numRows(); i++) { @@ -216,7 +216,7 @@ int main(int argc, char *argv[]) CAROM::Matrix carom_lmat_inv(lmat_inv.GetData(), fes->GetTrueVSize(), fes->GetTrueVSize(), false, false); // for linear algebra, need an undistributed proxy. CAROM::Matrix basis_tmp(basis->getData(), basis->numRows(), basis->numColumns(), false, false); - CAROM::Matrix *tmp_basis = carom_lmat_inv.mult(basis_tmp); + std::unique_ptr tmp_basis = carom_lmat_inv.mult(basis_tmp); // for linear algebra, need a distributed proxy. CAROM::Matrix transformed_basis(tmp_basis->getData(), tmp_basis->numRows(), tmp_basis->numColumns(), true, false); diff --git a/sketches/ns_rom.cpp b/sketches/ns_rom.cpp index f765a8c5..2f7e6fbe 100644 --- a/sketches/ns_rom.cpp +++ b/sketches/ns_rom.cpp @@ -1038,7 +1038,7 @@ int main(int argc, char *argv[]) p_snapshot_generator.writeSnapshot(); snapshot_generator.endSamples(); - const CAROM::Vector *rom_sv = snapshot_generator.getSingularValues(); + std::shared_ptr rom_sv = snapshot_generator.getSingularValues(); printf("Singular values: "); for (int d = 0; d < rom_sv->dim(); d++) printf("%.3E\t", rom_sv->item(d)); @@ -1101,7 +1101,7 @@ int main(int argc, char *argv[]) DenseMatrix basis; CAROM::BasisReader basis_reader(filename); - const CAROM::Matrix *carom_basis = basis_reader.getSpatialBasis(num_basis); + std::shared_ptr carom_basis = basis_reader.getSpatialBasis(num_basis); CAROM::CopyMatrix(*carom_basis, basis); const int fom_vdofs = oper.Height(); @@ -1243,7 +1243,7 @@ int main(int argc, char *argv[]) CAROM::Options option(fom_vdofs, nsample, 1, false); CAROM::BasisGenerator snapshot_reader(option, false, filename); snapshot_reader.loadSamples(filename + "_snapshot", "snapshot"); - const CAROM::Matrix *snapshots = snapshot_reader.getSnapshotMatrix(); + std::shared_ptr snapshots = snapshot_reader.getSnapshotMatrix(); DenseMatrix wgted_snapshots; CAROM::CopyMatrix(*snapshots, wgted_snapshots); for (int i = ufes->GetTrueVSize(); i < wgted_snapshots.NumRows(); i++) @@ -1255,7 +1255,7 @@ int main(int argc, char *argv[]) basis_generator.takeSample(wgted_snapshots.GetColumn(j)); basis_generator.endSamples(); - const CAROM::Matrix *carom_basis = basis_generator.getSpatialBasis(); + std::shared_ptr carom_basis = basis_generator.getSpatialBasis(); CAROM::CopyMatrix(*carom_basis, basis); for (int i = ufes->GetTrueVSize(); i < basis.NumRows(); i++) for (int j = 0; j < basis.NumCols(); j++) @@ -1283,7 +1283,7 @@ int main(int argc, char *argv[]) else { CAROM::BasisReader basis_reader(filename); - const CAROM::Matrix *carom_basis = basis_reader.getSpatialBasis(num_basis); + std::shared_ptr carom_basis = basis_reader.getSpatialBasis(num_basis); CAROM::CopyMatrix(*carom_basis, basis); } @@ -1311,7 +1311,7 @@ int main(int argc, char *argv[]) { DenseMatrix ubasis; CAROM::BasisReader ubasis_reader(filename + "_vel"); - const CAROM::Matrix *carom_ubasis = ubasis_reader.getSpatialBasis(num_basis); + std::shared_ptr carom_ubasis = ubasis_reader.getSpatialBasis(num_basis); CAROM::CopyMatrix(*carom_ubasis, ubasis); DenseTensor *nlin_rom = oper.GetReducedTensor(ubasis, ubasis); @@ -1337,8 +1337,8 @@ int main(int argc, char *argv[]) DenseMatrix ubasis, pbasis; CAROM::BasisReader ubasis_reader(filename + "_vel"); CAROM::BasisReader pbasis_reader(filename + "_pres"); - const CAROM::Matrix *carom_ubasis = ubasis_reader.getSpatialBasis(num_basis); - const CAROM::Matrix *carom_pbasis = pbasis_reader.getSpatialBasis(num_pbasis); + std::shared_ptr carom_ubasis = ubasis_reader.getSpatialBasis(num_basis); + std::shared_ptr carom_pbasis = pbasis_reader.getSpatialBasis(num_pbasis); CAROM::CopyMatrix(*carom_ubasis, ubasis); CAROM::CopyMatrix(*carom_pbasis, pbasis); @@ -1421,7 +1421,7 @@ int main(int argc, char *argv[]) // std::string snapshot_filename = filename + "_snapshot"; snapshot_generator.loadSamples(filename + "_snapshot", "snapshot"); // TODO: what happen if we do not deep-copy? - const CAROM::Matrix *snapshots = snapshot_generator.getSnapshotMatrix(); + std::shared_ptr snapshots = snapshot_generator.getSnapshotMatrix(); DenseMatrix u_basis; u_basis.CopyRows(basis, 0, ufes->GetTrueVSize() - 1); // indexes are inclusive. @@ -1534,8 +1534,8 @@ int main(int argc, char *argv[]) { CAROM::BasisReader ubasis_reader(filename + "_vel"); CAROM::BasisReader pbasis_reader(filename + "_pres"); - const CAROM::Matrix *carom_ubasis = ubasis_reader.getSpatialBasis(num_basis); - const CAROM::Matrix *carom_pbasis = pbasis_reader.getSpatialBasis(num_pbasis); + std::shared_ptr carom_ubasis = ubasis_reader.getSpatialBasis(num_basis); + std::shared_ptr carom_pbasis = pbasis_reader.getSpatialBasis(num_pbasis); CAROM::CopyMatrix(*carom_ubasis, ubasis); CAROM::CopyMatrix(*carom_pbasis, pbasis); @@ -1552,7 +1552,7 @@ int main(int argc, char *argv[]) else if (rom_mode == RomMode::TENSOR3) { CAROM::BasisReader ubasis_reader(filename + "_vel"); - const CAROM::Matrix *carom_ubasis = ubasis_reader.getSpatialBasis(num_basis); + std::shared_ptr carom_ubasis = ubasis_reader.getSpatialBasis(num_basis); CAROM::CopyMatrix(*carom_ubasis, ubasis); basis.SetSize(ubasis.NumRows() + pdim, ubasis.NumCols()); @@ -1581,7 +1581,7 @@ int main(int argc, char *argv[]) } CAROM::BasisReader pbasis_reader(filename + "_pres"); - const CAROM::Matrix *carom_pbasis = pbasis_reader.getSpatialBasis(num_pbasis); + std::shared_ptr carom_pbasis = pbasis_reader.getSpatialBasis(num_pbasis); CAROM::CopyMatrix(*carom_pbasis, pbasis); basis.SetSize(ubasis.NumRows() + pbasis.NumRows(), ubasis.NumCols() + pbasis.NumCols()); @@ -1598,8 +1598,8 @@ int main(int argc, char *argv[]) { CAROM::BasisReader ubasis_reader(filename + "_vel"); CAROM::BasisReader pbasis_reader(filename + "_pres"); - const CAROM::Matrix *carom_ubasis = ubasis_reader.getSpatialBasis(num_basis); - const CAROM::Matrix *carom_pbasis = pbasis_reader.getSpatialBasis(num_pbasis); + std::shared_ptr carom_ubasis = ubasis_reader.getSpatialBasis(num_basis); + std::shared_ptr carom_pbasis = pbasis_reader.getSpatialBasis(num_pbasis); CAROM::CopyMatrix(*carom_ubasis, ubasis); CAROM::CopyMatrix(*carom_pbasis, pbasis); @@ -1645,7 +1645,7 @@ int main(int argc, char *argv[]) else { CAROM::BasisReader basis_reader(filename); - const CAROM::Matrix *carom_basis = basis_reader.getSpatialBasis(num_basis); + std::shared_ptr carom_basis = basis_reader.getSpatialBasis(num_basis); CAROM::CopyMatrix(*carom_basis, basis); } diff --git a/src/sample_generator.cpp b/src/sample_generator.cpp index 8703772b..d58c0e68 100644 --- a/src/sample_generator.cpp +++ b/src/sample_generator.cpp @@ -332,7 +332,7 @@ void SampleGenerator::WriteSnapshotPorts() return; } -const CAROM::Matrix* SampleGenerator::LookUpSnapshot(const BasisTag &basis_tag) +std::shared_ptr SampleGenerator::LookUpSnapshot(const BasisTag &basis_tag) { assert(snapshot_generators.Size() > 0); assert(snapshot_generators.Size() == basis_tags.size()); @@ -561,7 +561,7 @@ void SampleGenerator::SaveSV(CAROM::BasisGenerator *basis_generator, const std:: if (!save_sv) return; assert(basis_generator != NULL); - const CAROM::Vector *rom_sv = basis_generator->getSingularValues(); + std::shared_ptr rom_sv = basis_generator->getSingularValues(); printf("Singular values: "); for (int d = 0; d < rom_sv->dim(); d++) printf("%.3E\t", rom_sv->item(d)); @@ -603,4 +603,4 @@ const int SampleGenerator::GetSnapshotOffset(const std::string &comp) } return offset; -} \ No newline at end of file +} diff --git a/src/steady_ns_solver.cpp b/src/steady_ns_solver.cpp index 024d6443..395a3358 100644 --- a/src/steady_ns_solver.cpp +++ b/src/steady_ns_solver.cpp @@ -1054,7 +1054,7 @@ void SteadyNSSolver::TrainROMEQPElems(SampleGenerator *sample_generator) int idx = (separate_variable_basis) ? c * num_var : c; basis_tag = rom_handler->GetRefBasisTag(idx); - const CAROM::Matrix *snapshots = sample_generator->LookUpSnapshot(basis_tag); + std::shared_ptr snapshots = sample_generator->LookUpSnapshot(basis_tag); comp_eqps[c]->TrainEQP(*snapshots, eqp_tol); } @@ -1084,8 +1084,8 @@ void SteadyNSSolver::TrainROMEQPElems(SampleGenerator *sample_generator) If LookUpSnapshot happens to find the same basis twice, it will nullify the first pointer. */ - const CAROM::Matrix *snapshots1 = sample_generator->LookUpSnapshot(basis_tag1); - const CAROM::Matrix *snapshots2 = NULL; + std::shared_ptr snapshots1 = sample_generator->LookUpSnapshot(basis_tag1); + std::shared_ptr snapshots2; if (basis_tag1 == basis_tag2) snapshots2 = snapshots1; else @@ -1360,4 +1360,4 @@ DenseTensor* SteadyNSSolver::GetReducedTensor(DenseMatrix *basis, FiniteElementS } // for (int i = 0; i < num_basis_c; i++) return tensor; -} \ No newline at end of file +} diff --git a/test/test_rom_interfaceform.cpp b/test/test_rom_interfaceform.cpp index a8a27339..b9e0ac3b 100644 --- a/test/test_rom_interfaceform.cpp +++ b/test/test_rom_interfaceform.cpp @@ -356,7 +356,7 @@ TEST(ROMInterfaceForm, SetupEQPSystem_for_a_port) /* bases generated from fictitious snapshots */ DenseMatrix basis1(ndofs1, num_basis1); DenseMatrix basis2(ndofs2, num_basis2); - const CAROM::Matrix *carom_snapshots1, *carom_snapshots2; + std::shared_ptr carom_snapshots1, carom_snapshots2; CAROM::BasisGenerator *basis1_generator, *basis2_generator; { CAROM::Options options(ndofs1, nsnap1, 1, true); @@ -372,7 +372,7 @@ TEST(ROMInterfaceForm, SetupEQPSystem_for_a_port) carom_snapshots1 = basis1_generator->getSnapshotMatrix(); CAROM::BasisReader basis_reader("test_basis1"); - const CAROM::Matrix *carom_basis = basis_reader.getSpatialBasis(num_basis1); + std::shared_ptr carom_basis = basis_reader.getSpatialBasis(num_basis1); CAROM::CopyMatrix(*carom_basis, basis1); } { @@ -389,7 +389,7 @@ TEST(ROMInterfaceForm, SetupEQPSystem_for_a_port) carom_snapshots2 = basis2_generator->getSnapshotMatrix(); CAROM::BasisReader basis_reader("test_basis2"); - const CAROM::Matrix *carom_basis = basis_reader.getSpatialBasis(num_basis2); + std::shared_ptr carom_basis = basis_reader.getSpatialBasis(num_basis2); CAROM::CopyMatrix(*carom_basis, basis2); } @@ -573,7 +573,7 @@ TEST(ROMInterfaceForm, Precompute) /* bases generated from fictitious snapshots */ DenseMatrix basis1(ndofs1, num_basis1); DenseMatrix basis2(ndofs2, num_basis2); - const CAROM::Matrix *carom_snapshots1, *carom_snapshots2; + std::shared_ptr carom_snapshots1, carom_snapshots2; CAROM::BasisGenerator *basis1_generator, *basis2_generator; { CAROM::Options options(ndofs1, nsnap1, 1, true); @@ -589,7 +589,7 @@ TEST(ROMInterfaceForm, Precompute) carom_snapshots1 = basis1_generator->getSnapshotMatrix(); CAROM::BasisReader basis_reader("test_basis1"); - const CAROM::Matrix *carom_basis = basis_reader.getSpatialBasis(num_basis1); + std::shared_ptr carom_basis = basis_reader.getSpatialBasis(num_basis1); CAROM::CopyMatrix(*carom_basis, basis1); } { @@ -606,7 +606,7 @@ TEST(ROMInterfaceForm, Precompute) carom_snapshots2 = basis2_generator->getSnapshotMatrix(); CAROM::BasisReader basis_reader("test_basis2"); - const CAROM::Matrix *carom_basis = basis_reader.getSpatialBasis(num_basis2); + std::shared_ptr carom_basis = basis_reader.getSpatialBasis(num_basis2); CAROM::CopyMatrix(*carom_basis, basis2); } @@ -800,7 +800,7 @@ TEST(ROMInterfaceForm, Precompute) // carom_snapshots = basis_generator->getSnapshotMatrix(); // CAROM::BasisReader basis_reader("test_basis"); -// const CAROM::Matrix *carom_basis = basis_reader.getSpatialBasis(num_basis); +// std::shared_ptr carom_basis = basis_reader.getSpatialBasis(num_basis); // CAROM::CopyMatrix(*carom_basis, basis); // } @@ -939,4 +939,4 @@ int main(int argc, char* argv[]) int result = RUN_ALL_TESTS(); MPI_Finalize(); return result; -} \ No newline at end of file +} diff --git a/test/test_rom_nonlinearform.cpp b/test/test_rom_nonlinearform.cpp index b32f8f57..f594b345 100644 --- a/test/test_rom_nonlinearform.cpp +++ b/test/test_rom_nonlinearform.cpp @@ -870,8 +870,8 @@ TEST(ROMNonlinearForm, SetupEQPSystemForDomainIntegrator) basis_generator.takeSample(snapshot.GetData()); } basis_generator.endSamples(); - const CAROM::Matrix *carom_snapshots = basis_generator.getSnapshotMatrix(); - const CAROM::Matrix *carom_basis = basis_generator.getSpatialBasis(); + std::shared_ptr carom_snapshots = basis_generator.getSnapshotMatrix(); + std::shared_ptr carom_basis = basis_generator.getSpatialBasis(); DenseMatrix basis(ndofs, num_basis); CAROM::CopyMatrix(*carom_basis, basis); @@ -980,8 +980,8 @@ TEST(ROMNonlinearForm, SetupEQPSystemForInteriorFaceIntegrator) basis_generator.takeSample(snapshot.GetData()); } basis_generator.endSamples(); - const CAROM::Matrix *carom_snapshots = basis_generator.getSnapshotMatrix(); - const CAROM::Matrix *carom_basis = basis_generator.getSpatialBasis(); + std::shared_ptr carom_snapshots = basis_generator.getSnapshotMatrix(); + std::shared_ptr carom_basis = basis_generator.getSpatialBasis(); DenseMatrix basis(ndofs, num_basis); CAROM::CopyMatrix(*carom_basis, basis); @@ -1091,8 +1091,8 @@ TEST(ROMNonlinearForm, SetupEQPSystemForBdrFaceIntegrator) basis_generator.takeSample(snapshot.GetData()); } basis_generator.endSamples(); - const CAROM::Matrix *carom_snapshots = basis_generator.getSnapshotMatrix(); - const CAROM::Matrix *carom_basis = basis_generator.getSpatialBasis(); + std::shared_ptr carom_snapshots = basis_generator.getSnapshotMatrix(); + std::shared_ptr carom_basis = basis_generator.getSpatialBasis(); DenseMatrix basis(ndofs, num_basis); CAROM::CopyMatrix(*carom_basis, basis); @@ -1188,4 +1188,4 @@ int main(int argc, char* argv[]) int result = RUN_ALL_TESTS(); MPI_Finalize(); return result; -} \ No newline at end of file +}