void Stokhos::StieltjesPCEBasis<ordinal_type, value_type>:: integrateBasisSquaredProj( ordinal_type k, const Teuchos::Array<value_type>& a, const Teuchos::Array<value_type>& b, const Teuchos::Array<value_type>& weights, const Teuchos::Array<value_type>& points, Teuchos::Array< Teuchos::Array<value_type> >& phi_vals, value_type& val1, value_type& val2) const { ordinal_type nqp = weights.size(); ordinal_type npc = basis->size(); const Teuchos::Array<value_type>& norms = basis->norm_squared(); // Compute PC expansion of phi_k in original basis evaluateRecurrence(k, a, b, points, phi_vals); for (ordinal_type j=0; j<npc; j++) { value_type c = value_type(0); for (ordinal_type i=0; i<nqp; i++) c += weights[i]*phi_vals[i][k]*basis_values[i][j]; c /= norms[j]; phi_pce_coeffs[j] = c; } // Compute \int phi_k^2(\eta) d\eta val1 = value_type(0); for (ordinal_type j=0; j<npc; j++) val1 += phi_pce_coeffs[j]*phi_pce_coeffs[j]*norms[j]; // Compute \int \eta phi_k^2(\eta) d\eta val2 = value_type(0); for (typename Cijk_type::k_iterator k_it = Cijk->k_begin(); k_it != Cijk->k_end(); ++k_it) { ordinal_type l = index(k_it); for (typename Cijk_type::kj_iterator j_it = Cijk->j_begin(k_it); j_it != Cijk->j_end(k_it); ++j_it) { ordinal_type j = index(j_it); for (typename Cijk_type::kji_iterator i_it = Cijk->i_begin(j_it); i_it != Cijk->i_end(j_it); ++i_it) { ordinal_type i = index(i_it); value_type c = value(i_it); val2 += phi_pce_coeffs[i]*phi_pce_coeffs[j]*(*pce)[l]*c; } } } }
void Stokhos::StieltjesPCEBasis<ordinal_type, value_type>:: integrateBasisSquaredProj( ordinal_type k, const Teuchos::Array<value_type>& a, const Teuchos::Array<value_type>& b, const Teuchos::Array<value_type>& weights, const Teuchos::Array<value_type>& points, Teuchos::Array< Teuchos::Array<value_type> >& phi_vals, value_type& val1, value_type& val2) const { ordinal_type nqp = weights.size(); ordinal_type npc = basis->size(); const Teuchos::Array<value_type>& norms = basis->norm_squared(); // Compute PC expansion of phi_k in original basis evaluateRecurrence(k, a, b, points, phi_vals); for (ordinal_type j=0; j<npc; j++) { value_type c = value_type(0); for (ordinal_type i=0; i<nqp; i++) c += weights[i]*phi_vals[i][k]*basis_values[i][j]; c /= norms[j]; phi_pce_coeffs[j] = c; } // Compute \int phi_k^2(\eta) d\eta val1 = value_type(0); for (ordinal_type j=0; j<npc; j++) val1 += phi_pce_coeffs[j]*phi_pce_coeffs[j]*norms[j]; // Compute \int \eta phi_k^2(\eta) d\eta val2 = value_type(0); for (ordinal_type l=0; l<npc; l++) { int nj = Cijk->num_j(l); const Teuchos::Array<ordinal_type>& j_indices = Cijk->Jindices(l); for (ordinal_type jj=0; jj<nj; jj++) { ordinal_type j = j_indices[jj]; const Teuchos::Array<ordinal_type>& i_indices = Cijk->Iindices(l,jj); const Teuchos::Array<value_type>& c_values = Cijk->values(l,jj); ordinal_type ni = i_indices.size(); for (ordinal_type ii=0; ii<ni; ii++) { ordinal_type i = i_indices[ii]; val2 += phi_pce_coeffs[l]*phi_pce_coeffs[i]*(*pce)[j]*c_values[ii]; } } } }
value_type Stokhos::DiscretizedStieltjesBasis<ordinal_type,value_type>:: expectedValue_J_nsquared(const ordinal_type& order, const Teuchos::Array<value_type>& alpha, const Teuchos::Array<value_type>& beta) const { //Impliments a gaussian quadrature routineroutine to evaluate the integral, // \int_-c^c J_n(x)^2w(x)dx. This is needed to compute the recurrance coefficients. value_type integral = 0; for(ordinal_type quadIdx = 0; quadIdx < static_cast<ordinal_type>(quad_points.size()); quadIdx++){ value_type x = (rightEndPt_ - leftEndPt_)*.5*quad_points[quadIdx] + (rightEndPt_ + leftEndPt_)*.5; value_type val = evaluateRecurrence(x,order,alpha,beta); integral += val*val*evaluateWeight(x)*quad_weights[quadIdx]; } return integral*(rightEndPt_ - leftEndPt_); }
void Stokhos::StieltjesPCEBasis<ordinal_type, value_type>:: integrateBasisSquared(ordinal_type k, const Teuchos::Array<value_type>& a, const Teuchos::Array<value_type>& b, const Teuchos::Array<value_type>& weights, const Teuchos::Array<value_type>& points, Teuchos::Array< Teuchos::Array<value_type> >& phi_vals, value_type& val1, value_type& val2) const { evaluateRecurrence(k, a, b, points, phi_vals); ordinal_type nqp = weights.size(); val1 = value_type(0); val2 = value_type(0); for (ordinal_type i=0; i<nqp; i++) { val1 += weights[i]*phi_vals[i][k]*phi_vals[i][k]; val2 += weights[i]*phi_vals[i][k]*phi_vals[i][k]*points[i]; } }