55 : dimension_(dimension) {
59 TEUCHOS_TEST_FOR_EXCEPTION((dimension!=(
int)numPoints1D.size()||
60 dimension!=(int)rule1D.size()),std::out_of_range,
61 ">>> ERROR (Quadrature): Dimension mismatch for inputs.");
63 std::vector<int> degree(1,0);
65 for (
int i=0; i<dimension; i++) {
71 newRule = kron_prod<Real>(newRule,rule1);
73 typename std::map<std::vector<Real>,
int>::iterator it;
75 std::vector<Real> node(dimension,0.0);
76 for (it=newRule.
begin(); it!=newRule.
end(); it++) {
88 std::vector<EROLGrowth> growth1D,
bool isNormalized)
89 : dimension_(dimension) {
93 TEUCHOS_TEST_FOR_EXCEPTION((dimension!=(
int)numPoints1D.size()||
94 dimension!=(int)rule1D.size()||
95 dimension!=(int)growth1D.size()),std::out_of_range,
96 ">>> ERROR (Quadrature): Dimension mismatch for inputs.");
99 std::vector<int> degree(1);
101 for (
int i=0; i<dimension; i++) {
103 int numPoints =
growthRule1D(numPoints1D[i],growth1D[i],rule1D[i]);
108 newRule = kron_prod<Real>(newRule,rule1);
110 typename std::map<std::vector<Real>,
int>::iterator it;
112 std::vector<Real> node;
113 for (it=newRule.
begin(); it!=newRule.
end(); it++) {
123 template <
class Real>
125 std::vector<EROLGrowth> growth1D,
bool isNormalized)
126 : dimension_(dimension) {
130 TEUCHOS_TEST_FOR_EXCEPTION((dimension!=(
int)rule1D.size()||
131 dimension!=(int)growth1D.size()),std::out_of_range,
132 ">>> ERROR (Quadrature): Dimension mismatch for inputs.");
135 std::vector<int> degree(1);
137 for (
int i=0; i<dimension; i++) {
139 int numPoints =
growthRule1D(maxNumPoints,growth1D[i],rule1D[i]);
144 newRule = kron_prod<Real>(newRule,rule1);
146 typename std::map<std::vector<Real>,
int>::iterator it;
148 std::vector<Real> node;
149 for (it=newRule.
begin(); it!=newRule.
end(); it++) {
159 typedef void ( *
GWPointer ) (
int order,
int np,
double p[],
double w[] );
163 template <
class Real>
165 std::vector<EROLGrowth> growth1D,
bool isNormalized,
166 bool useSandia) : dimension_(dim) {
167 std::vector<Real> sparse_point;
168 std::vector<Real> sparse_weight;
181 std::vector<int> growth(dim,0);
182 std::vector<int> rule(dim,0);
183 for(
int i = 0; i < dim; i++ ) {
184 switch( rule1D[i] ) {
192 default: rule[i] = 1;
194 switch( growth1D[i] ) {
202 default: growth[i] = 0;
206 std::vector<Real> level_weight(dim,1.0);
207 std::vector<int> np(dim,0);
209 std::vector<Real> p(np_sum,0.0);
212 int point_total_num = webbur.
sgmga_size_total(dim,&level_weight[0],maxLevel,&rule[0],&growth[0]);
214 point_num = webbur.
sgmga_size(dim,&level_weight[0],maxLevel,&rule[0],&np[0],&p[0],
215 gw_compute_points,tol,&growth[0]);
217 std::vector<int> sparse_unique_index( point_total_num );
218 webbur.
sgmga_unique_index(dim,&level_weight[0],maxLevel,&rule[0],&np[0],&p[0],gw_compute_points,
219 tol,point_num,point_total_num,&growth[0],&sparse_unique_index[0]);
221 std::vector<int> sparse_order(dim*point_num,0);
222 std::vector<int> sparse_index(dim*point_num,0);
223 webbur.
sgmga_index(dim,&level_weight[0],maxLevel,&rule[0],point_num,point_total_num,
224 &sparse_unique_index[0],&growth[0],&sparse_order[0],&sparse_index[0]);
227 sparse_point.resize(dim*point_num,0.0);
228 webbur.
sgmga_point(dim,&level_weight[0],maxLevel,&rule[0],&np[0],&p[0],gw_compute_points,point_num,
229 &sparse_order[0],&sparse_index[0],&growth[0],&sparse_point[0]);
231 sparse_weight.resize(point_num,0.0);
232 webbur.
sgmga_weight(dim,&level_weight[0],maxLevel,&rule[0],&np[0],&p[0],gw_compute_weights,
233 point_num,point_total_num,&sparse_unique_index[0],&growth[0],&sparse_weight[0]);
235 delete [] gw_compute_points;
236 delete [] gw_compute_weights;
256 for (
int i=0; i<dim; i++) {
308 std::vector<Real> level_weight(dim,1.0);
309 std::vector<int> np(dim,0);
311 std::vector<Real> p(np_sum,0.0);
314 int point_total_num = webbur.
sgmga_size_total(dim,&level_weight[0],maxLevel,growth,
317 point_num = webbur.
sgmga_size(dim,&level_weight[0],maxLevel,gw_compute_points,tol,growth,
320 std::vector<int> sparse_unique_index(point_total_num);
321 webbur.
sgmga_unique_index(dim,&level_weight[0],maxLevel,gw_compute_points,tol,point_num,
322 point_total_num,growth,gw_compute_order,&sparse_unique_index[0]);
324 std::vector<int> sparse_order(dim*point_num,0);
325 std::vector<int> sparse_index(dim*point_num,0);
326 webbur.
sgmga_index(dim,&level_weight[0],maxLevel,point_num,point_total_num,&sparse_unique_index[0],
327 growth,gw_compute_order,&sparse_order[0],&sparse_index[0]);
330 sparse_point.resize(dim*point_num,0.0);
331 webbur.
sgmga_point(dim,&level_weight[0],maxLevel,gw_compute_points,point_num,&sparse_order[0],
332 &sparse_index[0],growth,gw_compute_order,&sparse_point[0]);
334 sparse_weight.resize(point_num,0.0);
335 webbur.
sgmga_weight(dim,&level_weight[0],maxLevel,gw_compute_weights,point_num,point_total_num,
336 &sparse_unique_index[0],growth,gw_compute_order,&sparse_weight[0]);
338 delete [] gw_compute_points;
339 delete [] gw_compute_weights;
340 delete [] gw_compute_order;
346 typename std::map<std::vector<Real>,
int>::iterator it;
348 std::vector<Real> node(dim,0.0);;
349 for (
int i = 0; i < point_num; i++) {
350 weight = sparse_weight[i];
351 for (
int j = 0; j < dim; j++) {
352 node[j] = sparse_point[j+i*dim];
364 std::fstream info; info.open(SGinfo);
369 int dim_num = (int)buf;
370 dimension_ = dim_num;
374 int point_num = (int)buf;
380 std::fstream file; file.open(SGdata);
384 std::vector<Real> node(dim_num, 0.0);
386 for (
int i = 0; i < point_num; i++ ) {
388 for (
int j = 0; j < dim_num; j++ ) {
396 addPointAndWeight(node,weight,loc);
399 file.ignore(256,
'\n');
void sgmga_index(int dim_num, double level_weight[], int level_max, int rule[], int point_num, int point_total_num, int sparse_unique_index[], int growth[], int sparse_order[], int sparse_index[])
void fejer2_points(int n, int dim, double x[])
void sgmga_point(int dim_num, double level_weight[], int level_max, int rule[], int np[], double p[], void(*gw_compute_points[])(int order, int np, double p[], double x[]), int point_num, int sparse_order[], int sparse_index[], int growth[], double sparse_point[])
void sgmga_weight(int dim_num, double level_weight[], int level_max, void(SandiaRules2::*gw_compute_weights[])(int order, int dim, double w[]), int point_num, int point_total_num, int sparse_unique_index[], int growth, int(SandiaRules::*gw_compute_order[])(int level, int growth), double sparse_weight[])
void patterson_points(int n, int dim, double x[])
int sgmga_size_total(int dim_num, double level_weight[], int level_max, int growth, int(SandiaRules::*gw_compute_order[])(int level, int growth))
void laguerre_weights(int n, int dim, double w[])
void hermite_points(int n, int dim, double x[])
virtual void getAccuracy(std::vector< int > &accuracy) const
int sgmga_size_total(int dim_num, double level_weight[], int level_max, int rule[], int growth[])
void laguerre_points(int n, int dim, double x[])
void sgmga_point(int dim_num, double level_weight[], int level_max, void(SandiaRules2::*gw_compute_points[])(int order, int dim, double x[]), int point_num, int sparse_order[], int sparse_index[], int growth, int(SandiaRules::*gw_compute_order[])(int level, int growth), double sparse_point[])
void clenshaw_curtis_weights(int n, int dim, double w[])
int level_to_order_exp_hgk(int level, int growth)
void clenshaw_curtis_points(int n, int dim, double x[])
void sgmga_weight(int dim_num, double level_weight[], int level_max, int rule[], int np[], double p[], void(*gw_compute_weights[])(int order, int np, double p[], double w[]), int point_num, int point_total_num, int sparse_unique_index[], int growth[], double sparse_weight[])
void sgmga_unique_index(int dim_num, double level_weight[], int level_max, int rule[], int np[], double p[], void(*gw_compute_points[])(int order, int np, double p[], double x[]), double tol, int point_num, int point_total_num, int growth[], int sparse_unique_index[])
void hermite_weights(int n, int dim, double w[])
int sgmga_size(int dim_num, double level_weight[], int level_max, void(SandiaRules2::*gw_compute_points[])(int order, int dim, double x[]), double tol, int growth, int(SandiaRules::*gw_compute_order[])(int level, int growth))
virtual std::map< std::vector< Real >, int >::iterator end()
void addPointAndWeight(std::vector< Real > point, Real weight, int loc)
void(* GWPointer)(int order, int np, double p[], double w[])
Quadrature(int dimension=1)
int i4vec_sum(int n, int a[])
int level_to_order_exp_f2(int level, int growth)
void sgmga_unique_index(int dim_num, double level_weight[], int level_max, void(SandiaRules2::*gw_compute_points[])(int order, int dim, double x[]), double tol, int point_num, int point_total_num, int growth, int(SandiaRules::*gw_compute_order[])(int level, int growth), int sparse_unique_index[])
virtual Real getWeight(int node)
int(SandiaRules::* GWPointer2)(int level, int growth)
std::vector< int > accuracy_
void patterson_weights(int n, int dim, double w[])
void(SandiaRules2::* GWPointer1)(int order, int dim, double w[])
int level_to_order_exp_gauss(int level, int growth)
void legendre_points(int n, int dim, double x[])
void hermite_genz_keister_points(int n, int dim, double x[])
virtual std::map< std::vector< Real >, int >::iterator begin()
int level_to_order_exp_gp(int level, int growth)
void hermite_genz_keister_weights(int n, int dim, double w[])
void sgmga_index(int dim_num, double level_weight[], int level_max, int point_num, int point_total_num, int sparse_unique_index[], int growth, int(SandiaRules::*gw_compute_order[])(int level, int growth), int sparse_order[], int sparse_index[])
int sgmga_size(int dim_num, double level_weight[], int level_max, int rule[], int np[], double p[], void(*gw_compute_points[])(int order, int np, double p[], double x[]), double tol, int growth[])
int growthRule1D(int index, EROLGrowth growth, EROLBurkardt rule)
int level_to_order_exp_cc(int level, int growth)
void legendre_weights(int n, int dim, double w[])
void fejer2_weights(int n, int dim, double w[])