Intrepid
Intrepid_AdaptiveSparseGrid.hpp
Go to the documentation of this file.
1// @HEADER
2// ************************************************************************
3//
4// Intrepid Package
5// Copyright (2007) Sandia Corporation
6//
7// Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
8// license for use of this work by or on behalf of the U.S. Government.
9//
10// Redistribution and use in source and binary forms, with or without
11// modification, are permitted provided that the following conditions are
12// met:
13//
14// 1. Redistributions of source code must retain the above copyright
15// notice, this list of conditions and the following disclaimer.
16//
17// 2. Redistributions in binary form must reproduce the above copyright
18// notice, this list of conditions and the following disclaimer in the
19// documentation and/or other materials provided with the distribution.
20//
21// 3. Neither the name of the Corporation nor the names of the
22// contributors may be used to endorse or promote products derived from
23// this software without specific prior written permission.
24//
25// THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
26// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
27// IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
28// PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
29// CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
30// EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
31// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
32// PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
33// LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
34// NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
35// SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
36//
37// Questions? Contact Pavel Bochev (pbboche@sandia.gov)
38// Denis Ridzal (dridzal@sandia.gov), or
39// Kara Peterson (kjpeter@sandia.gov)
40//
41// ************************************************************************
42// @HEADER
43
49#ifndef INTREPID_ADAPTIVESPARSEGRID_HPP
50#define INTREPID_ADAPTIVESPARSEGRID_HPP
51
53#include <set>
54
55namespace Intrepid {
56
63template<class Scalar, class UserVector>
65public:
72 static Scalar refine_grid(
73 typename std::multimap<Scalar,std::vector<int> > & indexSet,
74 UserVector & integralValue,
75 AdaptiveSparseGridInterface<Scalar,UserVector> & problem_data);
76
85 static Scalar refine_grid(
86 typename std::multimap<Scalar,std::vector<int> > & activeIndex,
87 std::set<std::vector<int> > & oldIndex,
88 UserVector & integralValue,
89 Scalar globalErrorIndicator,
90 AdaptiveSparseGridInterface<Scalar,UserVector> & problem_data);
91
101 static Scalar refine_grid(
102 typename std::multimap<Scalar,std::vector<int> > & activeIndex,
103 std::set<std::vector<int> > & oldIndex,
104 UserVector & integralValue,
105 CubatureTensorSorted<Scalar> & cubRule,
106 Scalar globalErrorIndicator,
107 AdaptiveSparseGridInterface<Scalar,UserVector> & problem_data);
108 /*
109 static void coarsen_grid(
110 typename std::multimap<Scalar,std::vector<int> > & indexSet,
111 int dimension,
112 std::vector<EIntrepidBurkardt> rule1D,
113 std::vector<EIntrepidGrowth> growth1D);
114
115 static void coarsen_grid(
116 typename std::multimap<Scalar,std::vector<int> > & activeIndex,
117 std::set<std::vector<int> > oldIndex,
118 int dimension;
119 std::vector<EIntrepidBurkardt> rule1D,
120 std::vector<EIntrepidGrowth> growth1D);
121 */
122
129 static void build_diffRule(
130 CubatureTensorSorted<Scalar> & outRule,
131 std::vector<int> index,
132 AdaptiveSparseGridInterface<Scalar,UserVector> & problem_data);
133
143 static void build_diffRule(
144 CubatureTensorSorted<Scalar> & outRule,
145 std::vector<int> index,
146 int dimension,
147 std::vector<EIntrepidBurkardt> rule1D,
148 std::vector<EIntrepidGrowth> growth1D,
149 bool isNormalized);
150
158 static bool isAdmissible(
159 std::vector<int> index,
160 int direction,
161 std::set<std::vector<int> > inOldIndex,
162 AdaptiveSparseGridInterface<Scalar,UserVector> & problem_data);
163
173 static void buildSparseGrid(
174 CubatureTensorSorted<Scalar> & output,
175 int dimension, int maxlevel,
176 std::vector<EIntrepidBurkardt> rule1D,
177 std::vector<EIntrepidGrowth> growth1D,
178 bool isNormalized);
179
180
181
182};
183
184} // End Intrepid namespace
185
186// include templated definitions
188
189#endif
Definition file for the Intrepid::AdaptiveSparseGrid class.
Header file for the Intrepid::AdaptiveSparseGridInterface class.
Builds general adaptive sparse grid rules (Gerstner and Griebel) using the 1D cubature rules in the I...
static void buildSparseGrid(CubatureTensorSorted< Scalar > &output, int dimension, int maxlevel, std::vector< EIntrepidBurkardt > rule1D, std::vector< EIntrepidGrowth > growth1D, bool isNormalized)
Build a classic isotropic sparse grid.
static void build_diffRule(CubatureTensorSorted< Scalar > &outRule, std::vector< int > index, AdaptiveSparseGridInterface< Scalar, UserVector > &problem_data)
Given an index, build the corresponding differential cubature rule.
static bool isAdmissible(std::vector< int > index, int direction, std::set< std::vector< int > > inOldIndex, AdaptiveSparseGridInterface< Scalar, UserVector > &problem_data)
Check admissibility of an index set, outputs true if admissible.
static Scalar refine_grid(typename std::multimap< Scalar, std::vector< int > > &indexSet, UserVector &integralValue, AdaptiveSparseGridInterface< Scalar, UserVector > &problem_data)
Update adaptive sparse grid.