1%%%%%%%%%%%%%%%%%%% 2% XLiFE++ is an extended library of finite elements written in C++ 3% Copyright (C) 2014 Lunéville, Eric; Kielbasiewicz, Nicolas; Lafranche, Yvon; Nguyen, Manh-Ha; Chambeyron, Colin 4% 5% This program is free software: you can redistribute it and/or modify 6% it under the terms of the GNU General Public License as published by 7% the Free Software Foundation, either version 3 of the License, or 8% (at your option) any later version. 9% This program is distributed in the hope that it will be useful, 10% but WITHOUT ANY WARRANTY; without even the implied warranty of 11% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12% GNU General Public License for more details. 13% You should have received a copy of the GNU General Public License 14% along with this program. If not, see <http://www.gnu.org/licenses/>. 15%%%%%%%%%%%%%%%%%%% 16 17\section{The {\classtitle KernelOperatorOnUnknowns} class} 18 19The {\class KernelOperatorOnUnknowns} class deals with expressions involving two operators on unknown linked with an {\class OperatorOnKernel}, that is 20$$ 21op_u\ aop_l \ op_k \ aop_r \ op_v 22$$ 23Such expression appears in integral equation or integral representation, for instance to deal with: 24$$\int_\Gamma \int_\Gamma u(x)*G(x,y)*v(y)\, dx\,dy.$$ 25\vspace{.1cm} 26\begin{lstlisting}[]{} 27class KernelOperatorOnUnknowns 28{ 29 protected : 30 OperatorOnUnknown opu_; 31 OperatorOnUnknown opv_; 32 AlgebraicOperator aopu_; 33 AlgebraicOperator aopv_; 34 OperatorOnKernel opker_; 35} 36\end{lstlisting} 37\vspace{.3cm} 38The class provides one basic constructor and a lot of extern functions building {\class KernelOperatorOnUnknowns} object: 39\vspace{.1cm} 40\begin{lstlisting}[deletekeywords={[3] fun}] 41KernelOperatorOnUnknowns(const OperatorOnUnknown&, AlgebraicOperator, const OperatorOnKernel&, AlgebraicOperator, const OperatorOnUnknown&); 42 43KernelOperatorOnUnknowns operator*(const OperatorOnUnknown&, const OperatorOnKernel&); //opu * opker 44KernelOperatorOnUnknowns operator*(const OperatorOnKernel&, const OperatorOnUnknown&); //opker * opv 45KernelOperatorOnUnknowns operator*(const OperatorOnUnknown&, const Kernel&); //opu * ker 46KernelOperatorOnUnknowns operator*(const Kernel&, const OperatorOnUnknown&); //ker * opv 47KernelOperatorOnUnknowns operator*(const Unknown&, const Kernel&); //u * ker 48KernelOperatorOnUnknowns operator*(const Kernel&, const Unknown&); //ker * v 49KernelOperatorOnUnknowns operator*(const OperatorOnUnknown&, const KernelOperatorOnUnknowns&); //opu * opker 50KernelOperatorOnUnknowns operator*(const KernelOperatorOnUnknowns&, const OperatorOnUnknown&); //opker * opv 51KernelOperatorOnUnknowns operator*(const Unknown&, const KernelOperatorOnUnknowns&); //u * opker 52KernelOperatorOnUnknowns operator*(const KernelOperatorOnUnknowns&, const Unknown&); //opker * v 53//same for operation inner product |, cross product ^ and contracted product % 54 55template <typename T> 56KernelOperatorOnUnknowns operator*(const Unknown& un, T(fun)(const Point&, const Point&, Parameters&));//u * fun 57template <typename T> 58KernelOperatorOnUnknowns operator*(T(fun)(const Point&, const Point&, Parameters&), const Unknown& un);//fun * u 59template <typename T> 60KernelOperatorOnUnknowns operator*(T(fun)(const Vector<Point>&,const Vector<Point>&, Parameters&), const Unknown& un); //fun * u 61template <typename T> 62KernelOperatorOnUnknowns operator*(const Unknown& un, T(fun)(const Vector<Point>&,const Vector<Point>&, Parameters&)) //! u * func 63//same for operation inner product |, cross product ^ and contracted product % 64\end{lstlisting} 65\vspace{.3cm} 66It provides also accessors and print facilities 67\vspace{.1cm} 68\begin{lstlisting}[]{} 69const OperatorOnUnknown& opu() const; 70const OperatorOnUnknown& opv() const; 71OperatorOnUnknown& opu(); 72OperatorOnUnknown& opv(); 73AlgebraicOperator algopu() const; 74AlgebraicOperator algopv() const; 75AlgebraicOperator& algopu(); 76AlgebraicOperator& algopv(); 77const OperatorOnKernel& opker() const; 78bool isKernelType() const; 79ValueType valueType() const; 80 81void print(std::ostream&) const; 82friend std::ostream& operator<<(std::ostream&, const KernelOperatorOnUnknowns&); 83\end{lstlisting} 84\vspace{.3cm} 85 86 87\displayInfos{library=operator, header=KernelOperatorOnUnknowns.hpp, implementation=KernelOperatorOnUnknowns.cpp, 88test=test\_operator.cpp, header dep={OperatorOnUnknown.hpp, OperatorOnKernel.hpp, config.h, utils.h}} 89 90