void Albany::SolutionAverageResponseFunction:: evaluateTangent(const double alpha, const double beta, const double current_time, bool sum_derivs, const Epetra_Vector* xdot, const Epetra_Vector& x, const Teuchos::Array<ParamVec>& p, ParamVec* deriv_p, const Epetra_MultiVector* Vxdot, const Epetra_MultiVector* Vx, const Epetra_MultiVector* Vp, Epetra_Vector* g, Epetra_MultiVector* gx, Epetra_MultiVector* gp) { // Evaluate response g if (g != NULL) x.MeanValue(&(*g)[0]); // Evaluate tangent of g = dg/dx*Vx + dg/dxdot*Vxdot + dg/dp*Vp // If Vx == NULL, Vx is the identity if (gx != NULL) { if (Vx != NULL) for (int j=0; j<Vx->NumVectors(); j++) (*Vx)(j)->MeanValue(&(*gx)[j][0]); else gx->PutScalar(1.0/x.GlobalLength()); gx->Scale(alpha); } if (gp != NULL) gp->PutScalar(0.0); }
void Albany::SolutionAverageResponseFunction:: evaluateGradient(const double current_time, const Epetra_Vector* xdot, const Epetra_Vector& x, const Teuchos::Array<ParamVec>& p, ParamVec* deriv_p, Epetra_Vector* g, Epetra_MultiVector* dg_dx, Epetra_MultiVector* dg_dxdot, Epetra_MultiVector* dg_dp) { // Evaluate response g if (g != NULL) x.MeanValue(&(*g)[0]); // Evaluate dg/dx if (dg_dx != NULL) dg_dx->PutScalar(1.0 / x.GlobalLength()); // Evaluate dg/dxdot if (dg_dxdot != NULL) dg_dxdot->PutScalar(0.0); // Evaluate dg/dp if (dg_dp != NULL) dg_dp->PutScalar(0.0); }
void Albany::SolutionAverageResponseFunction:: evaluateResponse(const double current_time, const Epetra_Vector* xdot, const Epetra_Vector& x, const Teuchos::Array<ParamVec>& p, Epetra_Vector& g) { x.MeanValue(&g[0]); }