00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #ifndef VARIATIONAL_FORMULA_EXPRESSION_HPP
00021 #define VARIATIONAL_FORMULA_EXPRESSION_HPP
00022
00023 #include <Expression.hpp>
00024
00025 #include <ReferenceCounting.hpp>
00026 #include <MultiLinearFormExpression.hpp>
00027
00028 #include <list>
00029
00030 #include <BoundaryExpression.hpp>
00031 #include <VariationalOperatorExpression.hpp>
00032
00043 class VariationalFormulaExpression
00044 : public Expression
00045 {
00046 private:
00047 friend class VariationalProblemExpression;
00048
00049 ReferenceCounting<MultiLinearFormSumExpression>
00050 __givenMultiLinearExpression;
00052 typedef std::list<ReferenceCounting<VariationalBilinearOperatorExpression> >
00053 BilinearOperatorList;
00054
00055 BilinearOperatorList __bilinearPlus;
00056 BilinearOperatorList __bilinearMinus;
00058 BilinearOperatorList __bilinearBorderPlus;
00059 BilinearOperatorList __bilinearBorderMinus;
00061 typedef std::list<ReferenceCounting<VariationalLinearOperatorExpression> >
00062 LinearOperatorList;
00063
00064 LinearOperatorList __linearPlus;
00065 LinearOperatorList __linearMinus;
00067 LinearOperatorList __linearBorderPlus;
00068 LinearOperatorList __linearBorderMinus;
00080 template <typename ListType>
00081 std::ostream& __putList(const ListType& listType,
00082 char delimiter,
00083 bool& first,
00084 std::ostream& os) const;
00085
00093 std::ostream& put(std::ostream& os) const;
00094
00099 void __getBandLForms2D(MultiLinearExpressionSum::iterator begin,
00100 MultiLinearExpressionSum::iterator end,
00101 BilinearOperatorList& bilinearPlus,
00102 BilinearOperatorList& bilinearMinus,
00103 LinearOperatorList& linearPlus,
00104 LinearOperatorList& linearMinus,
00105 ReferenceCounting<BoundaryExpression> b);
00106
00111 void __getBandLForms3D(MultiLinearExpressionSum::iterator begin,
00112 MultiLinearExpressionSum::iterator end,
00113 BilinearOperatorList& bilinearPlus,
00114 BilinearOperatorList& bilinearMinus,
00115 LinearOperatorList& linearPlus,
00116 LinearOperatorList& linearMinus);
00117
00122 void __getBilinearAndLinearForms(MultiLinearFormSumExpression::iterator begin,
00123 MultiLinearFormSumExpression::iterator end,
00124 BilinearOperatorList& bilinearPlus,
00125 BilinearOperatorList& bilinearMinus,
00126 BilinearOperatorList& bilinearBorderPlus,
00127 BilinearOperatorList& bilinearBorderMinus,
00128 LinearOperatorList& linearPlus,
00129 LinearOperatorList& linearMinus,
00130 LinearOperatorList& linearBorderPlus,
00131 LinearOperatorList& linearBorderMinus);
00132
00133 public:
00134
00140 bool hasPOVBoundary() const;
00141
00147 bool hasPredefinedBoundary() const;
00148
00153 void execute();
00154
00161 VariationalFormulaExpression(ReferenceCounting<MultiLinearFormSumExpression> m);
00162
00169 VariationalFormulaExpression(const VariationalFormulaExpression& v);
00170
00175 ~VariationalFormulaExpression();
00176 };
00177
00178 #endif // VARIATIONAL_FORMULA_EXPRESSION_HPP
00179