Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docker/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -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
ENV MUMPS_DIR=$LIB_DIR/mumps/build/local
2 changes: 1 addition & 1 deletion include/sample_generator.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<const CAROM::Matrix> LookUpSnapshot(const BasisTag &basis_tag);
Array2D<int>* LookUpSnapshotPortColOffsets(const PortTag &port_tag);

void ReportStatus(const int &sample_idx);
Expand Down
6 changes: 3 additions & 3 deletions sketches/librom_qr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ int main(int argc, char *argv[])
}
printf("\n");

CAROM::Matrix* rand_proj = snapshot_matrix->mult(rand_mat);
std::unique_ptr<CAROM::Matrix> 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++) {
Expand Down Expand Up @@ -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++) {
Expand All @@ -100,4 +100,4 @@ int main(int argc, char *argv[])

MPI_Finalize();
return 0;
}
}
6 changes: 3 additions & 3 deletions sketches/librom_svd.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<const CAROM::Vector> 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<const CAROM::Matrix> spatialbasis;
spatialbasis = basis_generator->getSpatialBasis();
printf("Basis.\n");
for (int i = 0; i < spatialbasis->numRows(); i++) {
Expand All @@ -61,4 +61,4 @@ int main(int argc, char *argv[])

MPI_Finalize();
return 0;
}
}
10 changes: 5 additions & 5 deletions sketches/linalg_interface.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ int main(int argc, char *argv[])
}

// librom snapshot matrix.
const CAROM::Matrix *carom_mat = generator->getSnapshotMatrix();
std::shared_ptr<const CAROM::Matrix> 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++)
{
Expand All @@ -62,7 +62,7 @@ int main(int argc, char *argv[])
printf("\n");

// librom pod basis.
const CAROM::Matrix *basis = generator->getSpatialBasis();
std::shared_ptr<const CAROM::Matrix> basis = generator->getSpatialBasis();
printf("basis (%d x %d)\n", basis->numRows(), basis->numColumns());
for (int i = 0; i < basis->numRows(); i++)
{
Expand All @@ -73,14 +73,14 @@ int main(int argc, char *argv[])
printf("\n");

// librom singular value;
const CAROM::Vector *sv = generator->getSingularValues();
std::shared_ptr<const CAROM::Vector> 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<const CAROM::Matrix> 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++)
{
Expand Down Expand Up @@ -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<CAROM::Matrix> 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);

Expand Down
32 changes: 16 additions & 16 deletions sketches/ns_rom.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<const CAROM::Vector> rom_sv = snapshot_generator.getSingularValues();
printf("Singular values: ");
for (int d = 0; d < rom_sv->dim(); d++)
printf("%.3E\t", rom_sv->item(d));
Expand Down Expand Up @@ -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<const CAROM::Matrix> carom_basis = basis_reader.getSpatialBasis(num_basis);
CAROM::CopyMatrix(*carom_basis, basis);

const int fom_vdofs = oper.Height();
Expand Down Expand Up @@ -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<const CAROM::Matrix> snapshots = snapshot_reader.getSnapshotMatrix();
DenseMatrix wgted_snapshots;
CAROM::CopyMatrix(*snapshots, wgted_snapshots);
for (int i = ufes->GetTrueVSize(); i < wgted_snapshots.NumRows(); i++)
Expand All @@ -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<const CAROM::Matrix> 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++)
Expand Down Expand Up @@ -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<const CAROM::Matrix> carom_basis = basis_reader.getSpatialBasis(num_basis);
CAROM::CopyMatrix(*carom_basis, basis);
}

Expand Down Expand Up @@ -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<const CAROM::Matrix> carom_ubasis = ubasis_reader.getSpatialBasis(num_basis);
CAROM::CopyMatrix(*carom_ubasis, ubasis);

DenseTensor *nlin_rom = oper.GetReducedTensor(ubasis, ubasis);
Expand All @@ -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<const CAROM::Matrix> carom_ubasis = ubasis_reader.getSpatialBasis(num_basis);
std::shared_ptr<const CAROM::Matrix> carom_pbasis = pbasis_reader.getSpatialBasis(num_pbasis);
CAROM::CopyMatrix(*carom_ubasis, ubasis);
CAROM::CopyMatrix(*carom_pbasis, pbasis);

Expand Down Expand Up @@ -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<const CAROM::Matrix> snapshots = snapshot_generator.getSnapshotMatrix();

DenseMatrix u_basis;
u_basis.CopyRows(basis, 0, ufes->GetTrueVSize() - 1); // indexes are inclusive.
Expand Down Expand Up @@ -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<const CAROM::Matrix> carom_ubasis = ubasis_reader.getSpatialBasis(num_basis);
std::shared_ptr<const CAROM::Matrix> carom_pbasis = pbasis_reader.getSpatialBasis(num_pbasis);
CAROM::CopyMatrix(*carom_ubasis, ubasis);
CAROM::CopyMatrix(*carom_pbasis, pbasis);

Expand All @@ -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<const CAROM::Matrix> carom_ubasis = ubasis_reader.getSpatialBasis(num_basis);
CAROM::CopyMatrix(*carom_ubasis, ubasis);

basis.SetSize(ubasis.NumRows() + pdim, ubasis.NumCols());
Expand Down Expand Up @@ -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<const CAROM::Matrix> carom_pbasis = pbasis_reader.getSpatialBasis(num_pbasis);
CAROM::CopyMatrix(*carom_pbasis, pbasis);

basis.SetSize(ubasis.NumRows() + pbasis.NumRows(), ubasis.NumCols() + pbasis.NumCols());
Expand All @@ -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<const CAROM::Matrix> carom_ubasis = ubasis_reader.getSpatialBasis(num_basis);
std::shared_ptr<const CAROM::Matrix> carom_pbasis = pbasis_reader.getSpatialBasis(num_pbasis);
CAROM::CopyMatrix(*carom_ubasis, ubasis);
CAROM::CopyMatrix(*carom_pbasis, pbasis);

Expand Down Expand Up @@ -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<const CAROM::Matrix> carom_basis = basis_reader.getSpatialBasis(num_basis);
CAROM::CopyMatrix(*carom_basis, basis);
}

Expand Down
6 changes: 3 additions & 3 deletions src/sample_generator.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -332,7 +332,7 @@ void SampleGenerator::WriteSnapshotPorts()
return;
}

const CAROM::Matrix* SampleGenerator::LookUpSnapshot(const BasisTag &basis_tag)
std::shared_ptr<const CAROM::Matrix> SampleGenerator::LookUpSnapshot(const BasisTag &basis_tag)
{
assert(snapshot_generators.Size() > 0);
assert(snapshot_generators.Size() == basis_tags.size());
Expand Down Expand Up @@ -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<const CAROM::Vector> rom_sv = basis_generator->getSingularValues();
printf("Singular values: ");
for (int d = 0; d < rom_sv->dim(); d++)
printf("%.3E\t", rom_sv->item(d));
Expand Down Expand Up @@ -603,4 +603,4 @@ const int SampleGenerator::GetSnapshotOffset(const std::string &comp)
}

return offset;
}
}
8 changes: 4 additions & 4 deletions src/steady_ns_solver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<const CAROM::Matrix> snapshots = sample_generator->LookUpSnapshot(basis_tag);
comp_eqps[c]->TrainEQP(*snapshots, eqp_tol);
}

Expand Down Expand Up @@ -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<const CAROM::Matrix> snapshots1 = sample_generator->LookUpSnapshot(basis_tag1);
std::shared_ptr<const CAROM::Matrix> snapshots2;
if (basis_tag1 == basis_tag2)
snapshots2 = snapshots1;
else
Expand Down Expand Up @@ -1360,4 +1360,4 @@ DenseTensor* SteadyNSSolver::GetReducedTensor(DenseMatrix *basis, FiniteElementS
} // for (int i = 0; i < num_basis_c; i++)

return tensor;
}
}
16 changes: 8 additions & 8 deletions test/test_rom_interfaceform.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<const CAROM::Matrix> carom_snapshots1, carom_snapshots2;
CAROM::BasisGenerator *basis1_generator, *basis2_generator;
{
CAROM::Options options(ndofs1, nsnap1, 1, true);
Expand All @@ -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<const CAROM::Matrix> carom_basis = basis_reader.getSpatialBasis(num_basis1);
CAROM::CopyMatrix(*carom_basis, basis1);
}
{
Expand All @@ -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<const CAROM::Matrix> carom_basis = basis_reader.getSpatialBasis(num_basis2);
CAROM::CopyMatrix(*carom_basis, basis2);
}

Expand Down Expand Up @@ -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<const CAROM::Matrix> carom_snapshots1, carom_snapshots2;
CAROM::BasisGenerator *basis1_generator, *basis2_generator;
{
CAROM::Options options(ndofs1, nsnap1, 1, true);
Expand All @@ -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<const CAROM::Matrix> carom_basis = basis_reader.getSpatialBasis(num_basis1);
CAROM::CopyMatrix(*carom_basis, basis1);
}
{
Expand All @@ -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<const CAROM::Matrix> carom_basis = basis_reader.getSpatialBasis(num_basis2);
CAROM::CopyMatrix(*carom_basis, basis2);
}

Expand Down Expand Up @@ -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<const CAROM::Matrix> carom_basis = basis_reader.getSpatialBasis(num_basis);
// CAROM::CopyMatrix(*carom_basis, basis);
// }

Expand Down Expand Up @@ -939,4 +939,4 @@ int main(int argc, char* argv[])
int result = RUN_ALL_TESTS();
MPI_Finalize();
return result;
}
}
14 changes: 7 additions & 7 deletions test/test_rom_nonlinearform.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<const CAROM::Matrix> carom_snapshots = basis_generator.getSnapshotMatrix();
std::shared_ptr<const CAROM::Matrix> carom_basis = basis_generator.getSpatialBasis();
DenseMatrix basis(ndofs, num_basis);
CAROM::CopyMatrix(*carom_basis, basis);

Expand Down Expand Up @@ -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<const CAROM::Matrix> carom_snapshots = basis_generator.getSnapshotMatrix();
std::shared_ptr<const CAROM::Matrix> carom_basis = basis_generator.getSpatialBasis();
DenseMatrix basis(ndofs, num_basis);
CAROM::CopyMatrix(*carom_basis, basis);

Expand Down Expand Up @@ -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<const CAROM::Matrix> carom_snapshots = basis_generator.getSnapshotMatrix();
std::shared_ptr<const CAROM::Matrix> carom_basis = basis_generator.getSpatialBasis();
DenseMatrix basis(ndofs, num_basis);
CAROM::CopyMatrix(*carom_basis, basis);

Expand Down Expand Up @@ -1188,4 +1188,4 @@ int main(int argc, char* argv[])
int result = RUN_ALL_TESTS();
MPI_Finalize();
return result;
}
}