diff --git a/FunctionSpace/LocalFunctionSpace.h b/FunctionSpace/LocalFunctionSpace.h index b73efff20eb88052ecc755913dfd39b963a25b6d..852362d999a073f41e714b6c1a3750f2b3fef5ce 100644 --- a/FunctionSpace/LocalFunctionSpace.h +++ b/FunctionSpace/LocalFunctionSpace.h @@ -13,16 +13,12 @@ with an Element. */ -#include "Jacobian.h" - class LocalFunctionSpace{ protected: bool scalar; int size; int type; - Jacobian* jac; - public: //! Deletes this LocalFunctionSpace //! diff --git a/FunctionSpace/LocalFunctionSpace0Form.cpp b/FunctionSpace/LocalFunctionSpace0Form.cpp index 2751c0bbbd9c078777d63d131d21ea42d61bd251..45bc101dc7c5deb63b9440454b23077e7111c5dc 100644 --- a/FunctionSpace/LocalFunctionSpace0Form.cpp +++ b/FunctionSpace/LocalFunctionSpace0Form.cpp @@ -1,16 +1,39 @@ #include "LocalFunctionSpace0Form.h" - +#include "BasisScalar.h" +#include "fullMatrix.h" +#include "Exception.h" LocalFunctionSpace0Form::LocalFunctionSpace0Form(const Basis& basis, const Element& elem){ + 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->size = b.getSize(); + this->type = b.getType(); + this->basis = &(b.getBasis()); + + jac = &(elem.getJacobian()); } LocalFunctionSpace0Form::~LocalFunctionSpace0Form(void){ + // LocalFunctionSpace0From is *NOT* responsible + // for deleting 'basis' + // It's the Basis job } double LocalFunctionSpace0Form::interpolate(const fullVector<double>& coef, double x, double y, double z) const{ + double res = 0; + + for(int i = 0; i < size; i++){ + fullVector<double> uv = jac->invMap(x, y); + + res += (*basis)[i].at(uv(0), uv(1), 0.0); + } + return res; } diff --git a/FunctionSpace/LocalFunctionSpace0Form.h b/FunctionSpace/LocalFunctionSpace0Form.h index ade9ad4f48272cdcd0b8a427667d7af4a00d9a93..ed135760e84925cec75fe6c1af1b912907ab64de 100644 --- a/FunctionSpace/LocalFunctionSpace0Form.h +++ b/FunctionSpace/LocalFunctionSpace0Form.h @@ -1,6 +1,13 @@ #ifndef _LOCALFUNCTIONSPACE0FORM_H_ #define _LOCALFUNCTIONSPACE0FORM_H_ +#include <vector> +#include "Polynomial.h" +#include "Basis.h" +#include "Element.h" +#include "Jacobian.h" +#include "LocalFunctionSpaceScalar.h" + /** @class LocalFunctionSpace0Form @brief 0 Form Local Function Spaces @@ -8,16 +15,11 @@ A Local Function Space build on a @em 0 @em Form */ -#include <vector> -#include "Polynomial.h" -#include "Basis.h" -#include "Element.h" -#include "LocalFunctionSpaceScalar.h" - class LocalFunctionSpace0Form: public LocalFunctionSpaceScalar{ private: const std::vector<Polynomial>* basis; - + Jacobian* jac; + public: //! Instantiate a new LocalFunctionSpace0Form //! @param basis The Basis used to build diff --git a/FunctionSpace/LocalFunctionSpace1Form.cpp b/FunctionSpace/LocalFunctionSpace1Form.cpp index 538e22304c105c37f00a5737cb5264e5b6fcb6ca..0dcd28c4c8b9181b4147a9b495827c7bbe418de5 100644 --- a/FunctionSpace/LocalFunctionSpace1Form.cpp +++ b/FunctionSpace/LocalFunctionSpace1Form.cpp @@ -1,12 +1,29 @@ #include "LocalFunctionSpace1Form.h" - +#include "BasisVector.h" +#include "fullMatrix.h" +#include "Exception.h" LocalFunctionSpace1Form::LocalFunctionSpace1Form(const Basis& basis, const Element& elem){ + + 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->size = b.getSize(); + this->type = b.getType(); + this->basis = &(b.getBasis()); + + jac = &(elem.getJacobian()); + orient = &(elem.getAllOrientations()); } LocalFunctionSpace1Form::~LocalFunctionSpace1Form(void){ + // LocalFunctionSpace1From is *NOT* responsible + // for deleting 'basis' + // It's the Basis job } @@ -14,4 +31,14 @@ fullVector<double> LocalFunctionSpace1Form:: interpolate(const fullVector<double>& coef, double x, double y, double z) const{ + //double res = 0; + + for(int i = 0; i < size; i++){ + //fullVector<double> uv = jac->invMap(x, y); + + //res += (*basis)[i].at(uv(0), uv(1), 0.0); + } + + //return res; + } diff --git a/FunctionSpace/LocalFunctionSpace1Form.h b/FunctionSpace/LocalFunctionSpace1Form.h index df6a3a388bf80239c2f45ec17d694cfc7331d46c..be85d87a4088a61698cca23677e84f57d6072b6c 100644 --- a/FunctionSpace/LocalFunctionSpace1Form.h +++ b/FunctionSpace/LocalFunctionSpace1Form.h @@ -12,12 +12,15 @@ #include "Polynomial.h" #include "Basis.h" #include "Element.h" +#include "Jacobian.h" #include "LocalFunctionSpaceVector.h" class LocalFunctionSpace1Form: public LocalFunctionSpaceVector{ private: const std::vector<std::vector<Polynomial> >* basis; - + Jacobian* jac; + const std::vector<int>* orient; + public: //! Instantiate a new LocalFunctionSpace1Form //! @param basis The Basis used to build diff --git a/FunctionSpace/LocalFunctionSpaceScalar.h b/FunctionSpace/LocalFunctionSpaceScalar.h index 4b707fac83ddcb9ad6ff47f9da21de6cdbc30cc0..991e1c11343481105f93b39b491418aafa87a137 100644 --- a/FunctionSpace/LocalFunctionSpaceScalar.h +++ b/FunctionSpace/LocalFunctionSpaceScalar.h @@ -1,6 +1,8 @@ #ifndef _LOCALFUNCTIONSPACESCALAR_H_ #define _LOCALFUNCTIONSPACESCALAR_H_ +#include <vector> +#include "Polynomial.h" #include "LocalFunctionSpace.h" /**