1 #ifndef DUNE_FEM_GRIDSOLUTION_HH 2 #define DUNE_FEM_GRIDSOLUTION_HH 4 #include <dune/common/exceptions.hh> 5 #include <dune/grid/utility/hierarchicsearch.hh> 10 #include <dune/grid/spgrid.hh> 28 template <
class Gr
idImp,
class DiscreteFunctionImp >
35 typedef typename DiscreteFunctionSpaceType :: RangeType
RangeType ;
36 typedef typename DiscreteFunctionSpaceType :: DomainType
DomainType ;
37 typedef typename DiscreteFunctionSpaceType :: GridPartType
GridPartType ;
42 typedef typename GridType :: template Codim<0> :: Entity
EntityType;
58 GridType&
grid() { assert( grid_ );
return *
grid_ ; }
59 const GridType&
grid()
const { assert( grid_ );
return *
grid_ ; }
63 const int rank = -1 ) :
64 grid_( CheckPointerType :: restoreGrid( checkPointFile, rank ) ),
68 discreteFunction_(
"grid-sol", space_),
69 data_( &discreteFunction_ ),
70 hierarchicSearch_(
grid(), gridPart_.indexSet() )
85 void evaluate(
const DomainType& x,
const double time, RangeType& result)
const 96 void evaluate(
const DomainType& x, RangeType& result)
const 99 EntityPointerType ep = hierarchicSearch_.findEntity( x );
100 const EntityType& entity = *ep ;
102 typedef typename EntityType :: Geometry Geometry;
103 const Geometry& geo = entity.geometry();
105 const DomainType local = geo.local( x );
109 const Dune::ReferenceElement< typename GridType::ctype, GridType::dimensionworld > &refElement
110 = Dune::ReferenceElements< typename GridType::ctype, GridType::dimensionworld >::general( entity.type() );
112 assert( refElement.checkInside( local ) );
117 discreteFunction_.localFunction( entity ).evaluate( local, result );
124 const int writeStep )
126 typedef tuple< const DiscreteFunctionType* > OutputTuple;
127 OutputTuple data( &discreteFunction );
146 template <
class Gr
idImp,
class DiscreteFunctionImp >
155 typedef typename DiscreteFunctionSpaceType :: GridPartType
GridPartType;
158 typedef typename FunctionSpaceType :: RangeType
RangeType;
164 template <
class DomainType,
class Gr
id>
170 typedef typename Grid :: LevelGridView MacroView ;
171 typedef typename MacroView :: template Codim< 0 > :: Iterator Iterator ;
172 typedef typename Iterator :: Entity Entity;
173 const MacroView& macroView = grid.levelGridView( 0 );
174 const Iterator end = macroView.template end< 0 > ();
175 for( Iterator it = macroView.template begin< 0 > (); it != end; ++it )
177 const Entity& entity = * it ;
179 const Dune::ReferenceElement< typename Grid::ctype, Grid::dimensionworld > &refElement
180 = Dune::ReferenceElements< typename Grid::ctype, Grid::dimensionworld >::general( entity.type() );
182 typedef typename Entity :: Geometry Geometry;
183 const Geometry& geo = entity.geometry();
185 if( refElement.checkInside( geo.local( geo.center() ) ) )
193 template <
class DomainType,
class ct,
int dim,
template<
int >
class Strategy ,
class Comm>
194 struct CheckDomain< DomainType, SPGrid< ct, dim, Strategy, Comm > >
196 typedef SPGrid< ct, dim, Strategy, Comm > Grid;
197 static bool isInside(
const DomainType& x,
const Grid&
grid )
199 return grid.domain().contains( x );
207 int numProcs(
const std::string& checkPointFile)
const 216 numProcs_( numProcs( checkPointFile ) ),
217 solutions_( numProcs_, (GridSolutionType *) 0 )
219 for(
int p=0; p<numProcs_; ++p)
222 std::cout <<
"GridSolutionVector: Reading Grid " << p <<
" from checkpoint" << std::endl;
223 solutions_[ p ] =
new GridSolutionType( checkPointFile, p );
229 for(
int p=0; p<numProcs_; ++p)
231 delete solutions_[ p ];
243 void evaluate(
const DomainType& x,
const double time, RangeType& result)
const 254 void evaluate(
const DomainType& x, RangeType& result)
const 256 for(
int p=0; p<numProcs_; ++p)
258 assert( solutions_[ p ] );
259 const GridSolutionType& gridSolution = *(solutions_[ p ]);
260 if( isInDomain( x, gridSolution.
grid() ) )
268 std::cerr <<
"GridSolutionVector::evaluate: no grid found for point " << x << std::endl;
282 const int writeStep = 0 )
284 GridSolutionType :: writeDiscreteFunction( grid, discreteFunction, time, writeStep );
289 assert( rank < numProcs_ );
290 return solutions_[ rank ]->discreteFunction();
298 #endif // #ifndef DUNE_FEM_GRIDSOLUTION_HH DiscreteFunctionSpaceType space_
Definition: gridsolution.hh:52
static void writeDiscreteFunction(const GridType &grid, const DiscreteFunctionType &discreteFunction, const double time, const int writeStep)
writes a discrete function
Definition: gridsolution.hh:121
DiscreteFunctionSpaceType::RangeType RangeType
Definition: gridsolution.hh:35
GridPartType gridPart_
Definition: gridsolution.hh:51
DiscreteFunctionType discreteFunction_
Definition: gridsolution.hh:53
HierarchicSearchType hierarchicSearch_
Definition: gridsolution.hh:55
const GridType & grid() const
Definition: gridsolution.hh:59
FunctionSpaceType::RangeType RangeType
Definition: gridsolution.hh:158
HierarchicSearch< GridType, IndexSetType > HierarchicSearchType
Definition: gridsolution.hh:44
Implementation of the IOInterface. This class manages checkpointing.
Definition: datawriter.hh:239
FunctionSpaceType::DomainType DomainType
Definition: gridsolution.hh:156
Definition: gridsolution.hh:165
std::vector< GridSolutionType * > solutions_
Definition: gridsolution.hh:205
static int size()
Definition: mpimanager.hh:121
IOTupleType data_
Definition: gridsolution.hh:54
DiscreteFunctionType::DiscreteFunctionSpaceType DiscreteFunctionSpaceType
Definition: gridsolution.hh:153
void evaluate(const DomainType &x, RangeType &result) const
evaluates in a given space point
Definition: gridsolution.hh:254
static void writeSingleCheckPoint(const GridType &grid, OutputTuple &data, const double time, const bool storePersistenceManager, const int writeStep=0)
Definition: datawriter.hh:679
GridSolutionVector(const std::string checkPointFile)
Constructor.
Definition: gridsolution.hh:215
static bool readParameter(std::istream &file, const std::string keyword, T &data, bool verbose=true, bool warn=true)
Definition: asciiparser.hh:18
void evaluate(const DomainType &x, const double time, RangeType &result) const
evaluates in a given space-time point
Definition: gridsolution.hh:85
DiscreteFunctionImp DiscreteFunctionType
Definition: gridsolution.hh:151
DiscreteFunctionSpaceType::FunctionSpaceType FunctionSpaceType
Definition: gridsolution.hh:154
GridImp GridType
Definition: gridsolution.hh:32
bool isInDomain(const DomainType &x, const GridType &grid) const
Definition: gridsolution.hh:273
void evaluate(const DomainType &x, const double time, RangeType &result) const
evaluates in a given space-time point
Definition: gridsolution.hh:243
GridPartType::IndexSetType IndexSetType
Definition: gridsolution.hh:38
GridSolution< GridType, DiscreteFunctionType > GridSolutionType
Definition: gridsolution.hh:161
Definition: gridsolution.hh:147
GridType::template Codim< 0 >::Entity EntityType
Definition: gridsolution.hh:42
GridType & grid()
Definition: gridsolution.hh:58
Definition: coordinate.hh:4
tuple< DiscreteFunctionType * > IOTupleType
Definition: gridsolution.hh:46
FunctionSpaceType::DomainFieldType DomainFieldType
Definition: gridsolution.hh:157
GridType::template Codim< 0 >::EntityPointer EntityPointerType
Definition: gridsolution.hh:41
DiscreteFunctionSpaceType::GridPartType GridPartType
Definition: gridsolution.hh:37
static void writeDiscreteFunction(const GridType &grid, const DiscreteFunctionType &discreteFunction, const double time, const int writeStep=0)
writes a discrete function
Definition: gridsolution.hh:279
const DiscreteFunctionType & discreteFunction(const int rank) const
Definition: gridsolution.hh:287
void restoreData()
Definition: datawriter.hh:659
void evaluate(const DomainType &x, RangeType &result) const
evaluates in a given space point
Definition: gridsolution.hh:96
creates a function with evaluate method from a check point
Definition: gridsolution.hh:29
DiscreteFunctionSpaceType::GridPartType GridPartType
Definition: gridsolution.hh:155
static bool verbose()
obtain the cached value for fem.verbose
Definition: io/parameter.hh:444
GridType * grid_
Definition: gridsolution.hh:49
const int numProcs_
Definition: gridsolution.hh:204
static bool isInside(const DomainType &x, const Grid &grid)
Definition: gridsolution.hh:167
int numProcs(const std::string &checkPointFile) const
Definition: gridsolution.hh:207
DiscreteFunctionSpaceType::DomainType DomainType
Definition: gridsolution.hh:36
const DiscreteFunctionType & discreteFunction() const
Definition: gridsolution.hh:132
FunctionSpaceType::RangeFieldType RangeFieldType
Definition: gridsolution.hh:159
CheckPointer< GridType > CheckPointerType
Definition: gridsolution.hh:39
GridImp GridType
Definition: gridsolution.hh:150
DiscreteFunctionType::DiscreteFunctionSpaceType DiscreteFunctionSpaceType
Definition: gridsolution.hh:34
DiscreteFunctionImp DiscreteFunctionType
Definition: gridsolution.hh:33
GridPtr< GridType > gridPtr_
Definition: gridsolution.hh:50
GridSolution(const std::string checkPointFile, const int rank=-1)
Constructor.
Definition: gridsolution.hh:62
~GridSolutionVector()
Definition: gridsolution.hh:227