diff --git a/FunctionSpace/CMakeLists.txt b/FunctionSpace/CMakeLists.txt index fa18efc69d54397d346e01153e5d1c165d9ee674..800ad2ebd8e4d7522ceaabc28954b484dad852b1 100644 --- a/FunctionSpace/CMakeLists.txt +++ b/FunctionSpace/CMakeLists.txt @@ -15,6 +15,10 @@ set(SRC TriNodeBasis.cpp TriEdgeBasis.cpp TriNedelecBasis.cpp + + LocalFunctionSpace.cpp + LocalFunctionSpaceScalar.cpp + LocalFunctionSpaceVector.cpp ) file(GLOB HDR RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.h) diff --git a/FunctionSpace/LocalFunctionSpace.cpp b/FunctionSpace/LocalFunctionSpace.cpp new file mode 100644 index 0000000000000000000000000000000000000000..8849f7e5377ce60835334d8113e2722f99862d3d --- /dev/null +++ b/FunctionSpace/LocalFunctionSpace.cpp @@ -0,0 +1,10 @@ +#include "LocalFunctionSpace.h" + +LocalFunctionSpace::LocalFunctionSpace(void){ + +} + +LocalFunctionSpace::~LocalFunctionSpace(void){ + +} + diff --git a/FunctionSpace/LocalFunctionSpace.h b/FunctionSpace/LocalFunctionSpace.h new file mode 100644 index 0000000000000000000000000000000000000000..374d972b4a25630d58fdd06c3aa7b7ae60f7a9b1 --- /dev/null +++ b/FunctionSpace/LocalFunctionSpace.h @@ -0,0 +1,31 @@ +#ifndef _LOCALFUNCTIONSPACE_H_ +#define _LOCALFUNCTIONSPACE_H_ + +class LocalFunctionSpace{ + protected: + bool scalar; + int size; + + public: + virtual ~LocalFunctionSpace(void); + + bool isScalar(void) const; + int getSize(void) const; + + protected: + LocalFunctionSpace(void); +}; + +////////////////////// +// Inline Functions // +////////////////////// + +inline bool LocalFunctionSpace::isScalar(void) const{ + return scalar; +} + +inline int LocalFunctionSpace::getSize(void) const{ + return size; +} + +#endif diff --git a/FunctionSpace/LocalFunctionSpaceScalar.cpp b/FunctionSpace/LocalFunctionSpaceScalar.cpp new file mode 100644 index 0000000000000000000000000000000000000000..2e6598e2ff6f9af271dcff4e740d7ffa7e81e140 --- /dev/null +++ b/FunctionSpace/LocalFunctionSpaceScalar.cpp @@ -0,0 +1,20 @@ +#include "LocalFunctionSpaceScalar.h" +#include "BasisScalar.h" +#include "Exception.h" + +LocalFunctionSpaceScalar::LocalFunctionSpaceScalar(const Basis& basis){ + if(!basis.isScalar()) + throw Exception("Can't Create a Scalar Function Space with a Vectorial Basis"); + + const BasisScalar& b = static_cast<const BasisScalar&>(basis); + + this->scalar = true; + this->size = b.getSize(); + this->basis = &(b.getBasis()); +} + +LocalFunctionSpaceScalar::~LocalFunctionSpaceScalar(void){ + // LocalFunctionSpaceScalar is *NOT* responsible + // for deleting 'basis' + // It's the Basis job +} diff --git a/FunctionSpace/LocalFunctionSpaceScalar.h b/FunctionSpace/LocalFunctionSpaceScalar.h new file mode 100644 index 0000000000000000000000000000000000000000..04ca7adf44ba64b4ffc7d7911a0576f2d250bfd5 --- /dev/null +++ b/FunctionSpace/LocalFunctionSpaceScalar.h @@ -0,0 +1,18 @@ +#ifndef _LOCALFUNCTIONSPACESCALAR_H_ +#define _LOCALFUNCTIONSPACESCALAR_H_ + +#include <vector> +#include "Polynomial.h" +#include "Basis.h" +#include "LocalFunctionSpace.h" + +class LocalFunctionSpaceScalar: LocalFunctionSpace{ + protected: + const std::vector<Polynomial>* basis; + + public: + LocalFunctionSpaceScalar(const Basis& basis); + virtual ~LocalFunctionSpaceScalar(void); +}; + +#endif diff --git a/FunctionSpace/LocalFunctionSpaceVector.cpp b/FunctionSpace/LocalFunctionSpaceVector.cpp new file mode 100644 index 0000000000000000000000000000000000000000..5003759ee22d32325db07090bb3ba45d5c871c21 --- /dev/null +++ b/FunctionSpace/LocalFunctionSpaceVector.cpp @@ -0,0 +1,20 @@ +#include "LocalFunctionSpaceVector.h" +#include "BasisVector.h" +#include "Exception.h" + +LocalFunctionSpaceVector::LocalFunctionSpaceVector(const Basis& basis){ + if(basis.isScalar()) + throw Exception("Can't Create a Vector Function Space with a Scalar Basis"); + + const BasisVector& b = static_cast<const BasisVector&>(basis); + + this->scalar = false; + this->size = b.getSize(); + this->basis = &(b.getBasis()); +} + +LocalFunctionSpaceVector::~LocalFunctionSpaceVector(void){ + // LocalFunctionSpaceVector is *NOT* responsible + // for deleting 'basis' + // It's the Basis job +} diff --git a/FunctionSpace/LocalFunctionSpaceVector.h b/FunctionSpace/LocalFunctionSpaceVector.h new file mode 100644 index 0000000000000000000000000000000000000000..1a0ebc7376b0a435fc4de79524e4bf5e2a7c0793 --- /dev/null +++ b/FunctionSpace/LocalFunctionSpaceVector.h @@ -0,0 +1,18 @@ +#ifndef _LOCALFUNCTIONSPACEVECTOR_H_ +#define _LOCALFUNCTIONSPACEVECTOR_H_ + +#include <vector> +#include "Polynomial.h" +#include "Basis.h" +#include "LocalFunctionSpace.h" + +class LocalFunctionSpaceVector: LocalFunctionSpace{ + protected: + const std::vector<std::vector<Polynomial> >* basis; + + public: + LocalFunctionSpaceVector(const Basis& basis); + virtual ~LocalFunctionSpaceVector(void); +}; + +#endif