31 double locValue = Sacado::scalarValue(value);
32 double glbValue = 0.0;
35 Teuchos::reduceAll(*this->getComm(), Teuchos::REDUCE_SUM,
static_cast<Thyra::Ordinal
>(1), &locValue,&glbValue);
40#ifdef PANZER_HAVE_EPETRA_STACK
41 if(this->useEpetra()) {
43 this->getEpetraVector()[0] = glbValue;
49 TEUCHOS_ASSERT(this->useThyra());
51 this->getThyraVector()[0] = glbValue;
59 using Teuchos::rcp_dynamic_cast;
61 Teuchos::RCP<Thyra::MultiVectorBase<double> > dgdx_unique = getDerivative();
64 if(dgdx_unique==Teuchos::null)
67 uniqueContainer_ = linObjFactory_->buildLinearObjContainer();
68 Teuchos::rcp_dynamic_cast<ThyraObjContainer<double> >(uniqueContainer_)->set_x_th(dgdx_unique->col(0));
72 uniqueContainer_ = Teuchos::null;
80 using Teuchos::rcp_dynamic_cast;
82 Teuchos::RCP<Thyra::MultiVectorBase<double> > dgdx_unique = getDerivative();
85 if(dgdx_unique==Teuchos::null)
88 uniqueContainer_ = linObjFactory_->buildLinearObjContainer();
89 Teuchos::rcp_dynamic_cast<ThyraObjContainer<double> >(uniqueContainer_)->set_x_th(dgdx_unique->col(0));
93 uniqueContainer_ = Teuchos::null;
101 const int n = value.size();
102 const int num_deriv = this->numDeriv();
103 TEUCHOS_ASSERT(n == 0 || n == num_deriv);
109 Teuchos::reduceAll(*this->getComm(), Teuchos::REDUCE_SUM, Thyra::Ordinal(1), &value.val(), &glbValue.val());
111 Teuchos::reduceAll(*this->getComm(), Teuchos::REDUCE_SUM, Thyra::Ordinal(n), value.dx(), &glbValue.fastAccessDx(0));
116#ifdef PANZER_HAVE_EPETRA_STACK
117 if(this->useEpetra()) {
120 for (
int i=0; i<num_deriv; ++i)
121 deriv[i][0] = glbValue.dx(i);
127 TEUCHOS_ASSERT(this->useThyra());
128 Thyra::ArrayRCP< Thyra::ArrayRCP<double> > deriv = this->getThyraMultiVector();
129 for (
int i=0; i<num_deriv; ++i)
130 deriv[i][0] = glbValue.dx(i);