Exemplo n.º 1
0
 void gradient_1(ROL::Vector<Real> &g, const ROL::Vector<Real> &u, const ROL::Vector<Real> &z, Real &tol) {
   Teuchos::RCP<Tpetra::MultiVector<> > gp = (Teuchos::dyn_cast<ROL::TpetraMultiVector<Real> >(g)).getVector();
   Teuchos::RCP<const Tpetra::MultiVector<> > up = (Teuchos::dyn_cast<const ROL::TpetraMultiVector<Real> >(u)).getVector();
   Teuchos::RCP<const Tpetra::MultiVector<> > zp = (Teuchos::dyn_cast<const ROL::TpetraMultiVector<Real> >(z)).getVector();
   
   data_->updateMaterialDensity (zp);
   data_->ApplyJacobian1ToVec(gp, up);
 }
Exemplo n.º 2
0
 void applyJacobian_1(ROL::Vector<Real> &jv, const ROL::Vector<Real> &v, const ROL::Vector<Real> &u,
                      const ROL::Vector<Real> &z, Real &tol) {
   Teuchos::RCP<Tpetra::MultiVector<> > jvp = (Teuchos::dyn_cast<ROL::TpetraMultiVector<Real> >(jv)).getVector();
   Teuchos::RCP<const Tpetra::MultiVector<> > vp = (Teuchos::dyn_cast<const ROL::TpetraMultiVector<Real> >(v)).getVector();
   Teuchos::RCP<const Tpetra::MultiVector<> > zp = (Teuchos::dyn_cast<const ROL::TpetraMultiVector<Real> >(z)).getVector();
   
   data_->updateMaterialDensity (zp);
   data_->ApplyJacobian1ToVec(jvp, vp);
 }
Exemplo n.º 3
0
 void value(ROL::Vector<Real> &c, const ROL::Vector<Real> &u, const ROL::Vector<Real> &z, Real &tol) {
   Teuchos::RCP<Tpetra::MultiVector<> > cp = (Teuchos::dyn_cast<ROL::TpetraMultiVector<Real> >(c)).getVector();
   Teuchos::RCP<const Tpetra::MultiVector<> > up = (Teuchos::dyn_cast<const ROL::TpetraMultiVector<Real> >(u)).getVector();
   Teuchos::RCP<const Tpetra::MultiVector<> > zp = (Teuchos::dyn_cast<const ROL::TpetraMultiVector<Real> >(z)).getVector();
   
   data_->updateMaterialDensity(zp);
   data_->ApplyJacobian1ToVec(cp, up);
   Real one(1);
   cp->update(-one, *(data_->getVecF()), one);
 }
Exemplo n.º 4
0
 void hessVec_11(ROL::Vector<Real> &hv,
           const ROL::Vector<Real> &v,
           const ROL::Vector<Real> &u,
           const ROL::Vector<Real> &z,
                 Real &tol) {
   if ( useFU_ ) {
     hv.zero();
   }
   else {
     Teuchos::RCP<Tpetra::MultiVector<> > hvp
       = (Teuchos::dyn_cast<ROL::TpetraMultiVector<Real> >(hv)).getVector();
     Teuchos::RCP<const Tpetra::MultiVector<> > vp
       = (Teuchos::dyn_cast<const ROL::TpetraMultiVector<Real> >(v)).getVector();
     data_->ApplyJacobian1ToVec(hvp, vp);
     Real two(2);
     hvp->scale(two*scale_);
   }
 }
Exemplo n.º 5
0
 void gradient_1(ROL::Vector<Real> &g,
           const ROL::Vector<Real> &u,
           const ROL::Vector<Real> &z,
                 Real &tol) {
   Teuchos::RCP<Tpetra::MultiVector<> > gp
     = (Teuchos::dyn_cast<ROL::TpetraMultiVector<Real> >(g)).getVector();
   if ( useFU_ ) {
     Tpetra::deep_copy(*gp, *(data_->getVecF()));
   }
   else {
     Teuchos::RCP<const Tpetra::MultiVector<> > up
       = (Teuchos::dyn_cast<const ROL::TpetraMultiVector<Real> >(u)).getVector();
     data_->ApplyJacobian1ToVec(gp, up);
     Real two(2);
     gp->scale(two);
   }
   gp->scale(scale_);
 }
Exemplo n.º 6
0
  Real value(const ROL::Vector<Real> &u, const ROL::Vector<Real> &z, Real &tol) {
    Teuchos::RCP<const Tpetra::MultiVector<> > up = (Teuchos::dyn_cast<const ROL::TpetraMultiVector<Real> >(u)).getVector();
    Teuchos::RCP<const Tpetra::MultiVector<> > zp = (Teuchos::dyn_cast<const ROL::TpetraMultiVector<Real> >(z)).getVector();
    
    data_->updateMaterialDensity (zp);
    
    // K u
    Teuchos::RCP<Tpetra::MultiVector<> > matvecp = Teuchos::rcp(new Tpetra::MultiVector<>(*up, Teuchos::Copy));
    data_->ApplyJacobian1ToVec(matvecp, up);
    
    Teuchos::Array<Real> dotvalU(1, 0);
    Teuchos::Array<Real> dotvalZ(1, 0);
    //u K u
    up->dot(*matvecp, dotvalU);
    //z z
    zp->dot(*zp, dotvalZ);

    return(0.5*dotvalU[0] + 0.5*alpha_*dotvalZ[0]);
  }
Exemplo n.º 7
0
    Real value(const ROL::Vector<Real> &u,
               const ROL::Vector<Real> &z,
               Real &tol) {
        Teuchos::RCP<const Tpetra::MultiVector<> > up
            = (Teuchos::dyn_cast<const ROL::TpetraMultiVector<Real> >(u)).getVector();

        Teuchos::Array<Real> dotvalU(1, 0);
        if ( useFU_ ) {
            data_->updateF(ROL::Objective_SimOpt<Real>::getParameter());
            up->dot(*(data_->getVecF()), dotvalU.view(0,1));
        }
        else {
            Teuchos::RCP<Tpetra::MultiVector<> > matvecp
                = Teuchos::rcp(new Tpetra::MultiVector<>(*up, Teuchos::Copy));
            data_->ApplyJacobian1ToVec(matvecp, up);
            up->dot(*matvecp, dotvalU.view(0,1));
        }

        return scale_*dotvalU[0];
    }