Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion GridKit/LinearAlgebra/Vector/Vector.cpp
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
#include <cassert>
#include <cstring>

#include <GridKit/AutomaticDifferentiation/DependencyTracking/Variable.hpp>
#include <GridKit/LinearAlgebra/Vector/Vector.hpp>
#include <GridKit/Utilities/Logger/Logger.hpp>

Expand Down Expand Up @@ -1089,9 +1090,11 @@ namespace GridKit
std::fill(gpu_updated_, gpu_updated_ + k_, is_updated);
}

// template class Vector<double, long int>;
template class Vector<double, long int>;
template class Vector<double, size_t>;
template class Vector<double, int>;
template class Vector<DependencyTracking::Variable, long int>;
template class Vector<DependencyTracking::Variable, size_t>;

} // namespace LinearAlgebra
} // namespace GridKit
175 changes: 146 additions & 29 deletions GridKit/Model/Evaluator.hpp
Original file line number Diff line number Diff line change
@@ -1,17 +1,20 @@
#pragma once

#include <vector>
#include <cassert>

#include <GridKit/Constants.hpp>
#include <GridKit/LinearAlgebra/SparseMatrix/CooMatrix.hpp>
#include <GridKit/LinearAlgebra/SparseMatrix/CsrMatrix.hpp>
#include <GridKit/LinearAlgebra/Vector/Vector.hpp>
#include <GridKit/Model/VariableMonitor.hpp>
#include <GridKit/ScalarTraits.hpp>

