Version: 6.3.1
Public Member Functions | Private Member Functions | Private Attributes

FunctionTable Class Reference

#include <StdMeshers_Distribution.hxx>

Inheritance diagram for FunctionTable:
Inheritance graph
[legend]

Public Member Functions

 FunctionTable (const std::vector< double > &, const int)
virtual ~FunctionTable ()
virtual bool value (const double, double &) const
virtual double integral (const double, const double) const

Private Member Functions

bool findBounds (const double, int &, int &) const
double integral (const int i) const
double integral (const int i, const double d) const

Private Attributes

std::vector< double > myData

Detailed Description

Definition at line 66 of file StdMeshers_Distribution.hxx.


Constructor & Destructor Documentation

FunctionTable::FunctionTable ( const std::vector< double > &  data,
const int  conv 
)

Definition at line 98 of file StdMeshers_Distribution.cxx.

References myData.

: Function( conv )
{
  myData = data;
}
FunctionTable::~FunctionTable ( ) [virtual]

Definition at line 104 of file StdMeshers_Distribution.cxx.

{
}

Member Function Documentation

bool FunctionTable::findBounds ( const double  x,
int x_ind_1,
int x_ind_2 
) const [private]

Definition at line 164 of file StdMeshers_Distribution.cxx.

References myData.

Referenced by integral(), and value().

{
  int n = myData.size() / 2;
  if( n==0 || x<myData[0] )
  {
    x_ind_1 = x_ind_2 = 0;
    return false;
  }

  for( int i=0; i<n-1; i++ )
    if( myData[2*i]<=x && x<myData[2*(i+1)] )
    {
      x_ind_1 = i;
      x_ind_2 = i+1;
      return true;
    }
  x_ind_1 = n-1;
  x_ind_2 = n-1;
  return ( fabs( x - myData[2*x_ind_2] ) < 1.e-10 );
}
double FunctionTable::integral ( const int  i,
const double  d 
) const [private]

Definition at line 139 of file StdMeshers_Distribution.cxx.

References ex19_sphereINcube.f1, ex19_sphereINcube.f2, myData, SMESH_AdvancedEditor.res, and value().

{
  double f1,f2, res = 0.0;
  if( value( myData[2*i]+d, f1 ) )
    if(!value(myData[2*i], f2)) {
      f2 = myData[2*i+1];
      Function::value( 1, f2 );
    }
  res = (f2+f1) * d / 2.0;
  return res;
}
double FunctionTable::integral ( const int  i) const [private]

Definition at line 131 of file StdMeshers_Distribution.cxx.

References integral(), and myData.

{
  if( i>=0 && i<myData.size()-1 )
    return integral( i, myData[2*(i+1)]-myData[2*i] );
  else
    return 0;
}
double FunctionTable::integral ( const double  a,
const double  b 
) const [virtual]

Implements Function.

Definition at line 151 of file StdMeshers_Distribution.cxx.

References findBounds(), and myData.

Referenced by integral().

{
  int x1s, x1f, x2s, x2f;
  findBounds( a, x1s, x1f );
  findBounds( b, x2s, x2f );
  double J = 0;
  for( int i=x1s; i<x2s; i++ )
    J+=integral( i );
  J-=integral( x1s, a-myData[2*x1s] );
  J+=integral( x2s, b-myData[2*x2s] );
  return J;
}
bool FunctionTable::value ( const double  t,
double &  f 
) const [virtual]

Reimplemented from Function.

Definition at line 108 of file StdMeshers_Distribution.cxx.

References findBounds(), SMESH_test.i1, SMESH_test.i2, myData, ex29_refine.x1, ex29_refine.x2, SMESH_fixation.y1, and SMESH_fixation.y2.

Referenced by integral().

{
  int i1, i2;
  if( !findBounds( t, i1, i2 ) )
    return false;

  if( i1==i2 ) {
    f = myData[ 2*i1+1 ];
    Function::value( t, f );
    return true;
  }
      
  double
    x1 = myData[2*i1], y1 = myData[2*i1+1],
    x2 = myData[2*i2], y2 = myData[2*i2+1];

  Function::value( x1, y1 );
  Function::value( x2, y2 );
  
  f = y1 + ( y2-y1 ) * ( t-x1 ) / ( x2-x1 );
  return true;
}

Field Documentation

std::vector<double> FunctionTable.myData [private]

Definition at line 86 of file StdMeshers_Distribution.hxx.

Referenced by findBounds(), FunctionTable(), integral(), and value().

Copyright © 2007-2011 CEA/DEN, EDF R&D, OPEN CASCADE
Copyright © 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS