Skip to content
Merged
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
1 change: 1 addition & 0 deletions .github/workflows/spack_default_build.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,7 @@ jobs:
spack_spec:
- gridkit@develop +enzyme
^enzyme@0.0.173
^sundials@develop
Comment thread
pelesh marked this conversation as resolved.

steps:
- name: Add LLVM
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -138,5 +138,10 @@ int main()
std::cout << "The two results differ beyond solver tolerance!\n";
}

delete idas;
delete bus;
delete gen;
delete model;

return retval;
}
60 changes: 30 additions & 30 deletions examples/PowerElectronics/RLCircuit/RLCircuit.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -14,15 +14,15 @@
#include <Solver/Dynamic/DynamicSolver.hpp>
#include <Solver/Dynamic/Ida.hpp>

int main(int argc, char const* argv[])
int main(int /* argc */, char const** /* argv */)
{
double abs_tol = 1.0e-8;
double rel_tol = 1.0e-8;
bool use_jac = true;

// TODO:setup as named parameters
// Create circuit model
auto* sysmodel = new GridKit::PowerElectronicsModel<double, size_t>(rel_tol, abs_tol, use_jac);
GridKit::PowerElectronicsModel<double, size_t> sysmodel(rel_tol, abs_tol, use_jac);

size_t idoff = 0;

Expand All @@ -32,7 +32,7 @@ int main(int argc, char const* argv[])
double vinit = 1.0;

// inductor
GridKit::Inductor<double, size_t>* induct = new GridKit::Inductor(idoff, linit);
GridKit::Inductor<double, size_t>* induct = new GridKit::Inductor<double, size_t>(idoff, linit);
// Form index to node uid realations
// input
induct->setExternalConnectionNodes(0, 1);
Expand All @@ -41,22 +41,22 @@ int main(int argc, char const* argv[])
// internal
induct->setExternalConnectionNodes(2, 2);
// add component
sysmodel->addComponent(induct);
sysmodel.addComponent(induct);

// resistor
idoff++;
GridKit::Resistor<double, size_t>* resis = new GridKit::Resistor(idoff, rinit);
GridKit::Resistor<double, size_t>* resis = new GridKit::Resistor<double, size_t>(idoff, rinit);
// Form index to node uid realations
// input
resis->setExternalConnectionNodes(0, 0);
// output
resis->setExternalConnectionNodes(1, 1);
// add
sysmodel->addComponent(resis);
sysmodel.addComponent(resis);

// voltage source
idoff++;
GridKit::VoltageSource<double, size_t>* vsource = new GridKit::VoltageSource(idoff, vinit);
GridKit::VoltageSource<double, size_t>* vsource = new GridKit::VoltageSource<double, size_t>(idoff, vinit);
// Form index to node uid realations
// input
vsource->setExternalConnectionNodes(0, -1);
Expand All @@ -65,54 +65,54 @@ int main(int argc, char const* argv[])
// internal
vsource->setExternalConnectionNodes(2, 3);

sysmodel->addComponent(vsource);
sysmodel.addComponent(vsource);

sysmodel->allocate(4);
sysmodel.allocate(4);

std::cout << sysmodel->y().size() << std::endl;
std::cout << sysmodel.y().size() << std::endl;

// Grounding for IDA. If no grounding then circuit is \mu > 1
// v_0 (grounded)
// Create Intial points
sysmodel->y()[0] = vinit; // v_1
sysmodel->y()[1] = vinit; // v_2
sysmodel->y()[2] = 0.0; // i_L
sysmodel->y()[3] = 0.0; // i_s
sysmodel.y()[0] = vinit; // v_1
sysmodel.y()[1] = vinit; // v_2
sysmodel.y()[2] = 0.0; // i_L
sysmodel.y()[3] = 0.0; // i_s

sysmodel->yp()[0] = 0.0; // v'_1
sysmodel->yp()[1] = 0.0; // v'_2
sysmodel->yp()[2] = -vinit / linit; // i'_s
sysmodel->yp()[3] = -vinit / linit; // i'_L
sysmodel.yp()[0] = 0.0; // v'_1
sysmodel.yp()[1] = 0.0; // v'_2
sysmodel.yp()[2] = -vinit / linit; // i'_s
sysmodel.yp()[3] = -vinit / linit; // i'_L

sysmodel->initialize();
sysmodel->evaluateResidual();
sysmodel.initialize();
sysmodel.evaluateResidual();

std::cout << "Verify Intial Resisdual is Zero: {";
for (double i : sysmodel->getResidual())
for (double i : sysmodel.getResidual())
{
std::cout << i << ", ";
}
std::cout << "}\n";

sysmodel->updateTime(0.0, 1.0);
sysmodel->evaluateJacobian();
sysmodel.updateTime(0.0, 1.0);
sysmodel.evaluateJacobian();
std::cout << "Intial Jacobian with alpha = 1:\n";
sysmodel->getJacobian().printMatrix();
sysmodel.getJacobian().printMatrix();

// Create numerical integrator and configure it for the generator model
AnalysisManager::Sundials::Ida<double, size_t>* idas = new AnalysisManager::Sundials::Ida<double, size_t>(sysmodel);
AnalysisManager::Sundials::Ida<double, size_t> idas(&sysmodel);

double t_init = 0.0;
double t_final = 1.0;

// setup simulation
idas->configureSimulation();
idas->getDefaultInitialCondition();
idas->initializeSimulation(t_init);
idas.configureSimulation();
idas.getDefaultInitialCondition();
idas.initializeSimulation(t_init);

idas->runSimulation(t_final);
idas.runSimulation(t_final);

std::vector<double>& yfinial = sysmodel->y();
std::vector<double>& yfinial = sysmodel.y();

std::cout << "Final Vector y\n";
for (size_t i = 0; i < yfinial.size(); i++)
Expand Down
Loading
Loading