From f03912b585871069e6b9fb8124dae34fb82b07f0 Mon Sep 17 00:00:00 2001 From: Christophe Geuzaine <cgeuzaine@ulg.ac.be> Date: Wed, 10 Mar 2010 17:56:28 +0000 Subject: [PATCH] pp --- contrib/cm3/CMakeLists.txt~ | 8 - contrib/cm3/DGterms.h~ | 331 -------------------- contrib/cm3/DgC0PlateElementaryTerms1ddl.h~ | 69 ---- contrib/cm3/mainElasticity.cpp~ | 108 ------- 4 files changed, 516 deletions(-) delete mode 100644 contrib/cm3/CMakeLists.txt~ delete mode 100644 contrib/cm3/DGterms.h~ delete mode 100644 contrib/cm3/DgC0PlateElementaryTerms1ddl.h~ delete mode 100644 contrib/cm3/mainElasticity.cpp~ diff --git a/contrib/cm3/CMakeLists.txt~ b/contrib/cm3/CMakeLists.txt~ deleted file mode 100644 index ecca2e400f..0000000000 --- a/contrib/cm3/CMakeLists.txt~ +++ /dev/null @@ -1,8 +0,0 @@ -# pour boris: -## boris cela ne marche que si le fichier est dans SVN ... -#include(/home/boris/MyGmshProjects/CMakeLists.txt) -# tests pour eric et christophe: -list(APPEND EXTERNAL_INCLUDES contrib/cm3) -add_executable(dgsolver EXCLUDE_FROM_ALL contrib/cm3/mainDG.cpp contrib/cm3/DgC0PlateSolver.cpp contrib/cm3/MInterfaceElement.cpp contrib/cm3/GModelDg.cpp contrib/cm3/C0DgPlateTerms.h ${GMSH_SRC}) -target_link_libraries(dgsolver ${LINK_LIBRARIES}) - diff --git a/contrib/cm3/DGterms.h~ b/contrib/cm3/DGterms.h~ deleted file mode 100644 index de33311651..0000000000 --- a/contrib/cm3/DGterms.h~ +++ /dev/null @@ -1,331 +0,0 @@ -// -// C++ Interface: terms -// -// Description: -// -// -// Author: <Eric Bechet>, (C) 2009 -// -// Copyright: See COPYING file that comes with this distribution -// -// - - -#ifndef _TERMS_H_ -#define _TERMS_H_ - -#include "SVector3.h" -#include <vector> -#include <iterator> -#include "Numeric.h" -#include "functionSpace.h" -#include "groupOfElements.h" -#include "materialLaw.h" - -class BilinearTermBase -{ - public : - virtual ~BilinearTermBase() {} - virtual void get(MElement *ele,int npts,IntPt *GP,fullMatrix<double> &m) =0; -}; - -template<class T1,class T2> class BilinearTerm : public BilinearTermBase -{ - protected : - FunctionSpace<T1>& space1; - FunctionSpace<T2>& space2; - public : - BilinearTerm(FunctionSpace<T1>& space1_,FunctionSpace<T1>& space2_) : space1(space1_),space2(space2_) {} - virtual ~BilinearTerm() {} -}; - -class LinearTermBase -{ - public: - virtual ~LinearTermBase() {} - virtual void get(MElement *ele,int npts,IntPt *GP,fullVector<double> &v) =0; - virtual void get(MVertex *ver,fullVector<double> &m) =0; -}; - -template<class T1> class LinearTerm : public LinearTermBase -{ - protected : - FunctionSpace<T1>& space1; - public : - LinearTerm(FunctionSpace<T1>& space1_) : space1(space1_) {} - virtual ~LinearTerm() {} -}; - -class ScalarTermBase -{ - public : - virtual ~ScalarTermBase() {} - virtual void get(MElement *ele,int npts,IntPt *GP,double &val) =0; -}; - -class ScalarTerm : public ScalarTermBase -{ - public : - virtual ~ScalarTerm() {} -}; - - -template<class T1,class T2> class BilinearTermToScalarTerm : public ScalarTerm -{ - BilinearTerm<T1,T2> &bilterm; - public : - BilinearTermToScalarTerm(BilinearTerm<T1,T2> &bilterm_): bilterm(bilterm_){} - virtual ~BilinearTermToScalarTerm() {} - virtual void get(MElement *ele,int npts,IntPt *GP,double &val) - { - fullMatrix<double> localMatrix; - bilterm.get(ele,npts,GP,localMatrix); - val=localMatrix(0,0); - } -}; - - -class ScalarTermConstant : public ScalarTerm -{ - double val; - public : - ScalarTermConstant(double val_=1.0): val(val_) {} - virtual ~ScalarTermConstant() {} - virtual void get(MElement *ele,int npts,IntPt *GP,double &val) - { - double jac[3][3]; - val=0; - for (int i = 0; i < npts; i++) - { - const double u = GP[i].pt[0];const double v = GP[i].pt[1];const double w = GP[i].pt[2]; - const double weight = GP[i].weight;const double detJ = ele->getJacobian(u, v, w, jac); - val+=weight*detJ; - } - } - virtual void get(MVertex *ver,double &val) - { - val=1; - } -}; - - - -template<class T1,class T2> class LaplaceTerm : public BilinearTerm<T1,T2> -{ - public : - LaplaceTerm(FunctionSpace<T1>& space1_,FunctionSpace<T2>& space2_) : BilinearTerm<T1,T2>(space1_,space2_) - {} - virtual ~LaplaceTerm() {} - virtual void get(MElement *ele,int npts,IntPt *GP,fullMatrix<double> &m) - { - Msg::Error("LaplaceTerm<S1,S2> w/ S1!=S2 not implemented"); - } - virtual void get(MVertex *ver,fullMatrix<double> &m) - { - Msg::Error("LaplaceTerm<S1,S2> w/ S1!=S2 not implemented"); - } -}; // class - - - -template<class T1> class LaplaceTerm<T1,T1> : public BilinearTerm<T1,T1> // symmetric -{ - public : - LaplaceTerm(FunctionSpace<T1>& space1_) : BilinearTerm<T1,T1>(space1_,space1_) - {} - virtual ~LaplaceTerm() {} - virtual void get(MElement *ele,int npts,IntPt *GP,fullMatrix<double> &m) - { - int nbFF = BilinearTerm<T1,T1>::space1.getNumKeys(ele); - double jac[3][3]; - m.resize(nbFF, nbFF); - m.setAll(0.); - for (int i = 0; i < npts; i++) - { - const double u = GP[i].pt[0]; const double v = GP[i].pt[1]; const double w = GP[i].pt[2]; - const double weight = GP[i].weight; const double detJ = ele->getJacobian(u, v, w, jac); - std::vector<typename TensorialTraits<T1>::GradType> Grads; - BilinearTerm<T1,T1>::space1.gradf(ele,u, v, w, Grads); - for (int j = 0; j < nbFF; j++) - { - for (int k = j; k < nbFF; k++) - { - double contrib=weight * detJ * dot(Grads[j],Grads[k]); - m(j,k)+=contrib; - if (j!=k) m(k,j)+=contrib; - } - } - } -// m.print(""); -// exit(0); - } -}; // class - - - - -class IsotropicElasticTerm : public BilinearTerm<SVector3,SVector3> -{ - protected : - double E,nu; - bool sym; - fullMatrix<double> H;/* = - { {C11, C12, C12, 0, 0, 0}, - {C12, C11, C12, 0, 0, 0}, - {C12, C12, C11, 0, 0, 0}, - { 0, 0, 0, C44, 0, 0}, - { 0, 0, 0, 0, C44, 0}, - { 0, 0, 0, 0, 0, C44} };*/ - - public : - IsotropicElasticTerm(FunctionSpace<SVector3>& space1_,FunctionSpace<SVector3>& space2_,double E_,double nu_) : BilinearTerm<SVector3,SVector3>(space1_,space2_),E(E_),nu(nu_),H(6,6) - { - double FACT = E / (1 + nu); - double C11 = FACT * (1 - nu) / (1 - 2 * nu); - double C12 = FACT * nu / (1 - 2 * nu); - double C44 = (C11 - C12) / 2; - H.scale(0.); - for (int i=0;i<3;++i) {H(i,i)=C11;H(i+3,i+3)=C44;} - H(1,0)=H(0,1)=H(2,0)=H(0,2)=H(1,2)=H(2,1)=C12; - sym=(&space1_==&space2_); - } - IsotropicElasticTerm(FunctionSpace<SVector3>& space1_,double E_,double nu_) : BilinearTerm<SVector3,SVector3>(space1_,space1_),E(E_),nu(nu_),H(6,6) - { - double FACT = E / (1 + nu); - double C11 = FACT * (1 - nu) / (1 - 2 * nu); - double C12 = FACT * nu / (1 - 2 * nu); - double C44 = (C11 - C12) / 2; - H.scale(0.); - for (int i=0;i<3;++i) {H(i,i)=C11;H(i+3,i+3)=C44;} - H(1,0)=H(0,1)=H(2,0)=H(0,2)=H(1,2)=H(2,1)=C12; - sym=true; - } - virtual ~IsotropicElasticTerm() {} - virtual void get(MElement *ele,int npts,IntPt *GP,fullMatrix<double> &m) - { - if (sym) - { - int nbFF = BilinearTerm<SVector3,SVector3>::space1.getNumKeys(ele); - double jac[3][3]; - fullMatrix<double> B(6, nbFF); - fullMatrix<double> BTH(nbFF, 6); - fullMatrix<double> BT(nbFF, 6); - m.resize(nbFF, nbFF); - m.setAll(0.); - for (int i = 0; i < npts; i++) - { - const double u = GP[i].pt[0]; const double v = GP[i].pt[1]; const double w = GP[i].pt[2]; - const double weight = GP[i].weight; const double detJ = ele->getJacobian(u, v, w, jac); - std::vector<TensorialTraits<SVector3>::GradType> Grads; - BilinearTerm<SVector3,SVector3>::space1.gradf(ele,u, v, w, Grads); // a optimiser ?? - for (int j = 0; j < nbFF; j++) - { - BT(j, 0) = B(0, j) = Grads[j](0,0); - BT(j, 1) = B(1, j) = Grads[j](1,1); - BT(j, 2) = B(2, j) = Grads[j](2,2); - BT(j, 3) = B(3, j) = Grads[j](0,1)+Grads[j](1,0); - BT(j, 4) = B(4, j) = Grads[j](1,2)+Grads[j](2,1); - BT(j, 5) = B(5, j) = Grads[j](0,2)+Grads[j](2,0); - } - BTH.setAll(0.); - BTH.gemm(BT, H); - m.gemm(BTH, B, weight * detJ, 1.); - } - } - else - { - int nbFF1 = BilinearTerm<SVector3,SVector3>::space1.getNumKeys(ele); - int nbFF2 = BilinearTerm<SVector3,SVector3>::space2.getNumKeys(ele); - double jac[3][3]; - fullMatrix<double> B(6, nbFF2); - fullMatrix<double> BTH(nbFF2, 6); - fullMatrix<double> BT(nbFF1, 6); - m.resize(nbFF1, nbFF2); - m.setAll(0.); - for (int i = 0; i < npts; i++) - { - const double u = GP[i].pt[0]; const double v = GP[i].pt[1]; const double w = GP[i].pt[2]; - const double weight = GP[i].weight; const double detJ = ele->getJacobian(u, v, w, jac); - std::vector<TensorialTraits<SVector3>::GradType> Grads;// tableau de matrices... - std::vector<TensorialTraits<SVector3>::GradType> GradsT;// tableau de matrices... - BilinearTerm<SVector3,SVector3>::space1.gradf(ele,u, v, w, Grads); - BilinearTerm<SVector3,SVector3>::space2.gradf(ele,u, v, w, GradsT); - for (int j = 0; j < nbFF1; j++) - { - BT(j, 0) = Grads[j](0,0); - BT(j, 1) = Grads[j](1,1); - BT(j, 2) = Grads[j](2,2); - BT(j, 3) = Grads[j](0,1)+Grads[j](1,0); - BT(j, 4) = Grads[j](1,2)+Grads[j](2,1); - BT(j, 5) = Grads[j](0,2)+Grads[j](2,0); - } - for (int j = 0; j < nbFF2; j++) - { - B(0, j) = GradsT[j](0,0); - B(1, j) = GradsT[j](1,1); - B(2, j) = GradsT[j](2,2); - B(3, j) = GradsT[j](0,1)+GradsT[j](1,0); - B(4, j) = GradsT[j](1,2)+GradsT[j](2,1); - B(5, j) = GradsT[j](0,2)+GradsT[j](2,0); - } - BTH.setAll(0.); - BTH.gemm(BT, H); - m.gemm(BTH, B, weight * detJ, 1.); - } - } - } -}; // class - - -inline double dot(const double &a, const double &b) -{ return a*b; } - - -template<class T1> class LoadTerm : public LinearTerm<T1> -{ - simpleFunction<typename TensorialTraits<T1>::ValType> &Load; - public : - LoadTerm(FunctionSpace<T1>& space1_,simpleFunction<typename TensorialTraits<T1>::ValType> &Load_) :LinearTerm<T1>(space1_),Load(Load_) {} - virtual ~LoadTerm() {} - - virtual void get(MElement *ele,int npts,IntPt *GP,fullVector<double> &m) - { - double nbFF=LinearTerm<T1>::space1.getNumKeys(ele); - double jac[3][3]; - m.resize(nbFF); - m.scale(0.); - for (int i = 0; i < npts; i++) - { - const double u = GP[i].pt[0];const double v = GP[i].pt[1];const double w = GP[i].pt[2]; - const double weight = GP[i].weight;const double detJ = ele->getJacobian(u, v, w, jac); - std::vector<typename TensorialTraits<T1>::ValType> Vals; - LinearTerm<T1>::space1.f(ele,u, v, w, Vals); - SPoint3 p; - ele->pnt(u, v, w, p); - typename TensorialTraits<T1>::ValType load=Load(p.x(),p.y(),p.z()); - for (int j = 0; j < nbFF ; ++j) - { - m(j)+=dot(Vals[j],load)*weight*detJ; - } - } - } - - virtual void get(MVertex *ver,fullVector<double> &m) - { - double nbFF=LinearTerm<T1>::space1.getNumKeys(ver); - double jac[3][3]; - m.resize(nbFF); - std::vector<typename TensorialTraits<T1>::ValType> Vals; - LinearTerm<T1>::space1.f(ver, Vals); - typename TensorialTraits<T1>::ValType load=Load(ver->x(),ver->y(),ver->z()); - for (int j = 0; j < nbFF ; ++j) - { - m(j)=dot(Vals[j],load); - } - } -}; - - - - -#endif// _TERMS_H_ diff --git a/contrib/cm3/DgC0PlateElementaryTerms1ddl.h~ b/contrib/cm3/DgC0PlateElementaryTerms1ddl.h~ deleted file mode 100644 index 1fa6c24644..0000000000 --- a/contrib/cm3/DgC0PlateElementaryTerms1ddl.h~ +++ /dev/null @@ -1,69 +0,0 @@ -// Compute the component (j,k) of the elementary stiffness matrix -inline double BulkC0PlateDGStiffnessBendingTerms(TensorialTraits<double>::HessType &hessj, TensorialTraits<double>::HessType &hessk, LinearElasticShellHookeTensor *H, const LocalBasis *lb){ - double val = 0.; - for(int alpha=0;alpha<2;alpha++) - for(int beta=0;beta<2;beta++) - for(int gamma=0;gamma<2;gamma++) - for(int delta=0;delta<2;delta++) - val += hessj(alpha,beta)*hessk(gamma,delta)*H->get(alpha,beta,gamma,delta); - return lb->gett0(2)*lb->gett0(2)*val; -} - -inline double consAndCompC0PlateStiffnessTerms(LinearElasticShellHookeTensor *Hhat,const fullMatrix<double> &Bhat,const SVector3 &dt, const LocalBasis *lb){ - double val=0.; - for(int alpha=0;alpha<2;alpha++) - for(int beta=0;beta<2;beta++) - for(int gamma=0;gamma<2;gamma++) - for(int delta=0;delta<2;delta++) - val += Hhat->get(alpha,beta,gamma,delta)*Bhat(gamma,delta)*dot(dt,lb->getphi0(alpha))*(-lb->getphi0(1,beta)); - return 0.5*val; -} - -inline double stabilityC0PlateStiffnessTerms(LinearElasticShellHookeTensor *Hhat, const SVector3 &dta, const SVector3 &dtb, const LocalBasis *lb){ - double val=0.; - for(int alpha=0;alpha<2;alpha++) - for(int beta=0;beta<2;beta++) - for(int gamma=0;gamma<2;gamma++) - for(int delta=0;delta<2;delta++) - val += dot(dta,lb->getphi0(gamma))*dot(dtb,lb->getphi0(alpha))*Hhat->get(alpha,beta,gamma,delta)*(-lb->getphi0(1,delta))*(-lb->getphi0(1,beta)); - - return val; -} - -inline double BulkC0PlateDGForceTerms(const TensorialTraits<double>::HessType &hessj,const std::vector<TensorialTraits<double>::HessType> &Hess,const LinearElasticShellHookeTensor *H,const LocalBasis *lb,const fullMatrix<double> &disp){ - const int n = Hess.size(); - double sum,val; - val=0.; - for(int a=0;a<2;a++) - for(int b=0;b<2;b++){ - sum=0.; - for(int j=0;j<n;j++) - sum+=-lb->gett0(2)*Hess[j](a,b)*disp(j,0); - for(int c=0;c<2;c++) - for(int d=0;d<2;d++) - val += -lb->gett0(2)*hessj(c,d)*H->get(a,b,c,d)*sum; - } - return val; -} - -inline double consC0PlateForceTerms(const LinearElasticShellHookeTensor *Hhat, const fullMatrix<double> &Bhat, const std::vector<SVector3> &Dt_m, const std::vector<SVector3> &Dt_p,const LocalBasis *lb, const fullMatrix<double> &disp){ - const int n_m = Dt_m.size(); - const int n_p = Dt_p.size(); - double sum,val; - val=0.; - for(int a=0;a<2;a++){ - sum=0.; - for(int j=0;j<n_m;j++) - sum -= dot(Dt_m[j],lb->getphi0(a))*disp(j,0); - for(int j=0;j<n_p;j++) - sum += dot(Dt_p[j],lb->getphi0(a))*disp(j+n_m,0); - - for(int b=0;b<2;b++) - for(int c=0;c<2;c++) - for(int d=0;d<2;d++) - val+= Hhat->get(a,b,c,d)*Bhat(c,d)*sum*(-lb->getphi0(1,b)); - } - return 0.5*val; -} - - diff --git a/contrib/cm3/mainElasticity.cpp~ b/contrib/cm3/mainElasticity.cpp~ deleted file mode 100644 index 3ac287aedc..0000000000 --- a/contrib/cm3/mainElasticity.cpp~ +++ /dev/null @@ -1,108 +0,0 @@ -#include "Gmsh.h" -#include "elasticitySolver.h" -#include "PView.h" -#include "PViewData.h" -#include "highlevel.h"/usr/bin/gmake -f "/home/gauthier/distgmsh/trunk/Makefile" elastic -o ../../bin/elastic -#include "groupOfElements.h" -#include <iterator> - -int main (int argc, char* argv[]) -{ - - if (argc != 2){ - printf("usage : elasticity input_file_name\n"); - return -1; - } - - - GmshInitialize(argc, argv); - // globals are still present in Gmsh - - // instanciate a solver - elasticitySolver mySolver (1000); - - // read some input file - mySolver.readInputFile(argv[1]); - - // solve the problem - mySolver.solve(); - - PView *pv = mySolver.buildDisplacementView("displacement"); - pv->getData()->writeMSH("disp.msh", false); - delete pv; - pv = mySolver.buildElasticEnergyView("elastic energy"); - pv->getData()->writeMSH("energ.msh", false); - delete pv; - - - - // stop gmsh - GmshFinalize(); - -} - - - -/* - groupOfElements *g = new groupOfElements (2, 7); - - MElement *e=*(g->begin()); - std::cout << e->getNumPrimaryVertices() << "vertices" << std::endl; - const double uvw[3]={0.,0.,0.}; - std::vector<Dof> dofs; - std::vector<double> vals; - std::vector<SVector3> grads; - std::vector<SVector3> vals2; - std::vector<STensor3> grads2; - - std::ostream_iterator< double > output( std::cout, " " ); - - ScalarLagrangeFunctionSpace L(100); - std::cout << L.getNumKeys(e) << "fonctions de formes L" << std::endl; - L.getKeys(e,dofs); - for (int i=0;i<dofs.size();++i) std::cout << "entity: " << dofs[i].getEntity() << " id: " << dofs[i].getType() << std::endl; - dofs.clear(); - L.f(e,0.1,0.1,0,vals); - L.gradf(e,0.1,0.1,0,grads); - std::copy(vals.begin(),vals.end(),output); std::cout << std::endl; - for (std::vector<SVector3>::iterator it=grads.begin();it!=grads.end();++it) { std::cout << (*it)[0]<< " " << (*it)[1] <<" " << (*it)[2] << std::endl; } - - VectorLagrangeFunctionSpace L1(100,VectorLagrangeFunctionSpace::VECTOR_X); - VectorLagrangeFunctionSpace L2(100,VectorLagrangeFunctionSpace::VECTOR_Y); - std::cout << L2.getNumKeys(e) << "fonctions de formes L2" << std::endl; - L2.f(e,0.1,0.1,0,vals2); - L2.gradf(e,0.1,0.1,0,grads2); - for (std::vector<SVector3>::iterator it=vals2.begin();it!=vals2.end();++it) { std::cout << (*it)[0]<< " " << (*it)[1] <<" " << (*it)[2] << std::endl; } - for (std::vector<STensor3>::iterator it=grads2.begin();it!=grads2.end();++it) { (*it).print(""); } - - VectorLagrangeFunctionSpace L3(100,VectorLagrangeFunctionSpace::VECTOR_Z); - - VectorLagrangeFunctionSpace P123(100); - std::cout << P123.getNumKeys(e) << "fonctions de formes P123" << std::endl; - P123.getKeys(e,dofs); - std::cout << dofs.size() << std::endl; - for (int i=0;i<dofs.size();++i) std::cout << "entity: " << dofs[i].getEntity() << " id: " << dofs[i].getType() << std::endl; - - vals2.clear(); - grads2.clear(); - P123.f(e,0.1,0.1,0,vals2); - P123.gradf(e,0.1,0.1,0,grads2); - for (std::vector<SVector3>::iterator it=vals2.begin();it!=vals2.end();++it) { std::cout << (*it)[0]<< " " << (*it)[1] <<" " << (*it)[2] << std::endl; } - for (std::vector<STensor3>::iterator it=grads2.begin();it!=grads2.end();++it) { (*it).print(""); } - - - - FormBilinear<TermBilinearMeca,ScalarLagrangeFunctionSpace,ScalarLagrangeFunctionSpace > f(L,L); - f.func(); - f.Accumulate(e,uvw); - - - FormBilinear<TermBilinearMecaNL,ScalarLagrangeFunctionSpace,ScalarLagrangeFunctionSpace > fnl(L,L); - fnl.func(); - -*/ - - - - - -- GitLab