44 #ifndef __ODEConstraint_TimeSimOpt_hpp__
45 #define __ODEConstraint_TimeSimOpt_hpp__
47 #include "Teuchos_oblackholestream.hpp"
48 #include "Teuchos_GlobalMPISession.hpp"
58 template <
typename Real>
102 c_data[0] = un_data[0]-uo_data[0] -
timestep_*(un_data[1] + z_data[0]);
104 c_data[2] = un_data[2]-uo_data[2] -
timestep_*std::sqrt(un_data[2]);
118 Real gamma = (a*b+1.0);
120 Real rhs_0 = uo_data[0]+timestep_*z_data[0];
121 Real rhs_1 = uo_data[1];
123 un_data[0] = (1.0 * rhs_0 + b * rhs_1)/gamma;
124 un_data[1] = ( -a * rhs_0 + 1.0 * rhs_1)/gamma;
127 for(
int i=0;i<5;i++) {
129 TEUCHOS_ASSERT(un_data[2]>=0.0);
131 double residual = un_data[2]-uo_data[2] - timestep_*std::sqrt(un_data[2]);
132 un_data[2] = un_data[2] - residual / (1.0-timestep_*(0.5/std::sqrt(un_data[2])));
135 value(c,u_old,u_new,z,tol);
142 Real &tol)
override {
146 jv_data[0] = -vo_data[0];
147 jv_data[1] = -vo_data[1];
148 jv_data[2] = -vo_data[2];
155 Real &tol)
override {
160 jv_data[0] = vn_data[0] -
timestep_*vn_data[1];
165 TEUCHOS_ASSERT(un_data[2]>=0.0);
166 jv_data[2] = (1.0 -
timestep_*0.5/std::sqrt(un_data[2]))*vn_data[2];
173 Real &tol)
override {
180 Real gamma = 1.0/(a*b+1.0);
182 ijv_data[0] = gamma*(1.0 * v_data[0] + b * v_data[1]);
183 ijv_data[1] = gamma*( -a * v_data[0] + 1.0 * v_data[1]);
185 TEUCHOS_ASSERT(un_data[2]>=0.0);
186 ijv_data[2] = v_data[2]/(1.0 - timestep_*0.5/std::sqrt(un_data[2]));
193 Real &tol)
override {
206 Real &tol)
override {
210 ajv_data[0] = -v_data[0];
211 ajv_data[1] = -v_data[1];
212 ajv_data[2] = -v_data[2];
219 Real &tol)
override {
226 ajv_data[1] = v_data[1] -
timestep_*v_data[0];
228 TEUCHOS_ASSERT(un_data[2]>=0.0);
229 ajv_data[2] = (1.0 -
timestep_*0.5/std::sqrt(un_data[2]))*v_data[2];
236 Real &tol)
override {
247 Real &tol)
override {
254 Real gamma = 1.0/(a*b+1.0);
256 iajv_data[0] = gamma*(1.0 * v_data[0] - a * v_data[1]);
257 iajv_data[1] = gamma*( b * v_data[0] + 1.0 * v_data[1]);
259 TEUCHOS_ASSERT(un_data[2]>=0.0);
260 iajv_data[2] = v_data[2]/(1.0 - timestep_*0.5/std::sqrt(un_data[2]));
293 ahwv_data[2] = 0.25*
timestep_*w_data[2]*v_data[2]/std::pow(un_data[2],1.5);
std::vector< Real > & getVector(ROL::Vector< Real > &x)
ODE_Constraint(double dt, double omega)
virtual void applyJacobian_1_old(ROL::Vector< Real > &jv, const ROL::Vector< Real > &v_old, const ROL::Vector< Real > &u_old, const ROL::Vector< Real > &u_new, const ROL::Vector< Real > &z, Real &tol) override
Defines the linear algebra or vector space interface.
Defines the time dependent constraint operator interface for simulation-based optimization.
virtual void applyAdjointJacobian_1_new(ROL::Vector< Real > &ajv_new, const ROL::Vector< Real > &dualv, const ROL::Vector< Real > &u_old, const ROL::Vector< Real > &u_new, const ROL::Vector< Real > &z, Real &tol) override
virtual void applyAdjointHessian_11_old(ROL::Vector< Real > &ahwv_old, const ROL::Vector< Real > &w, const ROL::Vector< Real > &v_old, const ROL::Vector< Real > &u_old, const ROL::Vector< Real > &u_new, const ROL::Vector< Real > &z, Real &tol) override
virtual void applyAdjointJacobian_2_time(ROL::Vector< Real > &ajv, const ROL::Vector< Real > &dualv, const ROL::Vector< Real > &u_old, const ROL::Vector< Real > &u_new, const ROL::Vector< Real > &z, Real &tol) override
virtual void applyAdjointHessian_11_new(ROL::Vector< Real > &ahwv_new, const ROL::Vector< Real > &w, const ROL::Vector< Real > &v_new, const ROL::Vector< Real > &u_old, const ROL::Vector< Real > &u_new, const ROL::Vector< Real > &z, Real &tol) override
virtual void applyJacobian_2(ROL::Vector< Real > &jv, const ROL::Vector< Real > &v_new, const ROL::Vector< Real > &u_old, const ROL::Vector< Real > &u_new, const ROL::Vector< Real > &z, Real &tol) override
virtual void applyInverseJacobian_1_new(ROL::Vector< Real > &ijv, const ROL::Vector< Real > &v_new, const ROL::Vector< Real > &u_old, const ROL::Vector< Real > &u_new, const ROL::Vector< Real > &z, Real &tol) override
virtual void applyJacobian_1_new(ROL::Vector< Real > &jv, const ROL::Vector< Real > &v_new, const ROL::Vector< Real > &u_old, const ROL::Vector< Real > &u_new, const ROL::Vector< Real > &z, Real &tol) override
ROL::StdVector< Real > VectorType
const std::vector< Real > & getVector(const ROL::Vector< Real > &x)
virtual void applyAdjointJacobian_1_old(ROL::Vector< Real > &ajv_old, const ROL::Vector< Real > &dualv, const ROL::Vector< Real > &u_old, const ROL::Vector< Real > &u_new, const ROL::Vector< Real > &z, Real &tol) override
virtual void applyInverseAdjointJacobian_1_new(ROL::Vector< Real > &iajv, const ROL::Vector< Real > &v_new, const ROL::Vector< Real > &u_old, const ROL::Vector< Real > &u_new, const ROL::Vector< Real > &z, Real &tol) override
virtual void solve(ROL::Vector< Real > &c, const ROL::Vector< Real > &u_old, ROL::Vector< Real > &u_new, const ROL::Vector< Real > &z, Real &tol) override
virtual void value(ROL::Vector< Real > &c, const ROL::Vector< Real > &u_old, const ROL::Vector< Real > &u_new, const ROL::Vector< Real > &z, Real &tol) override
Evaluate the constraint operator at .