20 #ifndef __mast_simp_penalized_density_h__ 21 #define __mast_simp_penalized_density_h__ 28 namespace Optimization {
32 template <
typename ScalarType,
typename DensityFieldType>
48 template <
typename ContextType>
49 inline ScalarType
value(
const ContextType& c)
const {
51 Assert0(
_p,
"Penalty value not initialized");
52 Assert0(
_d,
"Density field not initialized");
54 return pow(
_d->value(c),
_p);
57 template <
typename ContextType,
typename ScalarFieldType>
59 const ScalarFieldType& f)
const {
61 Assert0(
_p,
"Penalty value not initialized");
62 Assert0(
_d,
"Density field not initialized");
64 return _p * pow(
_d->value(c),
_p-1.) *
_d->derivative(c, f);
71 const DensityFieldType *
_d;
78 #endif // __mast_simp_penalized_density_h__ ScalarType derivative(const ContextType &c, const ScalarFieldType &f) const
const DensityFieldType * _d
virtual ~PenalizedDensity()
void set_density_field(const DensityFieldType &d)
ScalarType value(const ContextType &c) const
void set_penalty(const real_t p)
#define Assert0(cond, msg)