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 |