Skip to content

Phasor dynamics components modeling framework #55

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 13 commits into from
Feb 17, 2025
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