diff --git a/dune/fem-dg/operator/adaptation/utility.hh b/dune/fem-dg/operator/adaptation/utility.hh index b037101d7a9ec9fcdd1916fc69adbeab56395907..dbdb7ac9f7f4d8b93c00705721696a1e56557a5f 100644 --- a/dune/fem-dg/operator/adaptation/utility.hh +++ b/dune/fem-dg/operator/adaptation/utility.hh @@ -11,20 +11,26 @@ namespace Dune struct AdaptationParameters : public Fem::LocalParameter< AdaptationParameters, AdaptationParameters > { + protected: + const std::string keyPrefix_; int markStrategy_; + + + public: + //! constructor + AdaptationParameters( const std::string keyPrefix = "fem.adaptation." ) + : keyPrefix_( keyPrefix ), + markStrategy_( getStrategy() ) + {} + int getStrategy () const { const std::string names[] = { "shockind", "apost", "grad" }; // default value is gradient - return Fem::Parameter::getEnum( "fem.adaptation.markingStrategy", names, 2 ); + return Fem::Parameter::getEnum( keyPrefix_ + "markingStrategy", names, 2 ); } - //! constructor - AdaptationParameters () - : markStrategy_( getStrategy() ) - {} - //! simulation end time virtual double endTime () const { @@ -34,13 +40,13 @@ namespace Dune //! retujrn refinement tolerance virtual double refinementTolerance () const { - return Fem::Parameter::getValue< double >( "fem.adaptation.refineTolerance" ); + return Fem::Parameter::getValue< double >( keyPrefix_ + "refineTolerance" ); } //! return percentage of refinement tolerance used for coarsening tolerance virtual double coarsenPercentage () const { - return Fem::Parameter::getValue< double >( "fem.adaptation.coarsenPercent", 0.1 ); + return Fem::Parameter::getValue< double >( keyPrefix_ + "coarsenPercent", 0.1 ); } //! return product of refinementTolerance and coarsenPercentage @@ -53,20 +59,20 @@ namespace Dune virtual int finestLevel ( const int refineStepsForHalf ) const { return refineStepsForHalf * - Fem::Parameter::getValue< int >( "fem.adaptation.finestLevel" ); + Fem::Parameter::getValue< int >( keyPrefix_ + "finestLevel" ); } //! return minimal level achieved by refinement virtual int coarsestLevel ( const int refineStepsForHalf ) const { return refineStepsForHalf * - Fem::Parameter::getValue< int >( "fem.adaptation.coarsestLevel", 0 ); + Fem::Parameter::getValue< int >( keyPrefix_ + "coarsestLevel", 0 ); } //! return depth for refining neighbors of a cell marked for refinement virtual int neighborRefLevel () const { - return Fem::Parameter::getValue< int >( "fem.adaptation.grad.neighborRefLevel", 1 ); + return Fem::Parameter::getValue< int >( keyPrefix_ + "grad.neighborRefLevel", 1 ); } //! return true if marking strategy is based on shock indicator @@ -88,7 +94,7 @@ namespace Dune } //! return true if verbosity mode is enabled - virtual bool verbose () const { return Fem::Parameter::getValue< bool >( "fem.adaptation.verbose", false ); } + virtual bool verbose () const { return Fem::Parameter::getValue< bool >( keyPrefix_ + "verbose", false ); } }; class ComputeMinMaxVolume