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