diff --git a/src/observers/VertexCFD_Compute_ErrorNorms_impl.hpp b/src/observers/VertexCFD_Compute_ErrorNorms_impl.hpp index 1fb0ac7..6963f84 100644 --- a/src/observers/VertexCFD_Compute_ErrorNorms_impl.hpp +++ b/src/observers/VertexCFD_Compute_ErrorNorms_impl.hpp @@ -110,6 +110,7 @@ void ErrorNorms::ComputeNorms( in_args.ghostedContainer_ = _lof->buildGhostedLinearObjContainer(); in_args.evaluate_transient_terms = false; in_args.time = working_state->getTime(); + in_args.step_size = working_state->getTimeStep(); _lof->initializeGhostedContainer(panzer::LinearObjContainer::X, *(in_args.ghostedContainer_)); diff --git a/src/observers/VertexCFD_Compute_Volume_impl.hpp b/src/observers/VertexCFD_Compute_Volume_impl.hpp index dac281a..b51e627 100644 --- a/src/observers/VertexCFD_Compute_Volume_impl.hpp +++ b/src/observers/VertexCFD_Compute_Volume_impl.hpp @@ -66,6 +66,8 @@ void Volume::ComputeVol() in_args.container_ = _lof->buildLinearObjContainer(); in_args.ghostedContainer_ = _lof->buildGhostedLinearObjContainer(); in_args.evaluate_transient_terms = false; + in_args.time = 0.0; + in_args.step_size = 0.0; _lof->initializeGhostedContainer(panzer::LinearObjContainer::X | panzer::LinearObjContainer::F diff --git a/src/observers/VertexCFD_TempusObserver_ResponseOutput_impl.hpp b/src/observers/VertexCFD_TempusObserver_ResponseOutput_impl.hpp index 81053a9..566fcd7 100644 --- a/src/observers/VertexCFD_TempusObserver_ResponseOutput_impl.hpp +++ b/src/observers/VertexCFD_TempusObserver_ResponseOutput_impl.hpp @@ -115,7 +115,8 @@ void ResponseOutput::outputResponses( // Evaluate responses. const auto state = integrator.getSolutionHistory()->getCurrentState(); - _response_manager->evaluateResponses(state->getX(), state->getXDot()); + _response_manager->evaluateResponses(state->getX(), state->getXDot(), + state->getTime(), state->getTimeStep()); // Outupt the integrated values. _ostream << "Scalar Responses:\n"; diff --git a/src/observers/VertexCFD_TempusTimeStepControl_GlobalCFL_impl.hpp b/src/observers/VertexCFD_TempusTimeStepControl_GlobalCFL_impl.hpp index d26a7bb..a5da789 100644 --- a/src/observers/VertexCFD_TempusTimeStepControl_GlobalCFL_impl.hpp +++ b/src/observers/VertexCFD_TempusTimeStepControl_GlobalCFL_impl.hpp @@ -82,7 +82,9 @@ void GlobalCFL::setNextTimeStep( // Get minimum time step that ensures CFL <= 1 _response_manager.evaluateResponses(working_state->getX(), - working_state->getXDot()); + working_state->getXDot(), + working_state->getTime(), + working_state->getTimeStep()); const double dt_cfl1 = _response_manager.value(); // Compute linear weight based on input parameters diff --git a/src/observers/VertexCFD_TempusTimeStepControl_GlobalTimeStep_impl.hpp b/src/observers/VertexCFD_TempusTimeStepControl_GlobalTimeStep_impl.hpp index 0751a79..88570eb 100644 --- a/src/observers/VertexCFD_TempusTimeStepControl_GlobalTimeStep_impl.hpp +++ b/src/observers/VertexCFD_TempusTimeStepControl_GlobalTimeStep_impl.hpp @@ -43,7 +43,9 @@ void GlobalTimeStep::setNextTimeStep( // Get minimum time step that ensures CFL <= 1 _response_manager.evaluateResponses(working_state->getX(), - working_state->getXDot()); + working_state->getXDot(), + working_state->getTime(), + working_state->getTimeStep()); const double dt_cfl1 = _response_manager.value(); // Get time step index (1-based) and compute linear weight diff --git a/src/responses/VertexCFD_ResponseManager.cpp b/src/responses/VertexCFD_ResponseManager.cpp index 14669ca..dcbd7c2 100644 --- a/src/responses/VertexCFD_ResponseManager.cpp +++ b/src/responses/VertexCFD_ResponseManager.cpp @@ -210,7 +210,9 @@ void ResponseManager::deactivateAll() //---------------------------------------------------------------------------// void ResponseManager::evaluateResponses( const Teuchos::RCP>& x, - const Teuchos::RCP>& x_dot) + const Teuchos::RCP>& x_dot, + const double t, + const double dt) { const int num_active = std::count(_is_active.begin(), _is_active.end(), true); @@ -224,6 +226,8 @@ void ResponseManager::evaluateResponses( auto in_args = model_evaluator->createInArgs(); auto out_args = model_evaluator->createOutArgs(); + in_args.set_t(t); + in_args.set_step_size(dt); in_args.set_x(x); in_args.set_x_dot(x_dot); diff --git a/src/responses/VertexCFD_ResponseManager.hpp b/src/responses/VertexCFD_ResponseManager.hpp index 81ca66d..ba346b8 100644 --- a/src/responses/VertexCFD_ResponseManager.hpp +++ b/src/responses/VertexCFD_ResponseManager.hpp @@ -54,7 +54,9 @@ class ResponseManager void deactivateAll(); void evaluateResponses(const Teuchos::RCP>& x, - const Teuchos::RCP>& x_dot); + const Teuchos::RCP>& x_dot, + const double t, + const double dt); int numResponses() const; int globalIndex(const int index = 0) const; diff --git a/src/responses/unit_test/tstResponseManager.cpp b/src/responses/unit_test/tstResponseManager.cpp index 19843d7..4b88998 100644 --- a/src/responses/unit_test/tstResponseManager.cpp +++ b/src/responses/unit_test/tstResponseManager.cpp @@ -211,7 +211,7 @@ void testResponseManager(const int basis_order) testScalarParameters(true, physics_manager); auto [x, x_dot] = helper.getSolutionVectors(); - response_manager.evaluateResponses(x, x_dot); + response_manager.evaluateResponses(x, x_dot, 0.0, 0.0); EXPECT_DOUBLE_EQ(4.0, response_manager.value(0)); EXPECT_DOUBLE_EQ(6.0, response_manager.value(1)); @@ -282,8 +282,8 @@ TEST(MultipleResponseManagers, NameToIndexBug) EXPECT_EQ(1, v_index); auto [x, x_dot] = helper.getSolutionVectors(); - rm1.evaluateResponses(x, x_dot); - rm2.evaluateResponses(x, x_dot); + rm1.evaluateResponses(x, x_dot, 0.0, 0.0); + rm2.evaluateResponses(x, x_dot, 0.0, 0.0); double u_integral = std::numeric_limits::quiet_NaN(); EXPECT_NO_THROW(u_integral = rm1.value("u integral")); @@ -322,8 +322,8 @@ TEST(MultipleResponseManagers, NameLookupBug) // Evaluate both response managers, which will also set values in the // parameter library. auto [x, x_dot] = helper.getSolutionVectors(); - rm1.evaluateResponses(x, x_dot); - rm2.evaluateResponses(x, x_dot); + rm1.evaluateResponses(x, x_dot, 0.0, 0.0); + rm2.evaluateResponses(x, x_dot, 0.0, 0.0); // With the bug, the "u_integral" parameter gets overwritten and // "v_integral" is never set. diff --git a/src/utils/CMakeLists.txt b/src/utils/CMakeLists.txt index 8868550..03ea01f 100644 --- a/src/utils/CMakeLists.txt +++ b/src/utils/CMakeLists.txt @@ -28,6 +28,7 @@ add_library(Utils ${UTILS_SOURCES}) target_link_libraries(Utils PUBLIC MPI::MPI_CXX Kokkos::kokkos + Phalanx::phalanx ) target_include_directories(Utils