Пример #1
0
value_type
Stokhos::PseudoSpectralOrthogPolyExpansion<ordinal_type, value_type, point_compare_type, node_type>::
fast_compute_times_coeff(ordinal_type i, const ExprT1& a, const ExprT2& b) const
{
  typename Cijk_type::i_iterator i_it = this->Cijk->find_i(i);
#ifdef STOKHOS_DEBUG
  TEUCHOS_TEST_FOR_EXCEPTION(i_it == this->Cijk->i_end(), std::logic_error,
		     "Stokhos::PseudoSpectralOrthogPolyExpansion::fast_ompute_times_coeff()" 
		     << ":  Index " << i << " is out of range [0," 
		     << this->Cijk->num_i() << ")!");
#endif
  value_type cc = value_type(0);
  value_type aa, bb, cijk;
  ordinal_type j, k;
  for (typename Cijk_type::ik_iterator k_it = this->Cijk->k_begin(i_it); 
       k_it != this->Cijk->k_end(i_it); ++k_it) {
    k = index(k_it);
    if (k == 0)
      aa = a.val();
    else
      aa = a.higher_order_coeff(k);
    for (typename Cijk_type::ikj_iterator j_it = this->Cijk->j_begin(k_it);
	 j_it != this->Cijk->j_end(k_it); ++j_it) {
      j = index(j_it);
      cijk = value(j_it);
      if (j == 0)
	bb = b.val();
      else
	bb = b.higher_order_coeff(j);
      cc += cijk*aa*bb;
    }
  }

  return cc / this->basis->norm_squared(i);
}
Пример #2
0
float
Stokhos::QuadOrthogPolyExpansion<int, float, Stokhos::CUDAStorage<int,float> >::
fast_compute_times_coeff(int k, const ExprT1& a, const ExprT2& b) const
{
  float cc = float(0);
  float aa, bb, cijk;
  int i,j;
  typename Cijk_type::k_iterator k_it = Cijk->find_k(k);
  for (typename Cijk_type::kj_iterator j_it = Cijk->j_begin(k_it); 
       j_it != Cijk->j_end(k_it); ++j_it) {
    j = index(j_it);
    if (j == 0)
      bb = b.val();
    else
      bb = b.fast_higher_order_coeff(j);
    for (typename Cijk_type::kji_iterator i_it = Cijk->i_begin(j_it);
	 i_it != Cijk->i_end(j_it); ++i_it) {
      i = index(i_it);
      cijk = value(i_it);
      if (i == 0)
	aa = a.val();
      else
	aa = a.fast_higher_order_coeff(i);
      cc += cijk*aa*bb;
    }
  }
  return cc / basis->norm_squared(k);
}