Skip to content
Snippets Groups Projects
MatrixI.H 6.7 KiB
Newer Older
  • Learn to ignore specific revisions
  • /*---------------------------------------------------------------------------*\
      =========                 |
      \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
       \\    /   O peration     |
    
        \\  /    A nd           | Copyright (C) 2011-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 Form, class Type>
    inline Foam::Matrix<Form, Type>::Matrix()
    
    inline Foam::autoPtr<Foam::Matrix<Form, Type>> Foam::Matrix<Form, Type>::
    
        return autoPtr<Matrix<Form, Type>>(new Matrix<Form, Type>(*this));
    
    }
    
    
    // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
    
    
    template<class Form, class Type>
    inline const Foam::Matrix<Form, Type>& Foam::Matrix<Form, Type>::null()
    {
    
    inline Foam::label Foam::Matrix<Form, Type>::m() const
    
    inline Foam::label Foam::Matrix<Form, Type>::n() const
    
        return nCols_;
    
    template<class Form, class Type>
    inline Foam::label Foam::Matrix<Form, Type>::size() const
    
    template<class Form, class Type>
    inline void Foam::Matrix<Form, Type>::checki(const label i) const
    
                << "Attempt to access element from empty matrix"
    
                << abort(FatalError);
        }
    
                << "Index " << i << " out of range 0 ... " << mRows_-1
    
                << abort(FatalError);
        }
    
    template<class Form, class Type>
    inline void Foam::Matrix<Form, Type>::checkj(const label j) const
    
                << "Attempt to access element from empty matrix"
    
                << abort(FatalError);
        }
    
        else if (j<0 || j>=nCols_)
    
                << "index " << j << " out of range 0 ... " << nCols_-1
    
                << abort(FatalError);
        }
    
    inline const Type* Foam::Matrix<Form, Type>::v() const
    {
        return v_;
    }
    
    
    template<class Form, class Type>
    inline Type* Foam::Matrix<Form, Type>::v()
    {
        return v_;
    }
    
    
    
    template<class Form, class Type>
    
    inline Foam::ConstMatrixBlock<Foam::Matrix<Form, Type>>
    
    Foam::Matrix<Form, Type>::block
    (
        const label m,
        const label n,
        const label mStart,
        const label nStart
    ) const
    {
    
        (
            *this,
            m,
            n,
            mStart,
            nStart
        );
    }
    
    
    template<class Form, class Type>
    template<class VectorSpace>
    
    inline Foam::ConstMatrixBlock<Foam::Matrix<Form, Type>>
    
    Foam::Matrix<Form, Type>::block
    (
        const label mStart,
        const label nStart
    ) const
    {
    
            VectorSpace::nCols,
            mStart,
            nStart
        );
    }
    
    
    template<class Form, class Type>
    
    inline Foam::ConstMatrixBlock<Foam::Matrix<Form, Type>>
    
    Foam::Matrix<Form, Type>::col
    (
        const label m,
        const label mStart
    ) const
    {
    
    inline Foam::ConstMatrixBlock<Foam::Matrix<Form, Type>>
    
    Foam::Matrix<Form, Type>::col
    (
        const label m,
        const label mStart,
        const label nStart
    ) const
    {
    
    inline Foam::MatrixBlock<Foam::Matrix<Form, Type>>
    
    Foam::Matrix<Form, Type>::block
    (
        const label m,
        const label n,
        const label mStart,
        const label nStart
    )
    {
    
        (
            *this,
            m,
            n,
            mStart,
            nStart
        );
    }
    
    
    template<class Form, class Type>
    template<class VectorSpace>
    
    inline Foam::MatrixBlock<Foam::Matrix<Form, Type>>
    
    Foam::Matrix<Form, Type>::block(const label mStart, const label nStart)
    {
    
            VectorSpace::nCols,
            mStart,
            nStart
        );
    }
    
    
    template<class Form, class Type>
    
    inline Foam::MatrixBlock<Foam::Matrix<Form, Type>>
    
    Foam::Matrix<Form, Type>::col(const label m, const label mStart)
    {
    
    inline Foam::MatrixBlock<Foam::Matrix<Form, Type>>
    
    Foam::Matrix<Form, Type>::col
    (
        const label m,
        const label mStart,
        const label nStart
    )
    {
    
    template<class Form, class Type>
    void Foam::Matrix<Form, Type>::shallowResize(const label m, const label n)
    {
        mRows_ = m;
        nCols_ = n;
    }
    
    
    
    // * * * * * * * * * * * * * * * Member Operators  * * * * * * * * * * * * * //
    
    
    template<class Form, class Type>
    inline const Type& Foam::Matrix<Form, Type>::operator()
    (
        const label i,
        const label j
    ) const
    
        return v_[i*nCols_ + j];
    }
    
    
    template<class Form, class Type>
    inline Type& Foam::Matrix<Form, Type>::operator()
    (
        const label i,
        const label j
    )
    {
        checki(i);
    
    template<class Form, class Type>
    inline const Type* Foam::Matrix<Form, Type>::operator[](const label i) const
    
        return v_ + i*nCols_;
    }
    
    
    template<class Form, class Type>
    inline Type* Foam::Matrix<Form, Type>::operator[](const label i)
    {
        checki(i);
        return v_ + i*nCols_;
    
    }
    
    
    // ************************************************************************* //