Files
mfem/linalg/symmat.cpp
T

103 lines
2.2 KiB
C++

// Copyright (c) 2010-2022, Lawrence Livermore National Security, LLC. Produced
// at the Lawrence Livermore National Laboratory. All Rights reserved. See files
// LICENSE and NOTICE for details. LLNL-CODE-806117.
//
// This file is part of the MFEM library. For more information and source code
// availability visit https://mfem.org.
//
// MFEM is free software; you can redistribute it and/or modify it under the
// terms of the BSD-3 license. We welcome feedback and contributions, see file
// CONTRIBUTING.md for details.
// Implementation of data type DenseSymmetricMatrix
#include "symmat.hpp"
namespace mfem
{
DenseSymmetricMatrix::DenseSymmetricMatrix() : Matrix(0) { }
DenseSymmetricMatrix::DenseSymmetricMatrix(int s) : Matrix(s)
{
MFEM_ASSERT(s >= 0, "invalid DenseSymmetricMatrix size: " << s);
if (s > 0)
{
data.New((s*(s+1))/2);
*this = 0.0; // init with zeroes
}
}
void DenseSymmetricMatrix::SetSize(int s)
{
MFEM_ASSERT(s >= 0,
"invalid DenseSymmetricMatrix size: " << s);
if (Height() == s)
{
return;
}
height = s;
width = s;
const int s2 = (s*(s+1))/2;
if (s2 > data.Capacity())
{
data.Delete();
data.New(s2);
*this = 0.0; // init with zeroes
}
}
DenseSymmetricMatrix &DenseSymmetricMatrix::operator=(double c)
{
const int s = (Height()*(Height()+1))/2;
for (int i = 0; i < s; i++)
{
data[i] = c;
}
return *this;
}
double &DenseSymmetricMatrix::Elem(int i, int j)
{
return (*this)(i,j);
}
const double &DenseSymmetricMatrix::Elem(int i, int j) const
{
return (*this)(i,j);
}
DenseSymmetricMatrix &DenseSymmetricMatrix::operator*=(double c)
{
int s = GetStoredSize();
for (int i = 0; i < s; i++)
{
data[i] *= c;
}
return *this;
}
void DenseSymmetricMatrix::Mult(const Vector &x, Vector &y) const
{
mfem_error("DenseSymmetricMatrix::Mult() not implemented!");
}
MatrixInverse *DenseSymmetricMatrix::Inverse() const
{
mfem_error("DenseSymmetricMatrix::Inverse() not implemented!");
return nullptr;
}
void DenseSymmetricMatrix::Print (std::ostream & os, int width_) const
{
mfem_error("DenseSymmetricMatrix::Print() not implemented!");
}
DenseSymmetricMatrix::~DenseSymmetricMatrix()
{
data.Delete();
}
}