diff --git a/Makefile b/Makefile index d5c62200fb62f6d4eaf838e1505f135b6702884e..92c4be960cadbd3bb650e9e1326d5a51677dc2ce 100644 --- a/Makefile +++ b/Makefile @@ -7,7 +7,7 @@ include variables GMSH_MAJOR_VERSION = 2 GMSH_MINOR_VERSION = 2 -GMSH_PATCH_VERSION = 5 +GMSH_PATCH_VERSION = 6 GMSH_EXTRA_VERSION = GMSH_VERSION = ${GMSH_MAJOR_VERSION}.${GMSH_MINOR_VERSION}.${GMSH_PATCH_VERSION}${GMSH_EXTRA_VERSION} @@ -113,7 +113,7 @@ else if not exist ${includedir}\gmsh mkdir ${includedir}\gmsh if not exist ${libdir} mkdir ${libdir} erase /q ${includedir}\gmsh\*.h - for %%i in (${subst /,\,${GMSH_API}}) do copy %%i ${includedir}\gmsh + for %%i in (${subst /,\,${GMSH_API}}) do copy %%i ${includedir}\gmsh copy /y lib\libGmsh${LIBEXT} ${libdir}\libGmsh${LIBSUFFIX}${LIBEXT} endif diff --git a/Numeric/FunctionSpace.cpp b/Numeric/FunctionSpace.cpp index c4e27ff42eb701e1168d2cf83e646ebfd8efe357..d228aac8272535604c21de33ea90b5428e4cfd36 100644 --- a/Numeric/FunctionSpace.cpp +++ b/Numeric/FunctionSpace.cpp @@ -11,7 +11,6 @@ #include "GmshDefines.h" #include "GmshMessage.h" - Double_Matrix generate1DMonomials(int order) { Double_Matrix monomials(order + 1, 1); @@ -115,14 +114,7 @@ Double_Matrix generatePascalSerendipityTetrahedron(int order) 4 * std::max(0, (order - 2) * (order - 1) / 2); Double_Matrix monomials(nbMonomials, 3); - // order 0 - monomials.set_all(0); - - monomials(0, 0) = 0; - monomials(0, 1) = 0; - monomials(0, 2) = 0; - int index = 1; for (int p = 1; p < order; p++) { for (int i = 0; i < 3; i++) { @@ -687,13 +679,11 @@ const gmshFunctionSpace &gmshFunctionSpaces::find(int tag) std::map<std::pair<int,int>, Double_Matrix> gmshFunctionSpaces::injector; - -const Double_Matrix &gmshFunctionSpaces::findInjector(int tag1,int tag2) { - +const Double_Matrix &gmshFunctionSpaces::findInjector(int tag1,int tag2) +{ std::pair<int,int> key(tag1,tag2); std::map<std::pair<int,int>,Double_Matrix>::const_iterator it = injector.find(key); if (it != injector.end()) return it->second; - const gmshFunctionSpace& fs1 = find(tag1); const gmshFunctionSpace& fs2 = find(tag2); @@ -710,5 +700,3 @@ const Double_Matrix &gmshFunctionSpaces::findInjector(int tag1,int tag2) { injector.insert(std::make_pair(key,inj)); return injector[key]; } - - diff --git a/Numeric/FunctionSpace.h b/Numeric/FunctionSpace.h index 3495e7a1ba573074d020ca5ebca858bab55421ba..63c4cb0f70ed3d04be84ea74b5925c36bd30a184 100644 --- a/Numeric/FunctionSpace.h +++ b/Numeric/FunctionSpace.h @@ -17,166 +17,93 @@ struct gmshFunctionSpace Double_Matrix points; Double_Matrix monomials; Double_Matrix coefficients; - - inline void evaluateMonomials(double u,double v,double w,double p[]) const { - for (int j=0;j<monomials.size1();j++) { - p[j] = pow(u,(int) monomials(j,0)); - if (monomials.size2() > 1) p[j] *= pow(v,(int) monomials(j,1)); - if (monomials.size2() > 2) p[j] *= pow(w,(int) monomials(j,2)); + inline void evaluateMonomials(double u, double v, double w, double p[]) const + { + for (int j = 0; j < monomials.size1(); j++) { + p[j] = pow(u, (int)monomials(j, 0)); + if (monomials.size2() > 1) p[j] *= pow(v, (int)monomials(j, 1)); + if (monomials.size2() > 2) p[j] *= pow(w, (int)monomials(j, 2)); } } - -/* inline void evaluateMonomialDerivatives(double u,double v,double w,double p[][3]) const */ -/* { */ - - - -/* for (int j=0;j<monomials.size1();j++) { */ - -/* int expU = (int) monomials(j,0); */ -/* double uu = pow(u,expU); */ - -/* p[j][0] = pow(u,expU - 1) * expU; */ -/* p[j][1] = 0.; */ -/* p[j][2] = 0.; */ - - -/* if (monomials.size2() > 1) { */ - -/* int expV = (int) monomials(j,1); */ -/* double vv = pow(v,expV); */ - -/* p[j][0] *= vv; */ -/* p[j][1] = uu * pow(v,expV-1) * expV; */ - -/* if (monomials.size2() > 2) { */ - -/* int expW = (int) monomials(j,2); */ -/* double ww = pow(w,expW); */ - -/* p[j][0] *= ww; */ -/* p[j][1] *= ww; */ -/* p[j][2] = uu * vv * pow(w,expW-1) * expW; */ -/* } */ -/* } */ -/* } */ -/* } */ - inline void f(double u, double v, double w, double *sf) const { - double p[256]; - evaluateMonomials(u,v,w,p); - - for (int i=0;i<coefficients.size1();i++) { + evaluateMonomials(u, v, w, p); + for (int i = 0; i < coefficients.size1(); i++) { sf[i] = 0; - for (int j=0;j<coefficients.size2();j++) { - sf[i] += coefficients(i,j) * p[j]; + for (int j = 0; j < coefficients.size2(); j++) { + sf[i] += coefficients(i, j) * p[j]; } } } - inline void df(double u, double v, double w, double grads[][3]) const { - switch (monomials.size2()) { - case 1: - { - for (int i = 0; i < coefficients.size1(); i++){ - grads[i][0] = 0; - grads[i][1] = 0; - grads[i][2] = 0; - for(int j = 0; j < coefficients.size2(); j++){ - if ((monomials)(j, 0) > 0) - grads[i][0] += (coefficients)(i, j) * pow(u, (monomials)(j, 0) - 1) * (monomials)(j, 0); - } + for (int i = 0; i < coefficients.size1(); i++){ + grads[i][0] = 0; + grads[i][1] = 0; + grads[i][2] = 0; + for(int j = 0; j < coefficients.size2(); j++){ + if ((monomials)(j, 0) > 0) + grads[i][0] += (coefficients)(i, j) * + pow(u, (monomials)(j, 0) - 1) * (monomials)(j, 0); } - break; } + break; case 2: - { - - for (int i = 0; i < coefficients.size1(); i++){ - grads[i][0] = 0; - grads[i][1] = 0; - grads[i][2] = 0; - for(int j = 0; j < coefficients.size2(); j++){ - if ((monomials)(j, 0) > 0) - grads[i][0] += (coefficients)(i, j) * - pow(u, (monomials)(j, 0) - 1) * (monomials)(j, 0) * - pow(v, (monomials)(j, 1)); - if ((monomials)(j, 1) > 0) - grads[i][1] += (coefficients)(i, j) * - pow(u, (monomials)(j, 0)) * - pow(v, (monomials)(j, 1) - 1) * (monomials)(j, 1); - } + for (int i = 0; i < coefficients.size1(); i++){ + grads[i][0] = 0; + grads[i][1] = 0; + grads[i][2] = 0; + for(int j = 0; j < coefficients.size2(); j++){ + if ((monomials)(j, 0) > 0) + grads[i][0] += (coefficients)(i, j) * + pow(u, (monomials)(j, 0) - 1) * (monomials)(j, 0) * + pow(v, (monomials)(j, 1)); + if ((monomials)(j, 1) > 0) + grads[i][1] += (coefficients)(i, j) * + pow(u, (monomials)(j, 0)) * + pow(v, (monomials)(j, 1) - 1) * (monomials)(j, 1); } - - break; } - + break; case 3: - { - - for (int i = 0; i < coefficients.size1(); i++){ - grads[i][0] = 0; - grads[i][1] = 0; - grads[i][2] = 0; - for(int j = 0; j < coefficients.size2(); j++){ - if ((monomials)(j, 0) > 0) - grads[i][0] += (coefficients)(i, j) * - pow(u, (monomials)(j, 0) - 1) * (monomials)(j, 0) * - pow(v, (monomials)(j, 1)) * - pow(w, (monomials)(j, 2)); - if ((monomials)(j, 1) > 0) - grads[i][1] += (coefficients)(i, j) * - pow(u, (monomials)(j, 0)) * - pow(v, (monomials)(j, 1) - 1) * (monomials)(j, 1) * - pow(w, (monomials)(j, 2)); - if ((monomials)(j, 2) > 0) - grads[i][2] += (coefficients)(i, j) * - pow(u, (monomials)(j, 0)) * - pow(v, (monomials)(j, 1)) * - pow(w, (monomials)(j, 2) - 1) * (monomials)(j, 2); - } + for (int i = 0; i < coefficients.size1(); i++){ + grads[i][0] = 0; + grads[i][1] = 0; + grads[i][2] = 0; + for(int j = 0; j < coefficients.size2(); j++){ + if ((monomials)(j, 0) > 0) + grads[i][0] += (coefficients)(i, j) * + pow(u, (monomials)(j, 0) - 1) * (monomials)(j, 0) * + pow(v, (monomials)(j, 1)) * + pow(w, (monomials)(j, 2)); + if ((monomials)(j, 1) > 0) + grads[i][1] += (coefficients)(i, j) * + pow(u, (monomials)(j, 0)) * + pow(v, (monomials)(j, 1) - 1) * (monomials)(j, 1) * + pow(w, (monomials)(j, 2)); + if ((monomials)(j, 2) > 0) + grads[i][2] += (coefficients)(i, j) * + pow(u, (monomials)(j, 0)) * + pow(v, (monomials)(j, 1)) * + pow(w, (monomials)(j, 2) - 1) * (monomials)(j, 2); } - break; } + break; } } - - -/* inline void df(double u, double v, double w, double grads[][3]) const */ -/* { */ - -/* double p[256][3]; */ - -/* evaluateMonomialDerivatives(u,v,w,p); */ - -/* for (int i=0;i<coefficients.size1();i++) { */ - -/* grads[i][0] = 0.; */ -/* grads[i][1] = 0.; */ -/* grads[i][2] = 0.; */ - -/* for (int j=0;j<coefficients.size2();j++) { */ -/* grads[i][0] += coefficients(i,j) * p[j][0]; */ -/* grads[i][1] += coefficients(i,j) * p[j][1]; */ -/* // grads[i][2] += coefficients(i,j) * p[j][2]; */ -/* } */ -/* } */ -/* } */ }; class gmshFunctionSpaces { + private: static std::map<int, gmshFunctionSpace> fs; - static std::map<std::pair<int,int>,Double_Matrix> injector; - + static std::map<std::pair<int, int>, Double_Matrix> injector; public : static const gmshFunctionSpace &find(int); - static const Double_Matrix &findInjector(int,int); + static const Double_Matrix &findInjector(int, int); }; #endif