namespace GridKit
{
namespace Model
{
namespace memory = GridKit::memory;

/*!
* @brief Abstract class describing a model.
*
Expand All @@ -25,6 +28,7 @@ namespace GridKit
using RealT = typename GridKit::ScalarTraits<ScalarT>::RealT;
using CsrMatrixT = GridKit::LinearAlgebra::CsrMatrix<RealT, IdxT>;
using CooMatrixT = GridKit::LinearAlgebra::CooMatrix<RealT, IdxT>;
using VectorT = GridKit::LinearAlgebra::Vector<ScalarT, IdxT>;

Evaluator()
{
Expand Down Expand Up @@ -122,55 +126,168 @@ namespace GridKit
/**
* @brief Get the absolute tolerance for each variable in the model
*
* @return a reference to the absolute tolerance vector.
* @return the absolute tolerance vector.
*
* @pre `setAbsoluteTolerance` must have been called first.
*/
virtual std::vector<ScalarT>& absoluteTolerance() = 0;
virtual VectorT& absoluteTolerance()
{
return abs_tol_;
}

/**
* @brief Get the absolute tolerance for each variable in the model
*
* @return a const reference to the absolute tolerance vector.
* @return the absolute tolerance vector.
*
* @pre `setAbsoluteTolerance` must have been called first.
*/
virtual const std::vector<ScalarT>& absoluteTolerance() const = 0;
virtual const VectorT& absoluteTolerance() const
{
return abs_tol_;
}

virtual std::vector<ScalarT>& y() = 0;
virtual const std::vector<ScalarT>& y() const = 0;
virtual VectorT& y()
{
return y_;
}

virtual std::vector<ScalarT>& yp() = 0;
virtual const std::vector<ScalarT>& yp() const = 0;
virtual const VectorT& y() const
{
return y_;
}

virtual std::vector<bool>& tag() = 0;
virtual const std::vector<bool>& tag() const = 0;
virtual VectorT& yp()
{
return yp_;
}

virtual std::vector<ScalarT>& yB() = 0;
virtual const std::vector<ScalarT>& yB() const = 0;
virtual const VectorT& yp() const
{
return yp_;
}

virtual std::vector<ScalarT>& ypB() = 0;
virtual const std::vector<ScalarT>& ypB() const = 0;
/**
* @brief Get the differential/algebraic tag for each variable.
*
* Entries are scalar values for direct transfer to solver vectors.
*/
virtual VectorT& tag()
{
return tag_;
}

virtual std::vector<ScalarT>& param() = 0;
virtual const std::vector<ScalarT>& param() const = 0;
/**
* @brief Get the differential/algebraic tag for each variable.
*/
virtual const VectorT& tag() const
{
return tag_;
}

virtual VectorT& yB() = 0;
virtual const VectorT& yB() const = 0;

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

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

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

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

virtual VectorT& getResidual()
{
return f_;
}

virtual std::vector<ScalarT>& getAdjointResidual() = 0;
virtual const std::vector<ScalarT>& getAdjointResidual() const = 0;
virtual const VectorT& getResidual() const
{
return f_;
}

virtual VectorT& getIntegrand() = 0;
virtual const VectorT& getIntegrand() const = 0;

virtual VectorT& getAdjointResidual() = 0;
virtual const VectorT& getAdjointResidual() const = 0;

virtual VectorT& getAdjointIntegrand() = 0;
virtual const VectorT& getAdjointIntegrand() const = 0;

/**
* @brief Bind this evaluator's state and residual vectors.
*/
virtual void bind(VectorT& y, VectorT& yp, VectorT& f, VectorT& tag, VectorT& abs_tol, IdxT offset)
{
const IdxT n = size();
assert(!allocated_);
assert(offset + n <= y.getSize());
assert(offset + n <= yp.getSize());
assert(offset + n <= f.getSize());
assert(offset + n <= tag.getSize());
assert(offset + n <= abs_tol.getSize());

y_.resize(n);
y_.setData(y.getData() + offset);

yp_.resize(n);
yp_.setData(yp.getData() + offset);

f_.resize(n);
f_.setData(f.getData() + offset);

tag_.resize(n);
tag_.setData(tag.getData() + offset);

abs_tol_.resize(n);
abs_tol_.setData(abs_tol.getData() + offset);

offset_ = offset;
allocated_ = true;
}

protected:
/**
* @brief Allocate this evaluator's state and residual vectors.
*/
void allocateVectors(IdxT n)
{
y_.resize(n);
y_.allocate(memory::HOST);
y_.setToZero(memory::HOST);

yp_.resize(n);
yp_.allocate(memory::HOST);
yp_.setToZero(memory::HOST);

f_.resize(n);
f_.allocate(memory::HOST);
f_.setToZero(memory::HOST);

tag_.resize(n);
tag_.allocate(memory::HOST);
tag_.setToZero(memory::HOST);

abs_tol_.resize(n);
abs_tol_.allocate(memory::HOST);
abs_tol_.setToZero(memory::HOST);

offset_ = 0;
allocated_ = true;
}

virtual std::vector<ScalarT>& getAdjointIntegrand() = 0;
virtual const std::vector<ScalarT>& getAdjointIntegrand() const = 0;
VectorT y_;
VectorT yp_;
VectorT f_;
VectorT tag_;
VectorT abs_tol_;
IdxT offset_{0};
bool allocated_{false};
};

} // namespace Model
Expand Down
32 changes: 16 additions & 16 deletions GridKit/Model/PhasorDynamics/Branch/BranchEnzyme.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,12 +42,12 @@ namespace GridKit
GridKit::Enzyme::Sparse::DhDwb<GridKit::PhasorDynamics::Branch<ScalarT, IdxT>,
GridKit::Enzyme::Sparse::MemberFunctions::BusResidual11>::eval(this,
static_cast<size_t>(bus1_->size()),
static_cast<size_t>((bus1_->y()).size()),
static_cast<size_t>((bus1_->y()).getSize()),
(bus1_->getResidualIndices()).data(),
(bus1_->getVariableIndices()).data(),
y_.data(),
yp_.data(),
(bus1_->y()).data(),
y_.getData(),
yp_.getData(),
bus1_->y().getData(),
J_rows_buffer_,
J_cols_buffer_,
J_vals_buffer_,
Expand All @@ -57,12 +57,12 @@ namespace GridKit
GridKit::Enzyme::Sparse::DhDwb<GridKit::PhasorDynamics::Branch<ScalarT, IdxT>,
GridKit::Enzyme::Sparse::MemberFunctions::BusResidual22>::eval(this,
static_cast<size_t>(bus2_->size()),
static_cast<size_t>((bus2_->y()).size()),
static_cast<size_t>((bus2_->y()).getSize()),
(bus2_->getResidualIndices()).data(),
(bus2_->getVariableIndices()).data(),
y_.data(),
yp_.data(),
(bus2_->y()).data(),
y_.getData(),
yp_.getData(),
bus2_->y().getData(),
J_rows_buffer_,
J_cols_buffer_,
J_vals_buffer_,
Expand All @@ -72,12 +72,12 @@ namespace GridKit
GridKit::Enzyme::Sparse::DhDwb<GridKit::PhasorDynamics::Branch<ScalarT, IdxT>,
GridKit::Enzyme::Sparse::MemberFunctions::BusResidual12>::eval(this,
static_cast<size_t>(bus1_->size()),
static_cast<size_t>((bus2_->y()).size()),
static_cast<size_t>((bus2_->y()).getSize()),
(bus1_->getResidualIndices()).data(),
(bus2_->getVariableIndices()).data(),
y_.data(),
yp_.data(),
(bus2_->y()).data(),
y_.getData(),
yp_.getData(),
bus2_->y().getData(),
J_rows_buffer_,
J_cols_buffer_,
J_vals_buffer_,
Expand All @@ -87,12 +87,12 @@ namespace GridKit
GridKit::Enzyme::Sparse::DhDwb<GridKit::PhasorDynamics::Branch<ScalarT, IdxT>,
GridKit::Enzyme::Sparse::MemberFunctions::BusResidual21>::eval(this,
static_cast<size_t>(bus2_->size()),
static_cast<size_t>((bus1_->y()).size()),
static_cast<size_t>((bus1_->y()).getSize()),
(bus2_->getResidualIndices()).data(),
(bus1_->getVariableIndices()).data(),
y_.data(),
yp_.data(),
(bus1_->y()).data(),
y_.getData(),
yp_.getData(),
bus1_->y().getData(),
J_rows_buffer_,
J_cols_buffer_,
J_vals_buffer_,
Expand Down
15 changes: 15 additions & 0 deletions GridKit/Model/PhasorDynamics/Branch/BranchImpl.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,21 @@ namespace GridKit
template <typename scalar_type, typename index_type>
int Branch<scalar_type, index_type>::allocate()
{
if (!this->allocated_)
{
this->allocateVectors(this->size_);
}
auto size = static_cast<std::size_t>(size_);

assert(y_.getSize() == size);
assert(yp_.getSize() == size);
assert(f_.getSize() == size);
assert(this->tag_.getSize() == size);
assert(this->abs_tol_.getSize() == size);

variable_indices_.resize(size);
residual_indices_.resize(size);

wb_.resize(2);
h_.resize(2);

Expand Down
16 changes: 8 additions & 8 deletions GridKit/Model/PhasorDynamics/Bus/Bus.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -60,42 +60,42 @@ namespace GridKit

virtual ScalarT& Vr() override final
{
return y_[0];
return y_.getData()[0];
}

virtual const ScalarT& Vr() const override final
{
return y_[0];
return y_.getData()[0];
}

virtual ScalarT& Vi() override final
{
return y_[1];
return y_.getData()[1];
}

virtual const ScalarT& Vi() const override final
{
return y_[1];
return y_.getData()[1];
}

virtual ScalarT& Ir() override final
{
return f_[0];
return f_.getData()[0];
}

virtual const ScalarT& Ir() const override final
{
return f_[0];
return f_.getData()[0];
}

virtual ScalarT& Ii() override final
{
return f_[1];
return f_.getData()[1];
}

virtual const ScalarT& Ii() const override final
{
return f_[1];
return f_.getData()[1];
}

protected:
Expand Down
Loading
Loading