bool Albany::KLResponseFunction:: computeKL(const Stokhos::EpetraVectorOrthogPoly& sg_u, const int NumKL, Teuchos::Array<double>& evals, Teuchos::RCP<Epetra_MultiVector>& evecs) { Teuchos::RCP<const EpetraExt::BlockVector> X_ov = sg_u.getBlockVector(); //App_sg->get_sg_model()->import_solution( *(sg_u->getBlockVector()) ); //Teuchos::RCP<const EpetraExt::BlockVector> cX_ov = X_ov; // pceKL is object with member functions that explicitly call anasazi Stokhos::PCEAnasaziKL pceKL(X_ov, *(sg_u.basis()), NumKL); // Set parameters for anasazi Teuchos::ParameterList& anasazi_params = responseParams.sublist("Anasazi"); Teuchos::ParameterList default_params = pceKL.getDefaultParams(); anasazi_params.setParametersNotAlreadySet(default_params); // Self explanatory bool result = pceKL.computeKL(anasazi_params); // Retrieve evals/evectors into return argument slots... evals = pceKL.getEigenvalues(); evecs = pceKL.getEigenvectors(); return result; }
/** Copy to an adaptive vector from a set of blocked vectors */ void Stokhos::AdaptivityManager::copyToAdaptiveVector(const Stokhos::EpetraVectorOrthogPoly & x_sg,Epetra_Vector & x) const { Teuchos::RCP<const EpetraExt::BlockVector> x_sg_bv = x_sg.getBlockVector(); // copy from adapted vector to deterministic for(std::size_t i=0;i<sg_basis_row_dof_.size();i++) { int P_i = getRowStochasticBasisSize(i); int localId = rowMap_->LID(getGlobalRowId(i,0)); for(int j=0;j<P_i;j++,localId++) { int blk = sg_master_basis_->index(sg_basis_row_dof_[i]->term(j)); x[localId] = x_sg_bv->GetBlock(blk)->operator[](i); } } }
/** Copy from an adaptive vector to a set of blocked vectors */ void Stokhos::AdaptivityManager::copyFromAdaptiveVector(const Epetra_Vector & x,Stokhos::EpetraVectorOrthogPoly & x_sg) const { int numBlocks = x_sg.size(); Teuchos::RCP<EpetraExt::BlockVector> x_sg_bv = x_sg.getBlockVector(); // zero out determinstic vectors for(int blk=0;blk<numBlocks;blk++) x_sg_bv->GetBlock(blk)->PutScalar(0.0); // copy from adapted vector to deterministic for(std::size_t i=0;i<sg_basis_row_dof_.size();i++) { int P_i = getRowStochasticBasisSize(i); int localId = rowMap_->LID(getGlobalRowId(i,0)); for(int j=0;j<P_i;j++,localId++) { int blk = sg_master_basis_->index(sg_basis_row_dof_[i]->term(j)); x_sg_bv->GetBlock(blk)->operator[](i) = x[localId]; } } }