26 static double b(
double mu,
double mudx)
31 static double db(
double mu,
double mudx)
36 static double ddb(
double mu,
double mudx)
41 static double bmu(
double mu,
double mudx)
46 static double dbmu(
double mu,
double mudx)
59 static double b(
double mu,
double mudx)
61 return mu*std::pow(mudx,q/2.0)/(q/2.0);
64 static double db(
double mu,
double mudx)
66 return -std::pow(mudx,q/2.0+1.0);
69 static double ddb(
double mu,
double mudx)
71 return (q/2.0+1.0)*std::pow(mudx,q/2.0+2.0)/mu;
74 static double bmu(
double mu,
double mudx)
76 return std::pow(mudx,q/2.0)*(2.0/q+1);
79 static double dbmu(
double mu,
double mudx)
81 return -(q/2.0+1.0)*std::pow(mudx,q/2.0+1.0)/mu;
92 static double b(
double mu,
double mudx)
94 return -mu*std::log(mu/mudx);
97 static double db(
double mu,
double mudx)
102 static double ddb(
double mu,
double mudx)
107 static double bmu(
double mu,
double mudx)
109 return -std::log(mu/mudx);
112 static double dbmu(
double mu,
double mudx)
119template <
class VarFu,
class BarrierFu,
int paralin=0>
128 template<
class VarF,
int parmeterln>
129 struct FunctionalTraits
134 template<
class VarF>
struct FunctionalTraits<VarF,1>
150 static int const nrows = TestVars::noOfVariables;
155 static const int order = BarrierFu::order;
162 static int const yIdx = VarFu::yIdx;
163 static int const ySIdx = boost::fusion::result_of::value_at_c<typename AnsatzVars::Variables,yIdx>::type::spaceIndex;
169 template<
class DomainVector>
183 template<
class Evaluators>
184 class ComputeBoundDifference
187 ComputeBoundDifference(
typename AnsatzVars::VariableSet
const& u_,
192 u(u_), dc(dc_), evaluators(evaluators_), dylower(dylower_), dyupper(dyupper_)
196 template<
class Variable>
197 void operator()(Variable
const& var)
const
199 int const row = Variable::id;
202 if(ConstraintsCache::template bounds<row>::upper)
204 dyupper[row]=dc.upperbound()-at_c<row>(u.data).value(at_c<spc>(evaluators))[0];
206 if(ConstraintsCache::template bounds<row>::lower)
208 dylower[row]=at_c<row>(u.data).value(at_c<spc>(evaluators))[0]-dc.lowerbound();
212 typename AnsatzVars::VariableSet
const& u;
218 template<
int present,
int component,
int paraln>
226 template<
int component>
234 template<
int component>
242 template<
int component>
270 template<
class Position,
class Evaluators>
273 fcc.evaluateAt(y, evaluators);
274 boost::fusion::for_each(
typename AnsatzVars::Variables(),ComputeBoundDifference<Evaluators>(x,fcc,evaluators,dylower,dyupper));
276 b1[0]=boundTraits<ConstraintsCache::template bounds<0>::lower, 0, paralin>::b1(pmu,dylower[0])
277 -boundTraits<ConstraintsCache::template bounds<0>::upper, 0, paralin>::b1(pmu,dyupper[0]);
278 b1[1]=boundTraits<ConstraintsCache::template bounds<1>::lower, 1, paralin>::b1(pmu,dylower[1])
279 -boundTraits<ConstraintsCache::template bounds<1>::upper, 1, paralin>::b1(pmu,dyupper[1]);
281 b2[0]=boundTraits<ConstraintsCache::template bounds<0>::lower, 0, paralin>::b2(pmu,dylower[0])
282 +boundTraits<ConstraintsCache::template bounds<0>::upper, 0, paralin>::b2(pmu,dyupper[0]);
283 b2[1]=boundTraits<ConstraintsCache::template bounds<1>::lower, 1, paralin>::b2(pmu,dylower[1])
284 +boundTraits<ConstraintsCache::template bounds<1>::upper, 1, paralin>::b2(pmu,dyupper[1]);
289 sum += boundTraits<ConstraintsCache::template bounds<1>::upper, 1, paralin>::b0(pmu,dyupper[1]);
290 sum += boundTraits<ConstraintsCache::template bounds<2>::upper, 2, paralin>::b0(pmu,dyupper[2]);
294 template <
int row,
int dim>
302 template <
int row,
int col,
int dim>
308 result[0][0]=b2[row]*arg1.
value[0]*arg2.
value[0];
330 typename AnsatzVars::VariableSet
const& x;
345 template<
class Position,
class Evaluators>
355 template <
int row,
int dim>
362 template <
int row,
int col,
int dim>
375 static bool const present = (ConstraintsCache::template bounds<row>::upper || ConstraintsCache::template bounds<row>::lower);
378 template <
int row,
int col>
381 static int const present = (row == col) && (ConstraintsCache::template bounds<row>::upper || ConstraintsCache::template bounds<row>::lower);
387 template <
class Cell>
390 if(boundary)
return 0;
393 int matrixOrder = shapeFunctionOrder;
394 int lastIterateOrder = 0;
395 return matrixOrder+lastIterateOrder;
Functional that adds barrier terms to VarFu.
FunctionalTraits< VarFu, paralin >::OptimalityFunctional OptimalityFunctional
IPFunctional< OptimalityFunctional, BarrierFu, paralin > Functional
static const int parameterLin
IPFunctional< typename VarFu::FunctionalDiagonal, BarrierFu, 1 > ParameterValueLinearization
VarFu::AnsatzVars AnsatzVars
static ProblemType const type
VarFu::OriginVars OriginVars
OptimalityFunctional const & getFunctional() const
IPFunctional(Parameter mu_, OptimalityFunctional &f)
int integrationOrder(Cell const &, int shapeFunctionOrder, bool boundary) const
VarFu::ConstraintsCache ConstraintsCache
void prepareConstraintsCache(DomainVector const &x) const
BarrierFu BarrierFunction
IPFunctional< VarFu, BarrierFu, 2 > ParameterLinearization
bool inDomain(Arg const &a) const
OptimalityFunctional & unconstrainedFunctional
static const int loworder
Utility classes for the definition and use of variational functionals.
typename boost::fusion::result_of::as_vector< typename boost::fusion::result_of::transform< Spaces, GetEvaluatorTypes >::type >::type Evaluators
the heterogeneous sequence type of Evaluators for the given spaces
ProblemType
A type for describing the nature of a PDE problem.
typename GridView::template Codim< 0 >::Entity Cell
The type of cells (entities of codimension 0) in the grid view.
auto & component(LinearProductSpace< Scalar, Sequence > &x)
static double dbmu(double mu, double mudx)
static double ddb(double mu, double mudx)
static double db(double mu, double mudx)
static double bmu(double mu, double mudx)
static double b(double mu, double mudx)
static double dbmu(double mu, double mudx)
static double db(double mu, double mudx)
static double bmu(double mu, double mudx)
static double b(double mu, double mudx)
static double ddb(double mu, double mudx)
Barrier<q,p> = sum_{i=p}^{q} Barrier<i,i>
static const int loworder
static double dbmu(double mu, double mudx)
static double b(double mu, double mudx)
static double bmu(double mu, double mudx)
static double db(double mu, double mudx)
static double ddb(double mu, double mudx)
Helper class for specifying the number of components of a variable.
Dune::FieldVector< Scalar, TestVars::template Components< row >::m > d1(VariationalArg< Scalar, dim > const &arg) const
Dune::FieldMatrix< Scalar, TestVars::template Components< row >::m, AnsatzVars::template Components< col >::m > d2(VariationalArg< Scalar, dim > const &arg1, VariationalArg< Scalar, dim > const &arg2) const
void evaluateAt(Position const &, Evaluators const &)
BoundaryCache(Functional const &, typename AnsatzVars::VariableSet const &, int flags=7)
static const bool hasInteriorFaces
static bool const present
static int const symmetric
Dune::FieldMatrix< Scalar, TestVars::template Components< row >::m, AnsatzVars::template Components< col >::m > d2(VariationalArg< Scalar, dim > const &arg1, VariationalArg< Scalar, dim > const &arg2) const
Dune::FieldVector< Scalar, TestVars::template Components< row >::m > d1(VariationalArg< Scalar, dim > const &arg) const
void moveTo(Entity const &e_)
void evaluateAt(Position const &y, Evaluators const &evaluators)
DomainCache(Functional const &f_, typename AnsatzVars::VariableSet const &x_, int flags_=7)
static int const spaceIndex
A class that stores values, gradients, and Hessians of evaluated shape functions.
ValueType value
The shape function's value, a vector of dimension components