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

LocalFunctionSpace -- The beginning

parent 8cf298d7
No related branches found
No related tags found
No related merge requests found
...@@ -15,6 +15,10 @@ set(SRC ...@@ -15,6 +15,10 @@ set(SRC
TriNodeBasis.cpp TriNodeBasis.cpp
TriEdgeBasis.cpp TriEdgeBasis.cpp
TriNedelecBasis.cpp TriNedelecBasis.cpp
LocalFunctionSpace.cpp
LocalFunctionSpaceScalar.cpp
LocalFunctionSpaceVector.cpp
) )
file(GLOB HDR RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.h) file(GLOB HDR RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.h)
......
#include "LocalFunctionSpace.h"
LocalFunctionSpace::LocalFunctionSpace(void){
}
LocalFunctionSpace::~LocalFunctionSpace(void){
}
#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
#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
}
#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
#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
}
#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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment