From 77955ec1da093618c03215e230d92889d8841c2d Mon Sep 17 00:00:00 2001 From: Nicolas Marsic <nicolas.marsic@gmail.com> Date: Mon, 18 Jun 2012 15:08:06 +0000 Subject: [PATCH] 0Form Interpolation + Beginning 1Form --- FunctionSpace/LocalFunctionSpace.h | 4 ---- FunctionSpace/LocalFunctionSpace0Form.cpp | 25 ++++++++++++++++++- FunctionSpace/LocalFunctionSpace0Form.h | 16 +++++++------ FunctionSpace/LocalFunctionSpace1Form.cpp | 29 ++++++++++++++++++++++- FunctionSpace/LocalFunctionSpace1Form.h | 5 +++- FunctionSpace/LocalFunctionSpaceScalar.h | 2 ++ 6 files changed, 67 insertions(+), 14 deletions(-) diff --git a/FunctionSpace/LocalFunctionSpace.h b/FunctionSpace/LocalFunctionSpace.h index b73efff20e..852362d999 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 2751c0bbbd..45bc101dc7 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 ade9ad4f48..ed135760e8 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 538e22304c..0dcd28c4c8 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 df6a3a388b..be85d87a40 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 4b707fac83..991e1c1134 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" /** -- GitLab