mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2025-02-21 23:45:37 +05:00
0021826: EDF 2367 SMESH : Hexaedron failure
fix the prev integration
This commit is contained in:
parent
80cf9ab761
commit
daf44dd2d8
@ -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);
|
||||||
|
Loading…
Reference in New Issue
Block a user