diff --git a/src/OpenFOAM/Make/files b/src/OpenFOAM/Make/files index ebe063819e5155568e4b31d2f9aa0c3ae0167488..056517f409c892e82a8a11a630c3d55902813243 100644 --- a/src/OpenFOAM/Make/files +++ b/src/OpenFOAM/Make/files @@ -107,6 +107,11 @@ $(ranges)/labelRange/labelRanges.C $(ranges)/scalarRange/scalarRange.C $(ranges)/scalarRange/scalarRanges.C +spatialVectorAlgebra = primitives/spatialVectorAlgebra +$(spatialVectorAlgebra)/SpatialVector/spatialVector/spatialVector.C +$(spatialVectorAlgebra)/SpatialTensor/spatialTensor/spatialTensor.C +$(spatialVectorAlgebra)/CompactSpatialTensor/compactSpatialTensor/compactSpatialTensor.C + containers/HashTables/HashTable/HashTableCore.C containers/HashTables/StaticHashTable/StaticHashTableCore.C containers/Lists/SortableList/ParSortableListName.C diff --git a/src/OpenFOAM/primitives/spatialVectorAlgebra/CompactSpatialTensor/CompactSpatialTensor.H b/src/OpenFOAM/primitives/spatialVectorAlgebra/CompactSpatialTensor/CompactSpatialTensor.H new file mode 100644 index 0000000000000000000000000000000000000000..fa2b14f6c913deb1a8ea86d636224373355e6fe7 --- /dev/null +++ b/src/OpenFOAM/primitives/spatialVectorAlgebra/CompactSpatialTensor/CompactSpatialTensor.H @@ -0,0 +1,144 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / 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::CompactSpatialTensor + +Description + Templated 3D compact spatial tensor derived from MatrixSpace used to + represent transformations of spatial vectors and the angular and linear + inertia of rigid bodies. + + Reference: + \verbatim + Featherstone, R. (2008). + Rigid body dynamics algorithms. + Springer. + \endverbatim + +SourceFiles + CompactSpatialTensorI.H + +SeeAlso + Foam::MatrixSpace + Foam::SpatialTensor + +\*---------------------------------------------------------------------------*/ + +#ifndef CompactSpatialTensor_H +#define CompactSpatialTensor_H + +#include "SpatialTensor.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class CompactSpatialTensor Declaration +\*---------------------------------------------------------------------------*/ + +template<class Cmpt> +class CompactSpatialTensor +: + public MatrixSpace<CompactSpatialTensor<Cmpt>, Cmpt, 6, 3> +{ + +public: + + // Constructors + + //- Construct null + inline CompactSpatialTensor(); + + inline explicit CompactSpatialTensor(const Foam::zero); + + //- Construct given MatrixSpace of the same rank + inline CompactSpatialTensor + ( + const typename CompactSpatialTensor::msType& + ); + + //- Construct given 18 components + inline CompactSpatialTensor + ( + const Cmpt& t00, const Cmpt& t01, const Cmpt& t02, + const Cmpt& t10, const Cmpt& t11, const Cmpt& t12, + const Cmpt& t20, const Cmpt& t21, const Cmpt& t22, + const Cmpt& t30, const Cmpt& t31, const Cmpt& t32, + const Cmpt& t40, const Cmpt& t41, const Cmpt& t42, + const Cmpt& t50, const Cmpt& t51, const Cmpt& t52 + ); + + //- Construct from Istream + inline CompactSpatialTensor(Istream&); + + + // Member Operators + + inline void operator=(const Foam::zero); +}; + + +template<class Cmpt> +class typeOfInnerProduct<Cmpt, CompactSpatialTensor<Cmpt>, Tensor<Cmpt>> +{ +public: + + typedef CompactSpatialTensor<Cmpt> type; +}; + + +template<class Cmpt> +class typeOfInnerProduct<Cmpt, CompactSpatialTensor<Cmpt>, Vector<Cmpt>> +{ +public: + + typedef SpatialVector<Cmpt> type; +}; + + +template<class Cmpt> +class typeOfInnerProduct<Cmpt, SpatialTensor<Cmpt>, CompactSpatialTensor<Cmpt>> +{ +public: + + typedef CompactSpatialTensor<Cmpt> type; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +// Include inline implementations +#include "CompactSpatialTensorI.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/OpenFOAM/primitives/spatialVectorAlgebra/CompactSpatialTensor/CompactSpatialTensorI.H b/src/OpenFOAM/primitives/spatialVectorAlgebra/CompactSpatialTensor/CompactSpatialTensorI.H new file mode 100644 index 0000000000000000000000000000000000000000..c01ed49c7fa8781915e986e3bf50d4121843a481 --- /dev/null +++ b/src/OpenFOAM/primitives/spatialVectorAlgebra/CompactSpatialTensor/CompactSpatialTensorI.H @@ -0,0 +1,106 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / 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::CompactSpatialTensor<Cmpt>::CompactSpatialTensor() +{} + + +template<class Cmpt> +inline Foam::CompactSpatialTensor<Cmpt>::CompactSpatialTensor +( + const Foam::zero z +) +: + CompactSpatialTensor::msType(z) +{} + + +template<class Cmpt> +inline Foam::CompactSpatialTensor<Cmpt>::CompactSpatialTensor +( + const typename CompactSpatialTensor::msType& ms +) +: + CompactSpatialTensor::msType(ms) +{} + + +template<class Cmpt> +inline Foam::CompactSpatialTensor<Cmpt>::CompactSpatialTensor +( + const Cmpt& t00, const Cmpt& t01, const Cmpt& t02, + const Cmpt& t10, const Cmpt& t11, const Cmpt& t12, + const Cmpt& t20, const Cmpt& t21, const Cmpt& t22, + const Cmpt& t30, const Cmpt& t31, const Cmpt& t32, + const Cmpt& t40, const Cmpt& t41, const Cmpt& t42, + const Cmpt& t50, const Cmpt& t51, const Cmpt& t52 +) +{ + this->v_[0] = t00; + this->v_[1] = t01; + this->v_[2] = t02; + + this->v_[6 + 0] = t10; + this->v_[6 + 1] = t11; + this->v_[6 + 2] = t12; + + this->v_[12 + 0] = t20; + this->v_[12 + 1] = t21; + this->v_[12 + 2] = t22; + + this->v_[18 + 0] = t30; + this->v_[18 + 1] = t31; + this->v_[18 + 2] = t32; + + this->v_[24 + 0] = t40; + this->v_[24 + 1] = t41; + this->v_[24 + 2] = t42; + + this->v_[30 + 0] = t50; + this->v_[30 + 1] = t51; + this->v_[30 + 2] = t52; +} + + +template<class Cmpt> +inline Foam::CompactSpatialTensor<Cmpt>::CompactSpatialTensor(Istream& is) +: + CompactSpatialTensor::msType(is) +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<class Cmpt> +inline void Foam::CompactSpatialTensor<Cmpt>::operator=(const Foam::zero z) +{ + CompactSpatialTensor::msType::operator=(z); +} + + +// ************************************************************************* // diff --git a/src/OpenFOAM/primitives/spatialVectorAlgebra/CompactSpatialTensor/compactSpatialTensor/compactSpatialTensor.C b/src/OpenFOAM/primitives/spatialVectorAlgebra/CompactSpatialTensor/compactSpatialTensor/compactSpatialTensor.C new file mode 100644 index 0000000000000000000000000000000000000000..8004cd034733f21cf4668b24cd407e5427cb8eb7 --- /dev/null +++ b/src/OpenFOAM/primitives/spatialVectorAlgebra/CompactSpatialTensor/compactSpatialTensor/compactSpatialTensor.C @@ -0,0 +1,84 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / 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/>. + +\*---------------------------------------------------------------------------*/ + +#include "compactSpatialTensor.H" +#include "CompactSpatialTensorT.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +template<> +const char* const Foam::compactSpatialTensor::vsType::typeName = + "compactSpatialTensor"; + +template<> +const char* const Foam::compactSpatialTensor::vsType::componentNames[] = +{ + "Exx", "Exy", "Exz", + "Eyx", "Eyy", "Eyz", + "Ezx", "Ezy", "Ezz", + + "Erxx", "Erxy", "Erxz", + "Eryx", "Eryy", "Eryz", + "Erzx", "Erzy", "Erzz", +}; + +template<> +const Foam::compactSpatialTensor Foam::compactSpatialTensor::vsType::zero +( + Foam::compactSpatialTensor::uniform(0) +); + +template<> +const Foam::compactSpatialTensor Foam::compactSpatialTensor::vsType::one +( + compactSpatialTensor::uniform(1) +); + +template<> +const Foam::compactSpatialTensor Foam::compactSpatialTensor::vsType::max +( + compactSpatialTensor::uniform(VGREAT) +); + +template<> +const Foam::compactSpatialTensor Foam::compactSpatialTensor::vsType::min +( + compactSpatialTensor::uniform(-VGREAT) +); + +template<> +const Foam::compactSpatialTensor Foam::compactSpatialTensor::vsType::rootMax +( + compactSpatialTensor::uniform(ROOTVGREAT) +); + +template<> +const Foam::compactSpatialTensor Foam::compactSpatialTensor::vsType::rootMin +( + compactSpatialTensor::uniform(-ROOTVGREAT) +); + + +// ************************************************************************* // diff --git a/src/OpenFOAM/primitives/spatialVectorAlgebra/CompactSpatialTensor/compactSpatialTensor/compactSpatialTensor.H b/src/OpenFOAM/primitives/spatialVectorAlgebra/CompactSpatialTensor/compactSpatialTensor/compactSpatialTensor.H new file mode 100644 index 0000000000000000000000000000000000000000..fac906e11af245966d94010f7a46cb1a864737c9 --- /dev/null +++ b/src/OpenFOAM/primitives/spatialVectorAlgebra/CompactSpatialTensor/compactSpatialTensor/compactSpatialTensor.H @@ -0,0 +1,62 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / 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/>. + +Typedef + Foam::compactSpatialTensor + +Description + CompactSpatialTensor of scalars. + +SourceFiles + CompactSpatialTensor.C + +\*---------------------------------------------------------------------------*/ + +#ifndef compactSpatialTensor_H +#define compactSpatialTensor_H + +#include "CompactSpatialTensor.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +typedef CompactSpatialTensor<scalar> compactSpatialTensor; + +//- Data associated with compactSpatialTensor type are contiguous +template<> +inline bool contiguous<compactSpatialTensor>() {return true;} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/OpenFOAM/primitives/spatialVectorAlgebra/CompactSpatialTensorT/CompactSpatialTensorT.H b/src/OpenFOAM/primitives/spatialVectorAlgebra/CompactSpatialTensorT/CompactSpatialTensorT.H new file mode 100644 index 0000000000000000000000000000000000000000..eedc3643576556aa546ae77fb76fbfed9a7a6629 --- /dev/null +++ b/src/OpenFOAM/primitives/spatialVectorAlgebra/CompactSpatialTensorT/CompactSpatialTensorT.H @@ -0,0 +1,176 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / 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::CompactSpatialTensorT + +Description + Templated 3D transposed compact spatial tensor derived from MatrixSpace + used to represent transformations of spatial vectors of rigid bodies. + + Reference: + \verbatim + Featherstone, R. (2008). + Rigid body dynamics algorithms. + Springer. + \endverbatim + +SourceFiles + CompactSpatialTensorTI.H + +SeeAlso + Foam::MatrixSpace + Foam::CompactSpatialTensor + +\*---------------------------------------------------------------------------*/ + +#ifndef CompactSpatialTensorT_H +#define CompactSpatialTensorT_H + +#include "CompactSpatialTensor.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class CompactSpatialTensor Declaration +\*---------------------------------------------------------------------------*/ + +template<class Cmpt> +class CompactSpatialTensorT +: + public MatrixSpace<CompactSpatialTensorT<Cmpt>, Cmpt, 3, 6> +{ + +public: + + // Constructors + + //- Construct null + inline CompactSpatialTensorT(); + + inline explicit CompactSpatialTensorT(const Foam::zero); + + //- Construct given MatrixSpace of the same rank + inline CompactSpatialTensorT + ( + const typename CompactSpatialTensorT::msType& + ); + + //- Construct given 18 components + inline CompactSpatialTensorT + ( + const Cmpt& t00, const Cmpt& t01, const Cmpt& t02, + const Cmpt& t10, const Cmpt& t11, const Cmpt& t12, + const Cmpt& t20, const Cmpt& t21, const Cmpt& t22, + const Cmpt& t30, const Cmpt& t31, const Cmpt& t32, + const Cmpt& t40, const Cmpt& t41, const Cmpt& t42, + const Cmpt& t50, const Cmpt& t51, const Cmpt& t52 + ); + + //- Construct from Istream + inline CompactSpatialTensorT(Istream&); + + + // Member Operators + + inline void operator=(const Foam::zero); +}; + + +template<class Cmpt> +class typeOfTranspose<Cmpt, CompactSpatialTensor<Cmpt>> +{ +public: + + typedef CompactSpatialTensorT<Cmpt> type; +}; + + +template<class Cmpt> +class typeOfTranspose<Cmpt, CompactSpatialTensorT<Cmpt>> +{ +public: + + typedef CompactSpatialTensor<Cmpt> type; +}; + + +template<class Cmpt> +class typeOfInnerProduct +< + Cmpt, + CompactSpatialTensor<Cmpt>, + CompactSpatialTensorT<Cmpt> +> +{ +public: + + typedef SpatialTensor<Cmpt> type; +}; + + +template<class Cmpt> +class typeOfInnerProduct +< + Cmpt, + CompactSpatialTensorT<Cmpt>, + CompactSpatialTensor<Cmpt> +> +{ +public: + + typedef Tensor<Cmpt> type; +}; + + +template<class Cmpt> +class typeOfInnerProduct +< + Cmpt, + CompactSpatialTensorT<Cmpt>, + SpatialVector<Cmpt> +> +{ +public: + + typedef Vector<Cmpt> type; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +// Include inline implementations +#include "CompactSpatialTensorTI.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/OpenFOAM/primitives/spatialVectorAlgebra/CompactSpatialTensorT/CompactSpatialTensorTI.H b/src/OpenFOAM/primitives/spatialVectorAlgebra/CompactSpatialTensorT/CompactSpatialTensorTI.H new file mode 100644 index 0000000000000000000000000000000000000000..d76f077fde1d12c58fb39d59611db711983d105f --- /dev/null +++ b/src/OpenFOAM/primitives/spatialVectorAlgebra/CompactSpatialTensorT/CompactSpatialTensorTI.H @@ -0,0 +1,106 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / 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::CompactSpatialTensorT<Cmpt>::CompactSpatialTensorT() +{} + + +template<class Cmpt> +inline Foam::CompactSpatialTensorT<Cmpt>::CompactSpatialTensorT +( + const Foam::zero z +) +: + CompactSpatialTensorT::msType(z) +{} + + +template<class Cmpt> +inline Foam::CompactSpatialTensorT<Cmpt>::CompactSpatialTensorT +( + const typename CompactSpatialTensorT::msType& ms +) +: + CompactSpatialTensorT::msType(ms) +{} + + +template<class Cmpt> +inline Foam::CompactSpatialTensorT<Cmpt>::CompactSpatialTensorT +( + const Cmpt& t00, const Cmpt& t01, const Cmpt& t02, + const Cmpt& t10, const Cmpt& t11, const Cmpt& t12, + const Cmpt& t20, const Cmpt& t21, const Cmpt& t22, + const Cmpt& t30, const Cmpt& t31, const Cmpt& t32, + const Cmpt& t40, const Cmpt& t41, const Cmpt& t42, + const Cmpt& t50, const Cmpt& t51, const Cmpt& t52 +) +{ + this->v_[0] = t00; + this->v_[1] = t01; + this->v_[2] = t02; + + this->v_[6 + 0] = t10; + this->v_[6 + 1] = t11; + this->v_[6 + 2] = t12; + + this->v_[12 + 0] = t20; + this->v_[12 + 1] = t21; + this->v_[12 + 2] = t22; + + this->v_[18 + 0] = t30; + this->v_[18 + 1] = t31; + this->v_[18 + 2] = t32; + + this->v_[24 + 0] = t40; + this->v_[24 + 1] = t41; + this->v_[24 + 2] = t42; + + this->v_[30 + 0] = t50; + this->v_[30 + 1] = t51; + this->v_[30 + 2] = t52; +} + + +template<class Cmpt> +inline Foam::CompactSpatialTensorT<Cmpt>::CompactSpatialTensorT(Istream& is) +: + CompactSpatialTensorT::msType(is) +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<class Cmpt> +inline void Foam::CompactSpatialTensorT<Cmpt>::operator=(const Foam::zero z) +{ + CompactSpatialTensorT::msType::operator=(z); +} + + +// ************************************************************************* // diff --git a/src/OpenFOAM/primitives/spatialVectorAlgebra/SpatialTensor/SpatialTensor.H b/src/OpenFOAM/primitives/spatialVectorAlgebra/SpatialTensor/SpatialTensor.H new file mode 100644 index 0000000000000000000000000000000000000000..e19d74094f538d1d26841b2ecb849d6d8e16c6d6 --- /dev/null +++ b/src/OpenFOAM/primitives/spatialVectorAlgebra/SpatialTensor/SpatialTensor.H @@ -0,0 +1,176 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / 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::SpatialTensor + +Description + Templated 3D spatial tensor derived from MatrixSpace used to represent + transformations of spatial vectors and the angular and linear inertia of + rigid bodies. + + Reference: + \verbatim + Featherstone, R. (2008). + Rigid body dynamics algorithms. + Springer. + \endverbatim + +SourceFiles + SpatialTensorI.H + +SeeAlso + Foam::MatrixSpace + Foam::Tensor + Foam::SpatialVector + +\*---------------------------------------------------------------------------*/ + +#ifndef SpatialTensor_H +#define SpatialTensor_H + +#include "Tensor.H" +#include "SpatialVector.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class SpatialTensor Declaration +\*---------------------------------------------------------------------------*/ + +template<class Cmpt> +class SpatialTensor +: + public MatrixSpace<SpatialTensor<Cmpt>, Cmpt, 6, 6> +{ + +public: + + // Member constants + + //- Rank of Tensor is 2 + static const direction rank = 2; + + + // Static data members + + //- Identity matrix for square matrices + static const SpatialTensor I; + + + // Constructors + + //- Construct null + inline SpatialTensor(); + + //- Construct initialized to zero + inline explicit SpatialTensor(const Foam::zero); + + //- Construct given MatrixSpace of the same rank + inline SpatialTensor(const typename SpatialTensor::msType&); + + //- Construct given 36 components + inline SpatialTensor + ( + const Cmpt& t00, const Cmpt& t01, const Cmpt& t02, + const Cmpt& t03, const Cmpt& t04, const Cmpt& t05, + + const Cmpt& t10, const Cmpt& t11, const Cmpt& t12, + const Cmpt& t13, const Cmpt& t14, const Cmpt& t15, + + const Cmpt& t20, const Cmpt& t21, const Cmpt& t22, + const Cmpt& t23, const Cmpt& t24, const Cmpt& t25, + + const Cmpt& t30, const Cmpt& t31, const Cmpt& t32, + const Cmpt& t33, const Cmpt& t34, const Cmpt& t35, + + const Cmpt& t40, const Cmpt& t41, const Cmpt& t42, + const Cmpt& t43, const Cmpt& t44, const Cmpt& t45, + + const Cmpt& t50, const Cmpt& t51, const Cmpt& t52, + const Cmpt& t53, const Cmpt& t54, const Cmpt& t55 + ); + + //- Construct from Istream + inline SpatialTensor(Istream&); + + + // Member Operators + + inline void operator=(const Foam::zero); +}; + + +template<class Cmpt> +class typeOfTranspose<Cmpt, SpatialTensor<Cmpt>> +{ +public: + + typedef SpatialTensor<Cmpt> type; +}; + + +template<class Cmpt> +class typeOfOuterProduct<Cmpt, SpatialVector<Cmpt>, SpatialVector<Cmpt>> +{ +public: + + typedef SpatialTensor<Cmpt> type; +}; + + +template<class Cmpt> +class typeOfInnerProduct<Cmpt, SpatialTensor<Cmpt>, SpatialVector<Cmpt>> +{ +public: + + typedef SpatialVector<Cmpt> type; +}; + + +template<class Cmpt> +class typeOfInnerProduct<Cmpt, SpatialTensor<Cmpt>, SpatialTensor<Cmpt>> +{ +public: + + typedef SpatialTensor<Cmpt> type; +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +// Include inline implementations +#include "SpatialTensorI.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/OpenFOAM/primitives/spatialVectorAlgebra/SpatialTensor/SpatialTensorI.H b/src/OpenFOAM/primitives/spatialVectorAlgebra/SpatialTensor/SpatialTensorI.H new file mode 100644 index 0000000000000000000000000000000000000000..2fd570e81ba6cf5e64e1f9db5afd6ce6ac58757a --- /dev/null +++ b/src/OpenFOAM/primitives/spatialVectorAlgebra/SpatialTensor/SpatialTensorI.H @@ -0,0 +1,132 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / 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::SpatialTensor<Cmpt>::SpatialTensor() +{} + + +template<class Cmpt> +inline Foam::SpatialTensor<Cmpt>::SpatialTensor(const Foam::zero z) +: + SpatialTensor::msType(z) +{} + + +template<class Cmpt> +inline Foam::SpatialTensor<Cmpt>::SpatialTensor +( + const typename SpatialTensor::msType& ms +) +: + SpatialTensor::msType(ms) +{} + + +template<class Cmpt> +inline Foam::SpatialTensor<Cmpt>::SpatialTensor +( + const Cmpt& t00, const Cmpt& t01, const Cmpt& t02, + const Cmpt& t03, const Cmpt& t04, const Cmpt& t05, + + const Cmpt& t10, const Cmpt& t11, const Cmpt& t12, + const Cmpt& t13, const Cmpt& t14, const Cmpt& t15, + + const Cmpt& t20, const Cmpt& t21, const Cmpt& t22, + const Cmpt& t23, const Cmpt& t24, const Cmpt& t25, + + const Cmpt& t30, const Cmpt& t31, const Cmpt& t32, + const Cmpt& t33, const Cmpt& t34, const Cmpt& t35, + + const Cmpt& t40, const Cmpt& t41, const Cmpt& t42, + const Cmpt& t43, const Cmpt& t44, const Cmpt& t45, + + const Cmpt& t50, const Cmpt& t51, const Cmpt& t52, + const Cmpt& t53, const Cmpt& t54, const Cmpt& t55 +) +{ + this->v_[0] = t00; + this->v_[1] = t01; + this->v_[2] = t02; + this->v_[3] = t03; + this->v_[4] = t04; + this->v_[5] = t05; + + this->v_[6] = t10; + this->v_[7] = t11; + this->v_[8] = t12; + this->v_[9] = t13; + this->v_[10] = t14; + this->v_[11] = t15; + + this->v_[12] = t20; + this->v_[13] = t21; + this->v_[14] = t22; + this->v_[15] = t23; + this->v_[16] = t24; + this->v_[17] = t25; + + this->v_[18] = t30; + this->v_[19] = t31; + this->v_[20] = t32; + this->v_[21] = t33; + this->v_[22] = t34; + this->v_[23] = t35; + + this->v_[24] = t40; + this->v_[25] = t41; + this->v_[26] = t42; + this->v_[27] = t43; + this->v_[28] = t44; + this->v_[29] = t45; + + this->v_[30] = t50; + this->v_[31] = t51; + this->v_[32] = t52; + this->v_[33] = t53; + this->v_[34] = t54; + this->v_[35] = t55; +} + + +template<class Cmpt> +inline Foam::SpatialTensor<Cmpt>::SpatialTensor(Istream& is) +: + SpatialTensor::msType(is) +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<class Cmpt> +inline void Foam::SpatialTensor<Cmpt>::operator=(const Foam::zero z) +{ + SpatialTensor::msType::operator=(z); +} + + +// ************************************************************************* // diff --git a/src/OpenFOAM/primitives/spatialVectorAlgebra/SpatialTensor/spatialTensor/spatialTensor.C b/src/OpenFOAM/primitives/spatialVectorAlgebra/SpatialTensor/spatialTensor/spatialTensor.C new file mode 100644 index 0000000000000000000000000000000000000000..191d6c34f3a6cfa68faf5cf78850195a6c68db2d --- /dev/null +++ b/src/OpenFOAM/primitives/spatialVectorAlgebra/SpatialTensor/spatialTensor/spatialTensor.C @@ -0,0 +1,88 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / 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/>. + +\*---------------------------------------------------------------------------*/ + +#include "spatialTensor.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +template<> +const char* const Foam::spatialTensor::vsType::typeName = "spatialTensor"; + +template<> +const char* const Foam::spatialTensor::vsType::componentNames[] = +{ + "Exx", "Exy", "Exz", "Erxx", "Erxy", "Erxz", + "Eyx", "Eyy", "Eyz", "Eryx", "Eryy", "Eryz", + "Ezx", "Ezy", "Ezz", "Erzx", "Erzy", "Erzz" + + "Erxx", "Erxy", "Erxz", "Exx", "Exy", "Exz", + "Eryx", "Eryy", "Eryz", "Eyx", "Eyy", "Eyz", + "Erzx", "Erzy", "Erzz", "Ezx", "Ezy", "Ezz" +}; + +template<> +const Foam::spatialTensor Foam::spatialTensor::vsType::zero +( + Foam::spatialTensor::uniform(0) +); + +template<> +const Foam::spatialTensor Foam::spatialTensor::vsType::one +( + spatialTensor::uniform(1) +); + +template<> +const Foam::spatialTensor Foam::spatialTensor::vsType::max +( + spatialTensor::uniform(VGREAT) +); + +template<> +const Foam::spatialTensor Foam::spatialTensor::vsType::min +( + spatialTensor::uniform(-VGREAT) +); + +template<> +const Foam::spatialTensor Foam::spatialTensor::vsType::rootMax +( + spatialTensor::uniform(ROOTVGREAT) +); + +template<> +const Foam::spatialTensor Foam::spatialTensor::vsType::rootMin +( + spatialTensor::uniform(-ROOTVGREAT) +); + +template<> +const Foam::spatialTensor Foam::spatialTensor::I +( + Foam::spatialTensor::identity() +); + + +// ************************************************************************* // diff --git a/src/OpenFOAM/primitives/spatialVectorAlgebra/SpatialTensor/spatialTensor/spatialTensor.H b/src/OpenFOAM/primitives/spatialVectorAlgebra/SpatialTensor/spatialTensor/spatialTensor.H new file mode 100644 index 0000000000000000000000000000000000000000..bd44cb386280565b3d7b42b0f1ba016b4108cb11 --- /dev/null +++ b/src/OpenFOAM/primitives/spatialVectorAlgebra/SpatialTensor/spatialTensor/spatialTensor.H @@ -0,0 +1,62 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / 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/>. + +Typedef + Foam::spatialTensor + +Description + SpatialTensor of scalars. + +SourceFiles + spatialTensor.C + +\*---------------------------------------------------------------------------*/ + +#ifndef spatialTensor_H +#define spatialTensor_H + +#include "SpatialTensor.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +typedef SpatialTensor<scalar> spatialTensor; + +//- Data associated with spatialTensor type are contiguous +template<> +inline bool contiguous<spatialTensor>() {return true;} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/OpenFOAM/primitives/spatialVectorAlgebra/SpatialVector/SpatialVector.H b/src/OpenFOAM/primitives/spatialVectorAlgebra/SpatialVector/SpatialVector.H new file mode 100644 index 0000000000000000000000000000000000000000..19eb9ad1db1ecf43456752d7bd24258b6c7e502c --- /dev/null +++ b/src/OpenFOAM/primitives/spatialVectorAlgebra/SpatialVector/SpatialVector.H @@ -0,0 +1,131 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / 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::SpatialVector + +Description + Templated 3D spatial vector derived from VectorSpace used to represent the + anglular and linear components of position, velocity and acceleration of + rigid bodies. + + Reference: + \verbatim + Featherstone, R. (2008). + Rigid body dynamics algorithms. + Springer. + \endverbatim + +SourceFiles + SpatialVectorI.H + +SeeAlso + Foam::VectorSpace + Foam::Vector + +\*---------------------------------------------------------------------------*/ + +#ifndef SpatialVector_H +#define SpatialVector_H + +#include "Vector.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +/*---------------------------------------------------------------------------*\ + Class SpatialVector Declaration +\*---------------------------------------------------------------------------*/ + +template<class Cmpt> +class SpatialVector +: + public VectorSpace<SpatialVector<Cmpt>, Cmpt, 6> +{ + +public: + + // Constructors + + //- Construct null + inline SpatialVector(); + + //- Construct initialized to zero + inline explicit SpatialVector(const Foam::zero); + + //- Construct given VectorSpace of the same rank + inline SpatialVector(const typename SpatialVector::vsType&); + + //- Construct from the angular and linear vector components + inline SpatialVector + ( + const Vector<Cmpt>& angular, + const Vector<Cmpt>& linear + ); + + //- Construct given 6 components + inline SpatialVector + ( + const Cmpt& v0, + const Cmpt& v1, + const Cmpt& v2, + const Cmpt& v3, + const Cmpt& v4, + const Cmpt& v5 + ); + + //- Construct from Istream + inline SpatialVector(Istream&); + + + // Member Functions + + //- Return the angular part of the spatial vector as a vector + inline Vector<Cmpt> angular() const; + + //- Return the linear part of the spatial vector as a vector + inline Vector<Cmpt> linear() const; + + + // Member Operators + + inline void operator=(const Foam::zero); +}; + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +// Include inline implementations +#include "SpatialVectorI.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* // diff --git a/src/OpenFOAM/primitives/spatialVectorAlgebra/SpatialVector/SpatialVectorI.H b/src/OpenFOAM/primitives/spatialVectorAlgebra/SpatialVector/SpatialVectorI.H new file mode 100644 index 0000000000000000000000000000000000000000..af14d753012583c72720675e1996808215a1a1fa --- /dev/null +++ b/src/OpenFOAM/primitives/spatialVectorAlgebra/SpatialVector/SpatialVectorI.H @@ -0,0 +1,117 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / 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::SpatialVector<Cmpt>::SpatialVector() +{} + + +template<class Cmpt> +inline Foam::SpatialVector<Cmpt>::SpatialVector(const Foam::zero z) +: + SpatialVector::vsType(z) +{} + + +template<class Cmpt> +inline Foam::SpatialVector<Cmpt>::SpatialVector +( + const typename SpatialVector::vsType& vs +) +: + SpatialVector::vsType(vs) +{} + + +template<class Cmpt> +inline Foam::SpatialVector<Cmpt>::SpatialVector +( + const Vector<Cmpt>& angular, + const Vector<Cmpt>& linear +) +{ + this->v_[0] = angular.x(); + this->v_[1] = angular.y(); + this->v_[2] = angular.z(); + this->v_[3] = linear.x(); + this->v_[4] = linear.y(); + this->v_[5] = linear.z(); +} + + +template<class Cmpt> +inline Foam::SpatialVector<Cmpt>::SpatialVector +( + const Cmpt& v0, + const Cmpt& v1, + const Cmpt& v2, + const Cmpt& v3, + const Cmpt& v4, + const Cmpt& v5 +) +{ + this->v_[0] = v0; + this->v_[1] = v1; + this->v_[2] = v2; + this->v_[3] = v3; + this->v_[4] = v4; + this->v_[5] = v5; +} + + +template<class Cmpt> +inline Foam::SpatialVector<Cmpt>::SpatialVector(Istream& is) +: + SpatialVector::vsType(is) +{} + + +// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * // + +template<class Cmpt> +inline Foam::Vector<Cmpt> Foam::SpatialVector<Cmpt>::angular() const +{ + return Vector<Cmpt>(this->v_[0], this->v_[1], this->v_[2]); +} + +template<class Cmpt> +inline Foam::Vector<Cmpt> Foam::SpatialVector<Cmpt>::linear() const +{ + return Vector<Cmpt>(this->v_[3], this->v_[4], this->v_[5]); +} + + +// * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * // + +template<class Cmpt> +inline void Foam::SpatialVector<Cmpt>::operator=(const Foam::zero z) +{ + SpatialVector::vsType::operator=(z); +} + + +// ************************************************************************* // diff --git a/src/OpenFOAM/primitives/spatialVectorAlgebra/SpatialVector/spatialVector/spatialVector.C b/src/OpenFOAM/primitives/spatialVectorAlgebra/SpatialVector/spatialVector/spatialVector.C new file mode 100644 index 0000000000000000000000000000000000000000..08d1d28b98327956ea221e604d5c9ebb5cad685a --- /dev/null +++ b/src/OpenFOAM/primitives/spatialVectorAlgebra/SpatialVector/spatialVector/spatialVector.C @@ -0,0 +1,79 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / 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/>. + +Description + SpatialVector of scalars. + +\*---------------------------------------------------------------------------*/ + +#include "spatialVector.H" + +// * * * * * * * * * * * * * * Static Data Members * * * * * * * * * * * * * // + +template<> +const char* const Foam::spatialVector::vsType::typeName = "spatialVector"; + +template<> +const char* const Foam::spatialVector::vsType::componentNames[] = +{ + "x", "y", "z" +}; + +template<> +const Foam::spatialVector Foam::spatialVector::vsType::zero +( + Foam::spatialVector::uniform(0) +); + +template<> +const Foam::spatialVector Foam::spatialVector::vsType::one +( + spatialVector::uniform(1) +); + +template<> +const Foam::spatialVector Foam::spatialVector::vsType::max +( + spatialVector::uniform(VGREAT) +); + +template<> +const Foam::spatialVector Foam::spatialVector::vsType::min +( + spatialVector::uniform(-VGREAT) +); + +template<> +const Foam::spatialVector Foam::spatialVector::vsType::rootMax +( + spatialVector::uniform(ROOTVGREAT) +); + +template<> +const Foam::spatialVector Foam::spatialVector::vsType::rootMin +( + spatialVector::uniform(-ROOTVGREAT) +); + + +// ************************************************************************* // diff --git a/src/OpenFOAM/primitives/spatialVectorAlgebra/SpatialVector/spatialVector/spatialVector.H b/src/OpenFOAM/primitives/spatialVectorAlgebra/SpatialVector/spatialVector/spatialVector.H new file mode 100644 index 0000000000000000000000000000000000000000..8e6ae153801a110faee6b3ac12b91813ad4d8723 --- /dev/null +++ b/src/OpenFOAM/primitives/spatialVectorAlgebra/SpatialVector/spatialVector/spatialVector.H @@ -0,0 +1,62 @@ +/*---------------------------------------------------------------------------*\ + ========= | + \\ / 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/>. + +Typedef + Foam::spatialVector + +Description + SpatialVector of scalars. + +SourceFiles + spatialVector.C + +\*---------------------------------------------------------------------------*/ + +#ifndef spatialVector_H +#define spatialVector_H + +#include "SpatialVector.H" + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +namespace Foam +{ + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +typedef SpatialVector<scalar> spatialVector; + +//- Data associated with spatialVector type are contiguous +template<> +inline bool contiguous<spatialVector>() {return true;} + + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +} // End namespace Foam + +// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // + +#endif + +// ************************************************************************* //