From 84639941e7eafd079cbef4f230dbc8ab59dd6768 Mon Sep 17 00:00:00 2001 From: Nicolas Marsic <nicolas.marsic@gmail.com> Date: Thu, 14 Jun 2012 15:53:23 +0000 Subject: [PATCH] LocalFunctionSpace -- The beginning --- FunctionSpace/CMakeLists.txt | 4 +++ FunctionSpace/LocalFunctionSpace.cpp | 10 +++++++ FunctionSpace/LocalFunctionSpace.h | 31 ++++++++++++++++++++++ FunctionSpace/LocalFunctionSpaceScalar.cpp | 20 ++++++++++++++ FunctionSpace/LocalFunctionSpaceScalar.h | 18 +++++++++++++ FunctionSpace/LocalFunctionSpaceVector.cpp | 20 ++++++++++++++ FunctionSpace/LocalFunctionSpaceVector.h | 18 +++++++++++++ 7 files changed, 121 insertions(+) create mode 100644 FunctionSpace/LocalFunctionSpace.cpp create mode 100644 FunctionSpace/LocalFunctionSpace.h create mode 100644 FunctionSpace/LocalFunctionSpaceScalar.cpp create mode 100644 FunctionSpace/LocalFunctionSpaceScalar.h create mode 100644 FunctionSpace/LocalFunctionSpaceVector.cpp create mode 100644 FunctionSpace/LocalFunctionSpaceVector.h diff --git a/FunctionSpace/CMakeLists.txt b/FunctionSpace/CMakeLists.txt index fa18efc69d..800ad2ebd8 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 0000000000..8849f7e537 --- /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 0000000000..374d972b4a --- /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 0000000000..2e6598e2ff --- /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 0000000000..04ca7adf44 --- /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 0000000000..5003759ee2 --- /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 0000000000..1a0ebc7376 --- /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 -- GitLab