Merge branch 'master' of ssh://git.code.sf.net/p/foam-extend/foam-extend-3.2
[foam-extend-3.2.git] / src / foam / primitives / VectorN / VectorN.H
bloba4375a90bb398c6598c0428fa13006c99a8c23c4
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | foam-extend: Open Source CFD
4    \\    /   O peration     | Version:     3.2
5     \\  /    A nd           | Web:         http://www.foam-extend.org
6      \\/     M anipulation  | For copyright notice see file Copyright
7 -------------------------------------------------------------------------------
8 License
9     This file is part of foam-extend.
11     foam-extend is free software: you can redistribute it and/or modify it
12     under the terms of the GNU General Public License as published by the
13     Free Software Foundation, either version 3 of the License, or (at your
14     option) any later version.
16     foam-extend is distributed in the hope that it will be useful, but
17     WITHOUT ANY WARRANTY; without even the implied warranty of
18     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19     General Public License for more details.
21     You should have received a copy of the GNU General Public License
22     along with foam-extend.  If not, see <http://www.gnu.org/licenses/>.
24 Class
25     VectorN
27 Description
28     Templated 2D Vector derived from VectorSpace adding construction from
29     2 components, element access using x() and y() member functions and
30     the inner-product (dot-product).
32 SourceFiles
33     VectorNI.H
35 \*---------------------------------------------------------------------------*/
37 #ifndef VectorN_H
38 #define VectorN_H
40 #include "VectorSpace.H"
41 #include "tensor.H"
43 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
45 namespace Foam
48 /*---------------------------------------------------------------------------*\
49                            Class VectorN Declaration
50 \*---------------------------------------------------------------------------*/
52 template <class Cmpt, int length>
53 class VectorN
55     public VectorSpace<VectorN<Cmpt, length>, Cmpt, length>
58 public:
60     // Member constants
62         enum
63         {
64             rank = 1 // Rank of VectorN is 1
65         };
68     // Static data members
70         static const char* const typeName;
71         static const VectorN zero;
72         static const VectorN one;
75     // Constructors
77         //- Construct null
78         inline VectorN();
80         //- Construct given VectorSpace
81         inline VectorN
82         (
83             const VectorSpace<VectorN<Cmpt, length>, Cmpt, length>&
84         );
86         //- Construct given component value.  Special use only!
87         explicit inline VectorN(const Cmpt& vx);
89         //- Construct from Istream
90         inline VectorN(Istream&);
93     // Member Functions
95         //- Return ith component
96         inline const Cmpt& operator()(const direction i) const;
98         //- Return access to ith component
99         inline Cmpt& operator()(const direction i);
101         //- Componentwise multiply
102         inline VectorN<Cmpt, length> cmptMultiply
103         (
104             const VectorN<Cmpt, length>&
105         );
109 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
111 } // End namespace Foam
113 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
115 // Include inline implementations
116 #include "VectorNI.H"
118 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
120 #endif
122 // ************************************************************************* //