realroot_doc 0.1.1
mmx::brnops Namespace Reference

Functions


Function Documentation

void mmx::brnops::decasteljau ( real_t *  r,
unsigned  sz,
const real_t &  t,
int  str = 1 
)

Definition at line 23 of file loops_brnops.hpp.

Referenced by eval(), lrestrict(), parallel< system >::process(), descartes_solver< real_t, local_method >::rockwoodcuts(), rrestrict(), descartes_solver< real_t, local_method >::split(), and eenv::vmap().

  {
    real_t *er, *p;
      for ( er = r + (sz-1)*str; er != r; er -= str )
        for ( p = r; p != er; p += str )
          *p = (1.0-t)**p+t**(p+str);
  };
void mmx::brnops::decasteljau ( real_t *  r,
unsigned  sz,
int  str = 1 
)

Definition at line 37 of file loops_brnops.hpp.

  {
    real_t *er, *p;
    for ( er = r + (sz-1)*str; er != r; er -= str )
      for ( p = r; p != er; p += str )
        *p = (*p+*(p+str))/2.0;
  };
void mmx::brnops::decasteljau ( real_t *  r,
real_t *  l,
unsigned  sz,
const real_t &  t,
int  str = 1,
int  stl = 1 
)

Definition at line 79 of file loops_brnops.hpp.

  {
    real_t * er, * p;
    for ( er = r + (sz-1)*str; er != r; er -= str, l += stl )
      {
        *l = *r;
        for ( p = r; p != er; p += str )
          *p = (1.0-t)**p+t**(p+str);
      };
    *l = *r;
  };
void mmx::brnops::decasteljau ( real_t *  r,
real_t *  l,
unsigned  sz,
int  str = 1,
int  stl = 1 
)

Definition at line 104 of file loops_brnops.hpp.

  {
    real_t * er, * p;
    er = r + (sz-1)*str;
    for ( er = r + (sz-1)*str; er != r; er -= str, l += stl )
      {
        *l = *r;
        for ( p = r; p != er; p += str )
          *p = (*p+*(p+str))/2.0;
        };
    *l = *r;
    };
void mmx::brnops::diff ( real_t *  dst,
real_t const *const  src,
unsigned  sz,
int  sta = 1,
int  stout = 1 
)

Definition at line 145 of file loops_brnops.hpp.

Referenced by eenv::mdiff().

    {
      int pa = 0;
      int po = 0;
      for ( unsigned i = 0; i < sz-1; i ++, pa += sta, po += stout )
        dst[po] = (sz-1)*(src[pa+sta]-src[pa]);
    }; 
real_t mmx::brnops::eval ( real_t const *const  src,
unsigned  sz,
int  st = 1 
)

Definition at line 57 of file loops_brnops.hpp.

References mmx::sparse::copy(), and decasteljau().

  {
    real_t tmp[sz];
    std::copy( src, src + sz, tmp );
    decasteljau( tmp, sz  );
    return tmp[0];
  };
real_t mmx::brnops::eval ( real_t const *const  src,
unsigned  sz,
const real_t &  t,
int  st = 1 
)

Definition at line 47 of file loops_brnops.hpp.

References mmx::sparse::copy(), and decasteljau().

Referenced by bsearch_castel< real_t >::reach().

  {
    real_t tmp[sz];
    std::copy( src, src + sz, tmp );
    decasteljau( tmp, sz, t );
    return tmp[0];
  };
void mmx::brnops::hodograph ( real_t *  dst,
real_t const *const  src,
unsigned  sz,
int  st 
)

Definition at line 138 of file loops_brnops.hpp.

Referenced by eenv_base::hodograph().

  {
      int p = 0;
      for ( unsigned i = 0; i < sz-1; i ++, p += st ) dst[p] = src[p+st]-src[p];
    };
void mmx::brnops::lrestrict ( real_t *  data,
int  sz,
const real_t &  t,
int  st 
)

Definition at line 123 of file loops_brnops.hpp.

References decasteljau().

Referenced by eenv_base::lrestrict().

  { decasteljau(data,sz,t,st); };
bool mmx::brnops::rockwood_cut ( real_t &  t,
real_t const *  b,
unsigned  sz,
int  st = 1 
)

Definition at line 155 of file loops_brnops.hpp.

Referenced by descartes_solver< real_t, local_method >::rockwoodcuts().

    {
      for ( unsigned i = 0; i < sz-1; i ++ )
        {
          if ( b[i*st]*b[(i+1)*st] <= 0 )
            {
              real_t d = b[i*st]-b[(i+1)*st];
              t = (i*d+b[i])/(sz*d);
            return true;
            };
        };
      return false;
    };
void mmx::brnops::rrestrict ( real_t *  data,
int  sz,
const real_t &  t,
int  st 
)

Definition at line 132 of file loops_brnops.hpp.

References decasteljau().

Referenced by eenv_base::rrestrict().

  { decasteljau( data + (sz-1)*st, sz, (real_t)(real_t(1)-t), -st ); };