"Fossies" - the Fresh Open Source Software Archive  

Source code changes of the file "Functions/BF_Facet.cpp" between
getdp-3.4.0-source.tgz and getdp-3.5.0-source.tgz

About: GetDP is a general finite element solver using mixed elements to discretize de Rham-type complexes in one, two and three dimensions.

BF_Facet.cpp  (getdp-3.4.0-source.tgz):BF_Facet.cpp  (getdp-3.5.0-source.tgz)
// GetDP - Copyright (C) 1997-2021 P. Dular and C. Geuzaine, University of Liege // GetDP - Copyright (C) 1997-2022 P. Dular and C. Geuzaine, University of Liege
// //
// See the LICENSE.txt file for license information. Please report all // See the LICENSE.txt file for license information. Please report all
// issues on https://gitlab.onelab.info/getdp/getdp/issues. // issues on https://gitlab.onelab.info/getdp/getdp/issues.
#include "ProData.h" #include "ProData.h"
#include "Message.h" #include "Message.h"
#define NoFace Message::Error("Missing Face Entity in Element %d", Element->Nu m) #define NoFace Message::Error("Missing Face Entity in Element %d", Element->Num)
/* ------------------------------------------------------------------------ */ /* ------------------------------------------------------------------------ */
/* B F _ F a c e t */ /* B F _ F a c e t */
/* ------------------------------------------------------------------------ */ /* ------------------------------------------------------------------------ */
#define WrongNumFacet Message::Error("Wrong Facet number in 'BF_Facet'") #define WrongNumFacet Message::Error("Wrong Facet number in 'BF_Facet'")
void BF_Facet(struct Element * Element, int NumFacet, void BF_Facet(struct Element *Element, int NumFacet, double u, double v,
double u, double v, double w, double s[]) double w, double s[])
{ {
switch (Element->Type) { switch(Element->Type) {
case LINE : case LINE_2 : case LINE:
case LINE_3 : case LINE_4 : case LINE_2:
switch(NumFacet) { case LINE_3:
case 1 : s[0] = 1. ; s[1] = 0. ; s[2] = 0. ; break ; case LINE_4:
default : WrongNumFacet ; switch(NumFacet) {
case 1:
s[0] = 1.;
s[1] = 0.;
s[2] = 0.;
break;
default: WrongNumFacet;
} }
break ; break;
case TRIANGLE : case TRIANGLE_2 : case TRIANGLE:
case TRIANGLE_3 : case TRIANGLE_4 : case TRIANGLE_2:
switch(NumFacet) { case TRIANGLE_3:
case 1 : s[0] = 0. ; s[1] = 0. ; s[2] = 2. ; break ; case TRIANGLE_4:
default : WrongNumFacet ; switch(NumFacet) {
case 1:
s[0] = 0.;
s[1] = 0.;
s[2] = 2.;
break;
default: WrongNumFacet;
} }
break ; break;
case QUADRANGLE : case QUADRANGLE_2 : case QUADRANGLE_2_8N : case QUADRANGLE:
case QUADRANGLE_3 : case QUADRANGLE_4 : case QUADRANGLE_2:
switch(NumFacet) { case QUADRANGLE_2_8N:
case 1 : s[0] = 0. ; s[1] = 0. ; s[2] = 0.5 ; break ; case QUADRANGLE_3:
default : WrongNumFacet ; case QUADRANGLE_4:
switch(NumFacet) {
case 1:
s[0] = 0.;
s[1] = 0.;
s[2] = 0.5;
break;
default: WrongNumFacet;
} }
break ; break;
case TETRAHEDRON : case TETRAHEDRON_2 : case TETRAHEDRON:
case TETRAHEDRON_3 : case TETRAHEDRON_4 : case TETRAHEDRON_2:
switch(NumFacet) { case TETRAHEDRON_3:
case 1 : s[0] = 2. * u ; s[1] = -2. * (1.- v) ; s[2] = 2. * w case TETRAHEDRON_4:
; break ; switch(NumFacet) {
case 2 : s[0] = 2. * u ; s[1] = 2. * v ; s[2] = -2. * (1.- w) case 1:
; break ; s[0] = 2. * u;
case 3 : s[0] = -2. * (1.- u) ; s[1] = 2. * v ; s[2] = 2. * w s[1] = -2. * (1. - v);
; break ; s[2] = 2. * w;
case 4 : s[0] = 2. * u ; s[1] = 2. * v ; s[2] = 2. * w break;
; break ; case 2:
default : WrongNumFacet ; s[0] = 2. * u;
s[1] = 2. * v;
s[2] = -2. * (1. - w);
break;
case 3:
s[0] = -2. * (1. - u);
s[1] = 2. * v;
s[2] = 2. * w;
break;
case 4:
s[0] = 2. * u;
s[1] = 2. * v;
s[2] = 2. * w;
break;
default: WrongNumFacet;
} }
break ; break;
case HEXAHEDRON : case HEXAHEDRON_2 : case HEXAHEDRON_2_20N : case HEXAHEDRON:
case HEXAHEDRON_3 : case HEXAHEDRON_4 : case HEXAHEDRON_2:
switch(NumFacet) { case HEXAHEDRON_2_20N:
case 1 : s[0] = 0. ; s[1] = -0.25 * (1. - v) ; s[2] = 0. case HEXAHEDRON_3:
; break ; case HEXAHEDRON_4:
case 2 : s[0] = 0. ; s[1] = 0. ; s[2] = -0.25 * switch(NumFacet) {
(1. - w) ; break ; case 1:
case 3 : s[0] = -0.25 * (1. - u) ; s[1] = 0. ; s[2] = 0. s[0] = 0.;
; break ; s[1] = -0.25 * (1. - v);
case 4 : s[0] = 0.25 * (1. + u) ; s[1] = 0. ; s[2] = 0. s[2] = 0.;
; break ; break;
case 5 : s[0] = 0. ; s[1] = 0.25 * (1. + v) ; s[2] = 0. case 2:
; break ; s[0] = 0.;
case 6 : s[0] = 0. ; s[1] = 0. ; s[2] = 0.25 * s[1] = 0.;
(1. + w) ; break ; s[2] = -0.25 * (1. - w);
default : WrongNumFacet ; break;
case 3:
s[0] = -0.25 * (1. - u);
s[1] = 0.;
s[2] = 0.;
break;
case 4:
s[0] = 0.25 * (1. + u);
s[1] = 0.;
s[2] = 0.;
break;
case 5:
s[0] = 0.;
s[1] = 0.25 * (1. + v);
s[2] = 0.;
break;
case 6:
s[0] = 0.;
s[1] = 0.;
s[2] = 0.25 * (1. + w);
break;
default: WrongNumFacet;
} }
break ; break;
case PRISM : case PRISM_2 : case PRISM_2_15N : case PRISM:
case PRISM_3 : case PRISM_4 : case PRISM_2:
switch(NumFacet) { case PRISM_2_15N:
case 1 : s[0] = u ; s[1] = -(1. - v) ; s[2] = 0. ; break ; case PRISM_3:
case 2 : s[0] = 0. ; s[1] = 0. ; s[2] = -(1. - w) ; break ; case PRISM_4:
case 3 : s[0] = -(1. - u) ; s[1] = v ; s[2] = 0. ; break ; switch(NumFacet) {
case 4 : s[0] = u ; s[1] = v ; s[2] = 0. ; break ; case 1:
case 5 : s[0] = 0. ; s[1] = 0. ; s[2] = (1. + w) ; break ; s[0] = u;
default : WrongNumFacet ; s[1] = -(1. - v);
s[2] = 0.;
break;
case 2:
s[0] = 0.;
s[1] = 0.;
s[2] = -(1. - w);
break;
case 3:
s[0] = -(1. - u);
s[1] = v;
s[2] = 0.;
break;
case 4:
s[0] = u;
s[1] = v;
s[2] = 0.;
break;
case 5:
s[0] = 0.;
s[1] = 0.;
s[2] = (1. + w);
break;
default: WrongNumFacet;
} }
break ; break;
case PYRAMID : case PYRAMID_2 : case PYRAMID_2_13N : case PYRAMID:
case PYRAMID_3 : // case PYRAMID_4 case PYRAMID_2:
if ( w == 1){ case PYRAMID_2_13N:
case PYRAMID_3: // case PYRAMID_4
if(w == 1) {
switch(NumFacet) { switch(NumFacet) {
case 1 : s[0] = 0. ; s[1] = -0.5 ; s[2] = 0.25 ; break ; case 1:
case 2 : s[0] = 0. ; s[1] = 0. ; s[2] = 0. ; break ; s[0] = 0.;
case 3 : s[0] = -0.5 ; s[1] = 0. ; s[2] = 0.25 ; break ; s[1] = -0.5;
case 4 : s[0] = 0.5 ; s[1] = 0. ; s[2] = 0.25 ; break ; s[2] = 0.25;
case 5 : s[0] = 0. ; s[1] = 0.5 ; s[2] = 0.25 ; break ; break;
default : WrongNumFacet ; case 2:
s[0] = 0.;
s[1] = 0.;
s[2] = 0.;
break;
case 3:
s[0] = -0.5;
s[1] = 0.;
s[2] = 0.25;
break;
case 4:
s[0] = 0.5;
s[1] = 0.;
s[2] = 0.25;
break;
case 5:
s[0] = 0.;
s[1] = 0.5;
s[2] = 0.25;
break;
default: WrongNumFacet;
} }
} }
else { else {
switch(NumFacet) { switch(NumFacet) {
case 1 : s[0] = -0.25 * u * w / (1. - w) ; case 1:
s[1] = 0.25 * (-2. + v + v / (1. - w)) ; s[0] = -0.25 * u * w / (1. - w);
s[2] = 0.25 * w ; break ; s[1] = 0.25 * (-2. + v + v / (1. - w));
case 2 : s[0] = 0.25 * u ; s[2] = 0.25 * w;
s[1] = 0.25 * v ; break;
s[2] = -0.25 * (1. - w) ; break ; case 2:
case 3 : s[0] = 0.25 * (-2. + u + u / (1. - w)) ; s[0] = 0.25 * u;
s[1] = -0.25 * v * w / (1. - w) ; s[1] = 0.25 * v;
s[2] = 0.25 * w ; break ; s[2] = -0.25 * (1. - w);
case 4 : s[0] = 0.25 * ( 2. + u + u / (1. - w)) ; break;
s[1] = -0.25 * v * w / (1. - w); case 3:
s[2] = 0.25 * w ; break ; s[0] = 0.25 * (-2. + u + u / (1. - w));
case 5 : s[0] = -0.25 * u * w / (1. - w) ; s[1] = -0.25 * v * w / (1. - w);
s[1] = 0.25 * ( 2. + v + v / (1. - w)) ; s[2] = 0.25 * w;
s[2] = 0.25 * w ; break ; break;
default : WrongNumFacet ; case 4:
s[0] = 0.25 * (2. + u + u / (1. - w));
s[1] = -0.25 * v * w / (1. - w);
s[2] = 0.25 * w;
break;
case 5:
s[0] = -0.25 * u * w / (1. - w);
s[1] = 0.25 * (2. + v + v / (1. - w));
s[2] = 0.25 * w;
break;
default: WrongNumFacet;
} }
} }
break ;
default :
Message::Error("Unknown type of Element in BF_Facet");
break; break;
default: Message::Error("Unknown type of Element in BF_Facet"); break;
} }
if (!Element->GeoElement->NumFacets) NoFace ; if(!Element->GeoElement->NumFacets) NoFace;
if (Element->GeoElement->NumFacets[NumFacet-1] < 0) { if(Element->GeoElement->NumFacets[NumFacet - 1] < 0) {
s[0] = - s[0] ; s[1] = - s[1] ; s[2] = - s[2] ; s[0] = -s[0];
s[1] = -s[1];
s[2] = -s[2];
} }
} }
#undef WrongNumFacet #undef WrongNumFacet
/* ------------------------------------------------------------------------ */ /* ------------------------------------------------------------------------ */
/* B F _ D i v F a c e t */ /* B F _ D i v F a c e t */
/* ------------------------------------------------------------------------ */ /* ------------------------------------------------------------------------ */
#define WrongNumFacet Message::Error("Wrong Facet number in 'BF_DivFacet'") #define WrongNumFacet Message::Error("Wrong Facet number in 'BF_DivFacet'")
void BF_DivFacet(struct Element * Element, int NumFacet, void BF_DivFacet(struct Element *Element, int NumFacet, double u, double v,
double u, double v, double w, double *s) double w, double *s)
{ {
switch (Element->Type) { switch(Element->Type) {
case LINE : case LINE_2 : case LINE:
case LINE_3 : case LINE_4 : case LINE_2:
case LINE_3:
case LINE_4:
switch(NumFacet) { switch(NumFacet) {
case 1 : *s = 0. ; break ; case 1: *s = 0.; break;
default : WrongNumFacet ; default: WrongNumFacet;
} }
break ; break;
case TRIANGLE : case TRIANGLE_2 : case TRIANGLE:
case TRIANGLE_3 : case TRIANGLE_4 : case TRIANGLE_2:
case TRIANGLE_3:
case TRIANGLE_4:
switch(NumFacet) { switch(NumFacet) {
case 1 : *s = 0. ; break ; case 1: *s = 0.; break;
default : WrongNumFacet ; default: WrongNumFacet;
} }
break ; break;
case QUADRANGLE : case QUADRANGLE_2 : case QUADRANGLE_2_8N : case QUADRANGLE:
case QUADRANGLE_3 : case QUADRANGLE_4 : case QUADRANGLE_2:
case QUADRANGLE_2_8N:
case QUADRANGLE_3:
case QUADRANGLE_4:
switch(NumFacet) { switch(NumFacet) {
case 1 : *s = 0. ; break ; case 1: *s = 0.; break;
default : WrongNumFacet ; default: WrongNumFacet;
} }
break ; break;
case TETRAHEDRON : case TETRAHEDRON_2 : case TETRAHEDRON:
case TETRAHEDRON_3 : case TETRAHEDRON_4 : case TETRAHEDRON_2:
switch(NumFacet) { case TETRAHEDRON_3:
case 1 : *s = 6. ; break ; case TETRAHEDRON_4:
case 2 : *s = 6. ; break ; switch(NumFacet) {
case 3 : *s = 6. ; break ; case 1: *s = 6.; break;
case 4 : *s = 6. ; break ; case 2: *s = 6.; break;
default : WrongNumFacet ; case 3: *s = 6.; break;
case 4: *s = 6.; break;
default: WrongNumFacet;
} }
break ; break;
case HEXAHEDRON : case HEXAHEDRON_2 : case HEXAHEDRON_2_20N : case HEXAHEDRON:
case HEXAHEDRON_3 : case HEXAHEDRON_4 : case HEXAHEDRON_2:
switch(NumFacet) { case HEXAHEDRON_2_20N:
case 1 : *s = 0.25 ; break ; case HEXAHEDRON_3:
case 2 : *s = 0.25 ; break ; case HEXAHEDRON_4:
case 3 : *s = 0.25 ; break ; switch(NumFacet) {
case 4 : *s = 0.25 ; break ; case 1: *s = 0.25; break;
case 5 : *s = 0.25 ; break ; case 2: *s = 0.25; break;
case 6 : *s = 0.25 ; break ; case 3: *s = 0.25; break;
default : WrongNumFacet ; case 4: *s = 0.25; break;
case 5: *s = 0.25; break;
case 6: *s = 0.25; break;
default: WrongNumFacet;
} }
break ; break;
case PRISM : case PRISM_2 : case PRISM_2_15N : case PRISM:
case PRISM_3 : case PRISM_4 : case PRISM_2:
switch(NumFacet) { case PRISM_2_15N:
case 1 : *s = 2. ; break ; case PRISM_3:
case 2 : *s = 1. ; break ; case PRISM_4:
case 3 : *s = 2. ; break ; switch(NumFacet) {
case 4 : *s = 2. ; break ; case 1: *s = 2.; break;
case 5 : *s = 1. ; break ; case 2: *s = 1.; break;
default : WrongNumFacet ; case 3: *s = 2.; break;
case 4: *s = 2.; break;
case 5: *s = 1.; break;
default: WrongNumFacet;
} }
break ; break;
case PYRAMID : case PYRAMID_2 : case PYRAMID_2_13N : case PYRAMID:
case PYRAMID_3 : // case PYRAMID_4 case PYRAMID_2:
if ( w == 1){ case PYRAMID_2_13N:
*s = 0. ; case PYRAMID_3: // case PYRAMID_4
} if(w == 1) { *s = 0.; }
else { else {
switch(NumFacet) { switch(NumFacet) {
case 1 : *s = -0.25 * w/(1. - w) + 0.25/(1. - w) + 0.5 ; break ; case 1: *s = -0.25 * w / (1. - w) + 0.25 / (1. - w) + 0.5; break;
case 2 : *s = 0.75 ; break ; case 2: *s = 0.75; break;
case 3 : *s = -0.25 * w/(1. - w) + 0.25/(1. - w) + 0.5 ; break ; case 3: *s = -0.25 * w / (1. - w) + 0.25 / (1. - w) + 0.5; break;
case 4 : *s = -0.25 * w/(1. - w) + 0.25/(1. - w) + 0.5 ; break ; case 4: *s = -0.25 * w / (1. - w) + 0.25 / (1. - w) + 0.5; break;
case 5 : *s = -0.25 * w/(1. - w) + 0.25/(1. - w) + 0.5 ; break ; case 5: *s = -0.25 * w / (1. - w) + 0.25 / (1. - w) + 0.5; break;
default : WrongNumFacet ; default: WrongNumFacet;
} }
} }
break ; break;
default : default: Message::Error("Unknown type of Element in BF_DivFacet"); break;
Message::Error("Unknown type of Element in BF_DivFacet");
break ;
} }
if (!Element->GeoElement->NumFacets) NoFace ; if(!Element->GeoElement->NumFacets) NoFace;
if (Element->GeoElement->NumFacets[NumFacet-1] < 0) { if(Element->GeoElement->NumFacets[NumFacet - 1] < 0) { *s = -*s; }
*s = - *s ;
}
} }
#undef WrongNumFacet #undef WrongNumFacet
#undef NoFace #undef NoFace
 End of changes. 46 change blocks. 
164 lines changed or deleted 284 lines changed or added

Home  |  About  |  Features  |  All  |  Newest  |  Dox  |  Diffs  |  RSS Feeds  |  Screenshots  |  Comments  |  Imprint  |  Privacy  |  HTTP(S)