From b1d7e617c7a865f7ae7b2256a6334bd7128999c9 Mon Sep 17 00:00:00 2001 From: Eric Bechet <eric.bechet@ulg.ac.be> Date: Mon, 19 Oct 2009 13:10:39 +0000 Subject: [PATCH] *** empty log message *** --- contrib/arc/highlevel.h | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/contrib/arc/highlevel.h b/contrib/arc/highlevel.h index 32d7b424c4..c681f5e3dd 100644 --- a/contrib/arc/highlevel.h +++ b/contrib/arc/highlevel.h @@ -13,11 +13,14 @@ #define highlevel_H #include <vector> +#include <complex> #include "dofManager.h" +#include "SVector3.h" -class entity{}; -class Vector{}; + + +typedef SVector3 Vector; class Tensor2{}; class Tensor4{}; @@ -30,6 +33,14 @@ template<> struct TensorialTraits<double> typedef Tensor2 HessType; }; +template<> struct TensorialTraits<std::complex<double> > +{ + typedef std::complex<double> ValType; + typedef Vector GradType; + typedef Tensor2 HessType; +}; + + template<> struct TensorialTraits<Vector> { typedef Vector ValType; @@ -43,15 +54,15 @@ template<class T> class Function // Fonction au sens EF du terme. { public: virtual ~Function(){} - virtual void GetVal (double uvw[],entity *e, T& Val)const =0; - virtual void GetGrad(double uvw[],entity *e,typename TensorialTraits<T>::GradType &Grad) const =0; - virtual void GetHess(double uvw[],entity *e,typename TensorialTraits<T>::HessType &Hess)const =0; + virtual void GetVal (double uvw[],MElement *e, T& Val)const =0; + virtual void GetGrad(double uvw[],MElement *e,typename TensorialTraits<T>::GradType &Grad) const =0; + virtual void GetHess(double uvw[],MElement *e,typename TensorialTraits<T>::HessType &Hess)const =0; }; class SpaceBase // renvoie des clefs de dofs { public: - virtual void getDofs(entity *e,std::vector<Dof> &vecD)=0; + virtual void getDofs(MElement *e,std::vector<Dof> &vecD)=0; }; template<class T> class Space : public SpaceBase // renvoie des clefs de dofs et des fonctions de formes @@ -59,7 +70,7 @@ template<class T> class Space : public SpaceBase // renvoie des clefs de dofs et public: Space(){}; virtual ~Space(){}; - virtual void getDofsandSFs(entity *e,std::vector<std::pair< Dof, Function<T>* > > &vecDFF) {} + virtual void getDofsandSFs(MElement *e,std::vector<std::pair< Dof, Function<T>* > > &vecDFF) {} virtual void getSFs(std::vector<std::pair< Dof, Function<T>* > > &vecDFF)=0; }; @@ -80,7 +91,9 @@ template<class T1,class T2> class TermBilinear // terme associe a un "element" // on peut utiliser des membres statiques pour ce qui est constant pour tous les instances { TermBilinear(); - virtual double getTerm(double uvw[],entity &e,Function<T1> &SF,Function<T2> &TF) = 0; + virtual double getTerm(double uvw[],MElement &e,Function<T1> &SF,Function<T2> &TF) = 0; + virtual void Update(double uvw[],MElement &e,Function<T1> &SF,Function<T2> &TF) = 0; +// toute fonctios utiles . prevoir un algorithme }; @@ -89,6 +102,7 @@ class FormBilinear {}; // Renvoie des matrices élémentaires (ff) // Doit etre initialisée AVANT toute opération (pour l'allocation) // en principe ce truc ne devrait pas ^etre reimplemente // il devrait donc dependre d'un parametre template TermBilinear + // elle sait "integrer" dans un elemeent class FormLinear{}; // renvoie des vecteurs élémentaires // on devrait pouvoir construire une forme lin à partir d'une forme bilin pour les pb "matrix free" -- GitLab