libROM  v1.0
Data-driven physical simulation library
Hyperreduction.cpp
1 
11 #include "Hyperreduction.h"
12 #include "DEIM.h"
13 #include "QDEIM.h"
14 #include "GNAT.h"
15 #include "S_OPT.h"
16 
17 #include "linalg/Matrix.h"
18 #include "utils/Utilities.h"
19 
20 namespace CAROM {
21 
22 Hyperreduction::Hyperreduction(const char* sampling_type)
23 {
24  auto iter = SamplingTypeMap.find(sampling_type);
25  CAROM_VERIFY(iter != std::end(SamplingTypeMap));
26 
27  samplingType = iter->second;
28 }
29 
30 void Hyperreduction::ComputeSamples(const std::shared_ptr<Matrix> & f_basis,
31  int num_f_basis_vectors_used,
32  std::vector<int>& f_sampled_row,
33  std::vector<int>& f_sampled_rows_per_proc,
34  Matrix& f_basis_sampled_inv,
35  int myid,
36  int num_procs,
37  const int num_samples_req,
38  std::vector<int> *init_samples,
39  bool qr_factorize)
40 {
41  switch (samplingType)
42  {
43  case deim:
44  CAROM_VERIFY(num_samples_req == f_basis->numColumns());
45  DEIM(*f_basis,
46  num_f_basis_vectors_used,
47  f_sampled_row,
48  f_sampled_rows_per_proc,
49  f_basis_sampled_inv,
50  myid, num_procs);
51  return;
52  case gnat:
53  GNAT(*f_basis,
54  num_f_basis_vectors_used,
55  f_sampled_row,
56  f_sampled_rows_per_proc,
57  f_basis_sampled_inv,
58  myid, num_procs,
59  num_samples_req,
60  init_samples);
61  return;
62  case qdeim:
63  QDEIM(*f_basis,
64  num_f_basis_vectors_used,
65  f_sampled_row,
66  f_sampled_rows_per_proc,
67  f_basis_sampled_inv,
68  myid, num_procs,
69  num_samples_req);
70  return;
71  case sopt:
72  S_OPT(*f_basis,
73  num_f_basis_vectors_used,
74  f_sampled_row,
75  f_sampled_rows_per_proc,
76  f_basis_sampled_inv,
77  myid, num_procs,
78  num_samples_req,
79  init_samples,
80  qr_factorize);
81  return;
82  default:
83  CAROM_ERROR("Sampling type not supported");
84  }
85 }
86 
87 }
void DEIM(const Matrix &f_basis, int num_f_basis_vectors_used, std::vector< int > &f_sampled_row, std::vector< int > &f_sampled_rows_per_proc, Matrix &f_basis_sampled_inv, int myid, int num_procs)
Computes the DEIM algorithm on the given basis.
Definition: DEIM.cpp:29
void GNAT(const Matrix &f_basis, const int num_f_basis_vectors_used, std::vector< int > &f_sampled_row, std::vector< int > &f_sampled_rows_per_proc, Matrix &f_basis_sampled_inv, const int myid, const int num_procs, const int num_samples_req, std::vector< int > *init_samples)
Computes the GNAT algorithm on the given basis.
Definition: GNAT.cpp:27
void S_OPT(const Matrix &f_basis, int num_f_basis_vectors_used, std::vector< int > &f_sampled_row, std::vector< int > &f_sampled_rows_per_proc, Matrix &f_basis_sampled_inv, const int myid, const int num_procs, const int num_samples_req, std::vector< int > *init_samples, bool qr_factorize)
Computes the S_OPT algorithm on the given basis.
Definition: S_OPT.cpp:30
void QDEIM(const Matrix &f_basis, int num_f_basis_vectors_used, std::vector< int > &f_sampled_row, std::vector< int > &f_sampled_rows_per_proc, Matrix &f_basis_sampled_inv, const int myid, const int num_procs, const int num_samples_req)
Computes the QDEIM algorithm on the given basis.
Definition: QDEIM.cpp:25