0021826: EDF 2367 SMESH : Hexaedron failure

fix the prev integration
This commit is contained in:
eap 2012-09-04 14:42:17 +00:00
parent 80cf9ab761
commit daf44dd2d8

View File

@ -613,12 +613,14 @@ bool StdMeshers_Regular_1D::computeInternalParameters(SMESH_Mesh & theMesh,
case NB_SEGMENTS: { case NB_SEGMENTS: {
double eltSize = 1; double eltSize = 1;
int nbSegments;
if ( _hypType == MAX_LENGTH ) if ( _hypType == MAX_LENGTH )
{ {
double nbseg = ceil(theLength / _value[ BEG_LENGTH_IND ]); // integer sup double nbseg = ceil(theLength / _value[ BEG_LENGTH_IND ]); // integer sup
if (nbseg <= 0) if (nbseg <= 0)
nbseg = 1; // degenerated edge nbseg = 1; // degenerated edge
eltSize = theLength / nbseg; eltSize = theLength / nbseg;
nbSegments = (int) nbseg;
} }
else if ( _hypType == LOCAL_LENGTH ) else if ( _hypType == LOCAL_LENGTH )
{ {
@ -659,13 +661,14 @@ bool StdMeshers_Regular_1D::computeInternalParameters(SMESH_Mesh & theMesh,
if (nbseg <= 0) if (nbseg <= 0)
nbseg = 1; // degenerated edge nbseg = 1; // degenerated edge
eltSize = theLength / nbseg; eltSize = theLength / nbseg;
nbSegments = (int) nbseg;
} }
else else
{ {
// Number Of Segments hypothesis // Number Of Segments hypothesis
int NbSegm = _ivalue[ NB_SEGMENTS_IND ]; nbSegments = _ivalue[ NB_SEGMENTS_IND ];
if ( NbSegm < 1 ) return false; if ( nbSegments < 1 ) return false;
if ( NbSegm == 1 ) return true; if ( nbSegments == 1 ) return true;
switch (_ivalue[ DISTR_TYPE_IND ]) switch (_ivalue[ DISTR_TYPE_IND ])
{ {
@ -675,8 +678,8 @@ bool StdMeshers_Regular_1D::computeInternalParameters(SMESH_Mesh & theMesh,
if (fabs(scale - 1.0) < Precision::Confusion()) { if (fabs(scale - 1.0) < Precision::Confusion()) {
// special case to avoid division by zero // special case to avoid division by zero
for (int i = 1; i < NbSegm; i++) { for (int i = 1; i < nbSegments; i++) {
double param = f + (l - f) * i / NbSegm; double param = f + (l - f) * i / nbSegments;
theParams.push_back( param ); theParams.push_back( param );
} }
} else { } else {
@ -684,10 +687,10 @@ bool StdMeshers_Regular_1D::computeInternalParameters(SMESH_Mesh & theMesh,
if ( theReverse ) if ( theReverse )
scale = 1.0 / scale; scale = 1.0 / scale;
double alpha = pow(scale, 1.0 / (NbSegm - 1)); double alpha = pow(scale, 1.0 / (nbSegments - 1));
double factor = (l - f) / (1.0 - pow(alpha, NbSegm)); double factor = (l - f) / (1.0 - pow(alpha, nbSegments));
for (int i = 1; i < NbSegm; i++) { for (int i = 1; i < nbSegments; i++) {
double param = f + factor * (1.0 - pow(alpha, i)); double param = f + factor * (1.0 - pow(alpha, i));
theParams.push_back( param ); theParams.push_back( param );
} }
@ -720,7 +723,7 @@ bool StdMeshers_Regular_1D::computeInternalParameters(SMESH_Mesh & theMesh,
} }
break; break;
case StdMeshers_NumberOfSegments::DT_Regular: case StdMeshers_NumberOfSegments::DT_Regular:
eltSize = theLength / _ivalue[ NB_SEGMENTS_IND ]; eltSize = theLength / nbSegments;
break; break;
default: default:
return false; return false;
@ -730,7 +733,7 @@ bool StdMeshers_Regular_1D::computeInternalParameters(SMESH_Mesh & theMesh,
if ( !Discret.IsDone() ) if ( !Discret.IsDone() )
return error( "GCPnts_UniformAbscissa failed"); return error( "GCPnts_UniformAbscissa failed");
int NbPoints = Min( Discret.NbPoints(), _ivalue[ NB_SEGMENTS_IND ]+1 ); int NbPoints = Min( Discret.NbPoints(), nbSegments + 1 );
for ( int i = 2; i < NbPoints; i++ ) // skip 1st and last points for ( int i = 2; i < NbPoints; i++ ) // skip 1st and last points
{ {
double param = Discret.Parameter(i); double param = Discret.Parameter(i);