diff --git a/contrib/arc/CMakeLists.txt b/contrib/arc/CMakeLists.txt index e0e1264f9b40400adb88cebeaaf92869938620d9..3fa75e85a999c6b3572ccfd0a65ca46a997df5c9 100644 --- a/contrib/arc/CMakeLists.txt +++ b/contrib/arc/CMakeLists.txt @@ -3,6 +3,7 @@ add_executable(boris EXCLUDE_FROM_ALL contrib/arc/boris.cpp ${GMSH_SRC}) target_link_libraries(boris ${LINK_LIBRARIES}) # tests pour eric et christophe: +list(APPEND EXTERNAL_INCLUDES contrib/arc) add_executable(elastic EXCLUDE_FROM_ALL contrib/arc/mainElasticity.cpp ${GMSH_SRC}) target_link_libraries(elastic ${LINK_LIBRARIES}) diff --git a/contrib/arc/highlevel.h b/contrib/arc/highlevel.h new file mode 100644 index 0000000000000000000000000000000000000000..533c513bc4055005cecd2c817308ff9707565b49 --- /dev/null +++ b/contrib/arc/highlevel.h @@ -0,0 +1,107 @@ +// +// C++ Interface: highlevel +// +// Description: +// +// +// Author: <Eric Bechet>, (C) 2009 +// +// Copyright: See COPYING file that comes with this distribution +// +// +#ifndef highlevel_H +#define highlevel_H + +#include <vector> + +#include "dofManager.h" + +class entity{}; +class Vector{}; +class Tensor2{}; +class Tensor4{}; + +template<class T> struct TensorialTraits{}; + +template<> struct TensorialTraits<double> +{ + typedef double ValType; + typedef Vector GradType; + typedef Tensor2 HessType; +}; + +template<> struct TensorialTraits<Vector> +{ + typedef Vector ValType; + typedef Tensor2 GradType; + typedef Tensor4 HessType; +}; + + +template<class T> class Function // Fonction au sens EF du terme. + // renvoie valeur , gradient, hessien, etc...pour un element donné et un point donné +{ +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; +}; + +class SpaceBase // renvoie des clefs de dofs +{ +public: + virtual void getDofs(entity *e,std::vector<Dof> &vecD)=0; +}; + +template<class T> class Space : public SpaceBase // renvoie des clefs de dofs et des fonctions de formes +{ +public: + Space(){}; + virtual ~Space(){}; + virtual void getDofsandSFs(entity *e,std::vector<std::pair< Dof, Function<T>* > > &vecDFF) {} + virtual void getSFs(std::vector<std::pair< Dof, Function<T>* > > &vecDFF)=0; +}; + + +template<class T> class Field : public Function<T> // renvoie des valeurs de champ (ff*valeurs dofs), gradient , etc... +{ +public: + Field(){}; + virtual ~Field(){}; +}; + +template<class T1,class T2> class TermBilinear // terme associe a un "element" / pt de gauss (contribution élémentaire) + // typiquement celui ci stoque ce qui doit etre stocke. C'est la base configurable du code + // on doit associer cela a un allocateur qui renvoie un pointeur sur ce truc + // Soit tous les elements/pts de gauss ont le meme terme , allocateur unique (pas de stockage aux pts de + // gauss par exemple + // soit ils ont qqc a stockuer et sont tous distincts + // 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; +}; + + +class FormBilinear {}; // Renvoie des matrices élémentaires (ff) + // Accessoirement stocke des pointeurs vers les termes pour chaque element + // Doit etre initialisée AVANT toute opération (pour l'allocation) + +class FormLinear{}; // renvoie des vecteurs élémentaires + // on devrait pouvoir construire une forme lin à partir d'une forme bilin pour les pb "matrix free" + // idem FormBilin + +class FormZero{}; // renvoie des scalaires ex. resultat d'une integration + +//algorithmes +/*void Construct(FormBilinear &B,Region &R,Integrator &I); +void Assemble(FormBilinear &B,Region &R,Assembler &A, Integrator &I); +void Construct(FormLinear &L,Region &R,Integrator &I); +void Assemble(FormLinear &L,Region &R,Assembler &A,Integrator &I); +void Construct(FormZero &Z,Region &R,Integrator &I); +void Assemble(FormZero &Z,Region &R,Assembler &A,Integrator &I); +*/ + + +#endif // highlevel_H diff --git a/contrib/arc/mainElasticity.cpp b/contrib/arc/mainElasticity.cpp index 1e7f3fbbba2707f5cfa8afcf825c63333f5f3eff..32dcfc9aa16f8dda1773f1a5aefe26bb83809984 100644 --- a/contrib/arc/mainElasticity.cpp +++ b/contrib/arc/mainElasticity.cpp @@ -2,7 +2,7 @@ #include "elasticitySolver.h" #include "PView.h" #include "PViewData.h" - +#include "highlevel.h" int main (int argc, char* argv[]){ if (argc != 2){