MBDyn-1.7.3
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups
MultiLinearScalarFunction Class Reference

#include <ScalarFunctionsImpl.h>

Inheritance diagram for MultiLinearScalarFunction:
Collaboration diagram for MultiLinearScalarFunction:

Public Member Functions

 MultiLinearScalarFunction (const std::vector< doublereal > &y_i, const std::vector< doublereal > &x_i, bool doNotExtrapolate=false)
 
virtual ~MultiLinearScalarFunction (void)
 
virtual doublereal operator() (const doublereal x) const
 
virtual doublereal ComputeDiff (const doublereal t, const integer order=1) const
 
- Public Member Functions inherited from DifferentiableScalarFunction
virtual ~DifferentiableScalarFunction ()
 
- Public Member Functions inherited from BasicScalarFunction
virtual ~BasicScalarFunction ()
 

Private Attributes

std::vector< doublerealY_i
 
std::vector< doublerealX_i
 
bool doNotExtrapolate
 

Detailed Description

Definition at line 136 of file ScalarFunctionsImpl.h.

Constructor & Destructor Documentation

MultiLinearScalarFunction::MultiLinearScalarFunction ( const std::vector< doublereal > &  y_i,
const std::vector< doublereal > &  x_i,
bool  doNotExtrapolate = false 
)

Definition at line 557 of file ScalarFunctionsImpl.cc.

References ASSERTMSGBREAK, MBDYN_EXCEPT_ARGS, X_i, and Y_i.

561 : Y_i(y_i), X_i(x_i),
563 {
564  ASSERTMSGBREAK(X_i.size() == Y_i.size(),
565  "MultiLinearScalarFunction error, Y_i.size() != X_i.size()");
566  std::vector<doublereal>::iterator xi, xe;
567  xi = X_i.begin();
568  xe = X_i.end()-1;
569  for (unsigned i = 0; xi != xe; ++xi, ++i) {
570  if (*xi >= *(xi + 1)) {
571  silent_cerr("MultiLinearScalarFunction error, "
572  "X is not ordered: "
573  "X[" << i << "]=" << *xi
574  << " is not less than "
575  "X[" << i + 1 << "]=" << *(xi + 1)
576  << std::endl);
578  }
579  }
580 }
#define ASSERTMSGBREAK(expr, msg)
Definition: myassert.h:222
#define MBDYN_EXCEPT_ARGS
Definition: except.h:63
std::vector< doublereal > Y_i
std::vector< doublereal > X_i
MultiLinearScalarFunction::~MultiLinearScalarFunction ( void  )
virtual

Definition at line 582 of file ScalarFunctionsImpl.cc.

References NO_OP.

583 {
584  NO_OP;
585 }
#define NO_OP
Definition: myassert.h:74

Member Function Documentation

doublereal MultiLinearScalarFunction::ComputeDiff ( const doublereal  t,
const integer  order = 1 
) const
virtual

Implements DifferentiableScalarFunction.

Definition at line 605 of file ScalarFunctionsImpl.cc.

References ASSERTMSGBREAK, leval(), operator()(), X_i, and Y_i.

606 {
607  ASSERTMSGBREAK(order >=0, "Error in MultiLinearScalarFunction::ComputeDiff, order<0");
608  switch (order) {
609  case 0:
610  return operator()(x);
611 
612  case 1:
613  return leval(x, X_i, Y_i, order);
614 
615  default:
616  return 0.;
617  }
618 }
#define ASSERTMSGBREAK(expr, msg)
Definition: myassert.h:222
enum @55 order
doublereal leval(const doublereal &u, const std::vector< doublereal > &x, const std::vector< doublereal > &y, const int diff)
Definition: interp.cc:242
std::vector< doublereal > Y_i
virtual doublereal operator()(const doublereal x) const
std::vector< doublereal > X_i

Here is the call graph for this function:

doublereal MultiLinearScalarFunction::operator() ( const doublereal  x) const
virtual

Implements DifferentiableScalarFunction.

Definition at line 588 of file ScalarFunctionsImpl.cc.

References doNotExtrapolate, leval(), X_i, and Y_i.

Referenced by ComputeDiff().

589 {
590  if (doNotExtrapolate) {
591  if (x <= X_i[0]) {
592  return Y_i[0];
593  }
594 
595  int s = X_i.size() - 1;
596  if (x >= X_i[s]) {
597  return Y_i[s];
598  }
599  }
600 
601  return leval(x, X_i, Y_i);
602 }
doublereal leval(const doublereal &u, const std::vector< doublereal > &x, const std::vector< doublereal > &y, const int diff)
Definition: interp.cc:242
std::vector< doublereal > Y_i
std::vector< doublereal > X_i

Here is the call graph for this function:

Member Data Documentation

bool MultiLinearScalarFunction::doNotExtrapolate
private

Definition at line 140 of file ScalarFunctionsImpl.h.

Referenced by operator()().

std::vector<doublereal> MultiLinearScalarFunction::X_i
private

Definition at line 139 of file ScalarFunctionsImpl.h.

Referenced by ComputeDiff(), MultiLinearScalarFunction(), and operator()().

std::vector<doublereal> MultiLinearScalarFunction::Y_i
private

Definition at line 138 of file ScalarFunctionsImpl.h.

Referenced by ComputeDiff(), MultiLinearScalarFunction(), and operator()().


The documentation for this class was generated from the following files: