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 OperatorOnUnknowns} class}
18
19The {\class OperatorOnUnknowns} class deals with a pair of {\class OperatorOnUnknown} object related by an {\class AlgebraicOperator} (one of product, inner product, cross product or contracted product):
20It is useful to store syntax like \emph{opu aop opv} occurring in bilinear forms.
21\vspace{.1cm}
22\begin{lstlisting}[]{}
23class OperatorOnUnknowns
24{
25 protected :
26 OperatorOnUnknown opu_;  //left operator on unknown
27 OperatorOnUnknown opv_;  //right operator on unknown (test function)
28 AlgebraicOperator aop_;  //algebraic operation (*,|,%,^)
29}
30\end{lstlisting}
31\vspace{.3cm}
32The class provides basic constructor and accessors:
33\vspace{.1cm}
34\begin{lstlisting}[]{}
35OperatorOnUnknowns(){};
36OperatorOnUnknowns(const OperatorOnUnknown& operu, const OperatorOnUnknown& operv, AlgebraicOperator aop);
37const OperatorOnUnknown& opu() const;
38OperatorOnUnknown& opu();
39OperatorOnUnknown& opv();
40AlgebraicOperator algop();
41ValueType valueType() const;
42\end{lstlisting}
43\vspace{.3cm}
44a function checking the consistancy of expression:
45\vspace{.1cm}
46\begin{lstlisting}[]{}
47bool checkConsistancy();
48\end{lstlisting}
49\vspace{.3cm}
50The \verb?checkConsitancy? function checks that the given {\class OperatorOnUnknown} objects
51are consistent (in structure not in dimension) with the given algebraic operation. If not an
52error is handled. \\
53Some print facilities are provided:
54\vspace{.1cm}
55\begin{lstlisting}[]{}
56void print(std::ostream&) const;
57friend std::ostream& operator<<(std::ostream&, const OperatorOnUnknowns&);
58\end{lstlisting}
59\vspace{.3cm}
60Besides, some extern functions acts like constructors:
61\vspace{.1cm}
62\begin{lstlisting}[]{}
63OperatorOnUnknowns operator*(OperatorOnUnknown&,OperatorOnUnknown&); //opu * opv
64OperatorOnUnknowns operator|(OperatorOnUnknown&,OperatorOnUnknown&); //opu | opv
65OperatorOnUnknowns operator^(OperatorOnUnknown&,OperatorOnUnknown&); //opu ^ opv
66OperatorOnUnknowns operator%(OperatorOnUnknown&,OperatorOnUnknown&); //opu % opv
67OperatorOnUnknowns operator*(OperatorOnUnknown&,Unknown&);           //opu * v
68OperatorOnUnknowns operator|(OperatorOnUnknown&,Unknown&);           //opu | v
69OperatorOnUnknowns operator^(OperatorOnUnknown&,Unknown&);           //opu ^ v
70OperatorOnUnknowns operator%(OperatorOnUnknown&,Unknown&);           //opu % v
71OperatorOnUnknowns operator*(Unknown&,OperatorOnUnknown&);           //u * opv
72OperatorOnUnknowns operator|(Unknown&,OperatorOnUnknown&);           //u | opv
73OperatorOnUnknowns operator^(Unknown&,OperatorOnUnknown&);           //u ^ opv
74OperatorOnUnknowns operator%(Unknown&,OperatorOnUnknown&);           //u % opv
75OperatorOnUnknowns operator*(Unknown&,Unknown&);                     //u * v
76OperatorOnUnknowns operator|(Unknown&,Unknown&);                     //u | v
77OperatorOnUnknowns operator^(Unknown&,Unknown&);                     //u ^ v
78OperatorOnUnknowns operator%(Unknown&,Unknown&);                     //u % v
79\end{lstlisting}
80\vspace{.3cm}
81
82\displayInfos{library=operator, header=OperatorOnUnknowns.hpp, implementation=OperatorOnUnknowns.cpp,
83test=test\_operator.cpp, header dep={OperatorOnUnknown.hpp, config.h, utils.h}}
84
85