00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef VARIATIONAL_OPERATOR_F_GRAD_G_GRAD_V_HPP
00021 #define VARIATIONAL_OPERATOR_F_GRAD_G_GRAD_V_HPP
00022
00023 #include <VariationalLinearOperator.hpp>
00024 #include <ScalarFunctionBuilder.hpp>
00025 #include <ScalarFunctionBase.hpp>
00026
00035 class VariationalOperatorFgradGgradV
00036 : public VariationalLinearOperator
00037 {
00038 private:
00039 ConstReferenceCounting<ScalarFunctionBase>
00040 __f;
00041 ConstReferenceCounting<ScalarFunctionBase>
00042 __g;
00044 public:
00050 const ScalarFunctionBase& f() const
00051 {
00052 return *__f;
00053 }
00054
00060 const ScalarFunctionBase& g() const
00061 {
00062 return *__g;
00063 }
00064
00072 ReferenceCounting<VariationalLinearOperator>
00073 operator*(const ConstReferenceCounting<ScalarFunctionBase>& c) const
00074 {
00075 VariationalOperatorFgradGgradV* newOperator
00076 = new VariationalOperatorFgradGgradV(*this);
00077 ScalarFunctionBuilder functionBuilder;
00078 functionBuilder.setFunction(__f);
00079 functionBuilder.setBinaryOperation(BinaryOperation::product,c);
00080
00081 (*newOperator).__f = functionBuilder.getBuiltFunction();
00082 return newOperator;
00083 }
00084
00093 VariationalOperatorFgradGgradV(const size_t& testFunctionNumber,
00094 const VariationalOperator::Property& testFunctionProperty,
00095 ConstReferenceCounting<ScalarFunctionBase> f,
00096 ConstReferenceCounting<ScalarFunctionBase> g)
00097 : VariationalLinearOperator(VariationalLinearOperator::FgradGgradV,
00098 testFunctionNumber, testFunctionProperty),
00099 __f(f),
00100 __g(g)
00101 {
00102 ;
00103 }
00104
00110 VariationalOperatorFgradGgradV(const VariationalOperatorFgradGgradV& fv)
00111 : VariationalLinearOperator(fv),
00112 __f(fv.__f),
00113 __g(fv.__g)
00114 {
00115 ;
00116 }
00117
00122 ~VariationalOperatorFgradGgradV()
00123 {
00124 ;
00125 }
00126 };
00127
00128 #endif // VARIATIONAL_OPERATOR_F_GRAD_G_GRAD_V_HPP