Developer documentation

bernstein_eenv_vrestrict.hpp
Go to the documentation of this file.
1 /********************************************************************
2  * This file is part of the source code of the realroot library.
3  * Author(s): J.P. Pavone, GALAAD, INRIA
4  * $Id: eenv-vrestrict.hpp,v 1.1 2005/07/11 10:03:55 jppavone Exp $
5  ********************************************************************/
6 template< class real_t >
7 static void v0restrict( real_t * rs, bernstein::eenv * em, const real_t& l )
8 {
9  int k,i,j;
10  real_t * ri, * rip;
11  // std::copy(ms,ms+em->data_size(),rs);
12  for ( k = em->m_szs[0]-1; k >= 0; k-- )
13  {
14  for ( i = 0; i < k; i ++ )
15  {
16  ri = rs + i*em->m_str[0];
17  rip = ri + em->m_str[0];
18  for ( j = 0; j < em->m_str[0]; j ++ )
19  ri[j] = (1.0-l)*ri[j]+l*rip[j];
20  };
21  };
22 };
23 
24 template< class real_t >
25 static void v0restrict( real_t * rs, real_t * ms, bernstein::eenv * em, const real_t& l )
26 {
27  int k,i,j;
28  real_t * ri, * rip;
29  std::copy(ms,ms+em->data_size(),rs);
30  v0restrict( rs, em, l );
31 };
32 
33 template<class X, class real_t >
34 static void vrestrict( bernstein::eenv * oenv, bernstein::eenv * ienv,
35  X *& dst, real_t * src, sz_t v, const X& prm )
36 {
37  sz_t nvr = ienv->m_nvr-1;
38  sz_t c = 0;
39  sz_t vrs[ienv->m_nvr];
40  sz_t szs[ienv->m_nvr];
41  std::copy(ienv->m_vrs,ienv->m_vrs + ienv->m_nvr, vrs );
42  std::copy(ienv->m_szs,ienv->m_szs + ienv->m_nvr, szs );
43  std::swap(vrs[v],vrs[0]);
44  std::swap(szs[v],szs[0]);
45  bernstein::eenv veenv( ienv->m_nvr, szs, vrs );
46  unsigned * addr = new unsigned[ ienv->data_size() ];
47  oaddress( &veenv, addr, ienv, 0, 0 );
48  X * tmp = new X[ienv->data_size()];
49  for ( unsigned c = 0; c < ienv->data_size(); tmp[addr[c]] = src[c], c ++ );
50  delete[] addr;
51  v0restrict(tmp,&veenv,prm);
52  oenv->~eenv();
53  new(oenv) bernstein::eenv( ienv->m_nvr-1, szs+1, vrs+1 );
54  dst = new X[oenv->data_size()];
55  std::copy( tmp, tmp + oenv->data_size(), dst );
56 };
57 
TMPL X
Definition: polynomial_operators.hpp:148
MP swap(const MP &P, int var_i, int var_j)
Definition: sparse_monomials.hpp:988
tensor::eenv eenv
Definition: tensor_convert.hpp:12
TMPL void copy(Polynomial &r, const Polynomial &a)
Copy of a in r.
Definition: sparse_monomials.hpp:613
const C & c
Definition: Interval_glue.hpp:45
Home