Skip to content
Snippets Groups Projects
Commit 77955ec1 authored by Nicolas Marsic's avatar Nicolas Marsic
Browse files

0Form Interpolation + Beginning 1Form

parent 306e8ce1
Branches
Tags
No related merge requests found
...@@ -13,16 +13,12 @@ ...@@ -13,16 +13,12 @@
with an Element. with an Element.
*/ */
#include "Jacobian.h"
class LocalFunctionSpace{ class LocalFunctionSpace{
protected: protected:
bool scalar; bool scalar;
int size; int size;
int type; int type;
Jacobian* jac;
public: public:
//! Deletes this LocalFunctionSpace //! Deletes this LocalFunctionSpace
//! //!
......
#include "LocalFunctionSpace0Form.h" #include "LocalFunctionSpace0Form.h"
#include "BasisScalar.h"
#include "fullMatrix.h"
#include "Exception.h"
LocalFunctionSpace0Form::LocalFunctionSpace0Form(const Basis& basis, LocalFunctionSpace0Form::LocalFunctionSpace0Form(const Basis& basis,
const Element& elem){ 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){ LocalFunctionSpace0Form::~LocalFunctionSpace0Form(void){
// LocalFunctionSpace0From is *NOT* responsible
// for deleting 'basis'
// It's the Basis job
} }
double LocalFunctionSpace0Form::interpolate(const fullVector<double>& coef, double LocalFunctionSpace0Form::interpolate(const fullVector<double>& coef,
double x, double y, double z) const{ 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;
} }
#ifndef _LOCALFUNCTIONSPACE0FORM_H_ #ifndef _LOCALFUNCTIONSPACE0FORM_H_
#define _LOCALFUNCTIONSPACE0FORM_H_ #define _LOCALFUNCTIONSPACE0FORM_H_
#include <vector>
#include "Polynomial.h"
#include "Basis.h"
#include "Element.h"
#include "Jacobian.h"
#include "LocalFunctionSpaceScalar.h"
/** /**
@class LocalFunctionSpace0Form @class LocalFunctionSpace0Form
@brief 0 Form Local Function Spaces @brief 0 Form Local Function Spaces
...@@ -8,16 +15,11 @@ ...@@ -8,16 +15,11 @@
A Local Function Space build on a @em 0 @em Form 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{ class LocalFunctionSpace0Form: public LocalFunctionSpaceScalar{
private: private:
const std::vector<Polynomial>* basis; const std::vector<Polynomial>* basis;
Jacobian* jac;
public: public:
//! Instantiate a new LocalFunctionSpace0Form //! Instantiate a new LocalFunctionSpace0Form
//! @param basis The Basis used to build //! @param basis The Basis used to build
......
#include "LocalFunctionSpace1Form.h" #include "LocalFunctionSpace1Form.h"
#include "BasisVector.h"
#include "fullMatrix.h"
#include "Exception.h"
LocalFunctionSpace1Form::LocalFunctionSpace1Form(const Basis& basis, LocalFunctionSpace1Form::LocalFunctionSpace1Form(const Basis& basis,
const Element& elem){ 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){ LocalFunctionSpace1Form::~LocalFunctionSpace1Form(void){
// LocalFunctionSpace1From is *NOT* responsible
// for deleting 'basis'
// It's the Basis job
} }
...@@ -14,4 +31,14 @@ fullVector<double> LocalFunctionSpace1Form:: ...@@ -14,4 +31,14 @@ fullVector<double> LocalFunctionSpace1Form::
interpolate(const fullVector<double>& coef, interpolate(const fullVector<double>& coef,
double x, double y, double z) const{ 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;
} }
...@@ -12,12 +12,15 @@ ...@@ -12,12 +12,15 @@
#include "Polynomial.h" #include "Polynomial.h"
#include "Basis.h" #include "Basis.h"
#include "Element.h" #include "Element.h"
#include "Jacobian.h"
#include "LocalFunctionSpaceVector.h" #include "LocalFunctionSpaceVector.h"
class LocalFunctionSpace1Form: public LocalFunctionSpaceVector{ class LocalFunctionSpace1Form: public LocalFunctionSpaceVector{
private: private:
const std::vector<std::vector<Polynomial> >* basis; const std::vector<std::vector<Polynomial> >* basis;
Jacobian* jac;
const std::vector<int>* orient;
public: public:
//! Instantiate a new LocalFunctionSpace1Form //! Instantiate a new LocalFunctionSpace1Form
//! @param basis The Basis used to build //! @param basis The Basis used to build
......
#ifndef _LOCALFUNCTIONSPACESCALAR_H_ #ifndef _LOCALFUNCTIONSPACESCALAR_H_
#define _LOCALFUNCTIONSPACESCALAR_H_ #define _LOCALFUNCTIONSPACESCALAR_H_
#include <vector>
#include "Polynomial.h"
#include "LocalFunctionSpace.h" #include "LocalFunctionSpace.h"
/** /**
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment