RowVector: New 3D row-vector class derived from MatrixSpace
The transpose '.T()' of a RowVector returns a Vector and vice versa.
This commit is contained in:
135
src/OpenFOAM/primitives/RowVector/RowVector.H
Normal file
135
src/OpenFOAM/primitives/RowVector/RowVector.H
Normal file
@ -0,0 +1,135 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2016 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of OpenFOAM.
|
||||
|
||||
OpenFOAM is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
Class
|
||||
Foam::RowVector
|
||||
|
||||
Description
|
||||
Templated 3D row-vector derived from MatrixSpace adding construction from
|
||||
3 components and element access using x(), y() and z().
|
||||
|
||||
SourceFiles
|
||||
RowVectorI.H
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef RowVector_H
|
||||
#define RowVector_H
|
||||
|
||||
#include "MatrixSpace.H"
|
||||
#include "Vector.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
namespace Foam
|
||||
{
|
||||
|
||||
/*---------------------------------------------------------------------------*\
|
||||
Class RowVector Declaration
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
template<class Cmpt>
|
||||
class RowVector
|
||||
:
|
||||
public MatrixSpace<RowVector<Cmpt>, Cmpt, 1, 3>
|
||||
{
|
||||
|
||||
public:
|
||||
|
||||
//- Equivalent type of labels used for valid component indexing
|
||||
typedef RowVector<label> labelType;
|
||||
|
||||
|
||||
//- Component labeling enumeration
|
||||
enum components { X, Y, Z };
|
||||
|
||||
|
||||
// Constructors
|
||||
|
||||
//- Construct null
|
||||
inline RowVector();
|
||||
|
||||
//- Construct initialized to zero
|
||||
inline explicit RowVector(const Foam::zero);
|
||||
|
||||
//- Construct given VectorSpace of the same rank
|
||||
template<class Cmpt2>
|
||||
inline RowVector(const MatrixSpace<RowVector<Cmpt2>, Cmpt2, 1, 3>&);
|
||||
|
||||
//- Construct given three components
|
||||
inline RowVector(const Cmpt& rvx, const Cmpt& rvy, const Cmpt& rvz);
|
||||
|
||||
//- Construct from Istream
|
||||
inline RowVector(Istream&);
|
||||
|
||||
|
||||
// Member Functions
|
||||
|
||||
// Access
|
||||
|
||||
inline const Cmpt& x() const;
|
||||
inline const Cmpt& y() const;
|
||||
inline const Cmpt& z() const;
|
||||
|
||||
inline Cmpt& x();
|
||||
inline Cmpt& y();
|
||||
inline Cmpt& z();
|
||||
|
||||
|
||||
// Member Operators
|
||||
|
||||
inline void operator=(const Foam::zero);
|
||||
};
|
||||
|
||||
|
||||
template<class Cmpt>
|
||||
class typeOfTranspose<Cmpt, Vector<Cmpt>>
|
||||
{
|
||||
public:
|
||||
|
||||
typedef RowVector<Cmpt> type;
|
||||
};
|
||||
|
||||
|
||||
template<class Cmpt>
|
||||
class typeOfTranspose<Cmpt, RowVector<Cmpt>>
|
||||
{
|
||||
public:
|
||||
|
||||
typedef Vector<Cmpt> type;
|
||||
};
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
} // End namespace Foam
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#include "RowVectorI.H"
|
||||
|
||||
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
|
||||
|
||||
#endif
|
||||
|
||||
// ************************************************************************* //
|
||||
121
src/OpenFOAM/primitives/RowVector/RowVectorI.H
Normal file
121
src/OpenFOAM/primitives/RowVector/RowVectorI.H
Normal file
@ -0,0 +1,121 @@
|
||||
/*---------------------------------------------------------------------------*\
|
||||
========= |
|
||||
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
|
||||
\\ / O peration |
|
||||
\\ / A nd | Copyright (C) 2016 OpenFOAM Foundation
|
||||
\\/ M anipulation |
|
||||
-------------------------------------------------------------------------------
|
||||
License
|
||||
This file is part of OpenFOAM.
|
||||
|
||||
OpenFOAM is free software: you can redistribute it and/or modify it
|
||||
under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation, either version 3 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
|
||||
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
\*---------------------------------------------------------------------------*/
|
||||
|
||||
// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
|
||||
|
||||
template<class Cmpt>
|
||||
inline Foam::RowVector<Cmpt>::RowVector()
|
||||
{}
|
||||
|
||||
|
||||
template<class Cmpt>
|
||||
inline Foam::RowVector<Cmpt>::RowVector(const Foam::zero z)
|
||||
:
|
||||
RowVector::msType(z)
|
||||
{}
|
||||
|
||||
|
||||
template<class Cmpt>
|
||||
template<class Cmpt2>
|
||||
inline Foam::RowVector<Cmpt>::RowVector
|
||||
(
|
||||
const MatrixSpace<RowVector<Cmpt2>, Cmpt2, 1, 3>& ms
|
||||
)
|
||||
:
|
||||
MatrixSpace<RowVector<Cmpt>, Cmpt, 1, 3>(ms)
|
||||
{}
|
||||
|
||||
|
||||
template<class Cmpt>
|
||||
inline Foam::RowVector<Cmpt>::RowVector
|
||||
(
|
||||
const Cmpt& rvx,
|
||||
const Cmpt& rvy,
|
||||
const Cmpt& rvz
|
||||
)
|
||||
{
|
||||
this->v_[X] = rvx;
|
||||
this->v_[Y] = rvy;
|
||||
this->v_[Z] = rvz;
|
||||
}
|
||||
|
||||
|
||||
template<class Cmpt>
|
||||
inline Foam::RowVector<Cmpt>::RowVector(Istream& is)
|
||||
:
|
||||
MatrixSpace<RowVector<Cmpt>, Cmpt, 1, 3>(is)
|
||||
{}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
|
||||
|
||||
template<class Cmpt>
|
||||
inline const Cmpt& Foam::RowVector<Cmpt>::x() const
|
||||
{
|
||||
return this->v_[X];
|
||||
}
|
||||
|
||||
template<class Cmpt>
|
||||
inline const Cmpt& Foam::RowVector<Cmpt>::y() const
|
||||
{
|
||||
return this->v_[Y];
|
||||
}
|
||||
|
||||
template<class Cmpt>
|
||||
inline const Cmpt& Foam::RowVector<Cmpt>::z() const
|
||||
{
|
||||
return this->v_[Z];
|
||||
}
|
||||
|
||||
|
||||
template<class Cmpt>
|
||||
inline Cmpt& Foam::RowVector<Cmpt>::x()
|
||||
{
|
||||
return this->v_[X];
|
||||
}
|
||||
|
||||
template<class Cmpt>
|
||||
inline Cmpt& Foam::RowVector<Cmpt>::y()
|
||||
{
|
||||
return this->v_[Y];
|
||||
}
|
||||
|
||||
template<class Cmpt>
|
||||
inline Cmpt& Foam::RowVector<Cmpt>::z()
|
||||
{
|
||||
return this->v_[Z];
|
||||
}
|
||||
|
||||
|
||||
// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * //
|
||||
|
||||
template<class Cmpt>
|
||||
inline void Foam::RowVector<Cmpt>::operator=(const Foam::zero z)
|
||||
{
|
||||
RowVector::msType::operator=(z);
|
||||
}
|
||||
|
||||
|
||||
// ************************************************************************* //
|
||||
Reference in New Issue
Block a user