Skip to content
Merged
1 change: 1 addition & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,7 @@ add_subdirectory(src)
# Create examples and tests
enable_testing()
add_subdirectory(examples)
add_subdirectory(tests)

export(EXPORT gridkit-targets FILE ${CMAKE_CURRENT_BINARY_DIR}/GridKitTargets.cmake)

Expand Down
96 changes: 96 additions & 0 deletions src/Model/EvaluatorDynamics.hpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
#pragma once

#include <vector>
#include <ScalarTraits.hpp>
#include <LinearAlgebra/COO_Matrix.hpp>

namespace GridKit
{
namespace Model
{
/*!
* @brief Abstract class describing a model.
*
*/
template <class ScalarT, typename IdxT>
class EvaluatorDynamics
{
public:
typedef typename GridKit::ScalarTraits<ScalarT>::real_type real_type;

EvaluatorDynamics(){}
virtual ~EvaluatorDynamics(){}

virtual int allocate() = 0;
virtual int initialize() = 0;
virtual int tagDifferentiable() = 0;
virtual int evaluateResidual() = 0;
virtual int evaluateJacobian() = 0;
virtual int evaluateIntegrand() = 0;

virtual int initializeAdjoint() = 0;
virtual int evaluateAdjointResidual() = 0;
// virtual int evaluateAdjointJacobian() = 0;
virtual int evaluateAdjointIntegrand() = 0;

virtual IdxT size() = 0;
virtual IdxT nnz() = 0;

/**
* @brief Is the Jacobian defined. Used in IDA to determine wether DQ is used or not
*
* @return true
* @return false
*/
virtual bool hasJacobian() = 0;

virtual IdxT sizeQuadrature() = 0;
virtual IdxT sizeParams() = 0;
virtual void updateTime(real_type t, real_type a) = 0;
virtual void setTolerances(real_type& rtol, real_type& atol) const = 0;
virtual void setMaxSteps(IdxT& msa) const = 0;

virtual std::vector<ScalarT>& y() = 0;
virtual const std::vector<ScalarT>& y() const = 0;

virtual std::vector<ScalarT>& yp() = 0;
virtual const std::vector<ScalarT>& yp() const = 0;

virtual std::vector<bool>& tag() = 0;
virtual const std::vector<bool>& tag() const = 0;

virtual std::vector<ScalarT>& yB() = 0;
virtual const std::vector<ScalarT>& yB() const = 0;

virtual std::vector<ScalarT>& ypB() = 0;
virtual const std::vector<ScalarT>& ypB() const = 0;

virtual std::vector<ScalarT>& param() = 0;
virtual const std::vector<ScalarT>& param() const = 0;

virtual std::vector<ScalarT>& param_up() = 0;
virtual const std::vector<ScalarT>& param_up() const = 0;

virtual std::vector<ScalarT>& param_lo() = 0;
virtual const std::vector<ScalarT>& param_lo() const = 0;

virtual std::vector<ScalarT>& getResidual() = 0;
virtual const std::vector<ScalarT>& getResidual() const = 0;


virtual COO_Matrix<ScalarT, IdxT>& getJacobian() = 0;
virtual const COO_Matrix<ScalarT, IdxT>& getJacobian() const = 0;

virtual std::vector<ScalarT>& getIntegrand() = 0;
virtual const std::vector<ScalarT>& getIntegrand() const = 0;

virtual std::vector<ScalarT>& getAdjointResidual() = 0;
virtual const std::vector<ScalarT>& getAdjointResidual() const = 0;

virtual std::vector<ScalarT>& getAdjointIntegrand() = 0;
virtual const std::vector<ScalarT>& getAdjointIntegrand() const = 0;

};

} // namespace Model
} // namespace GridKit
Loading