From GridLAB-D Wiki
Jump to: navigation, search

ETP Solver - Equivalent Thermal Parameters solver Template:NEW30

Synopsis

glsolver("etp") throw(const char*);

Description

The data structure for the ETP solver is as follows:

struct etp {
  double t; // the time solution to the ETP equation
  double a; // the a parameter
  double n; // the n parameter
  double b; // the b parameter
  double m; // the m parameter
  double c; // the c parameter
  double p; // the precision of the solution
  double *e; // the pointer to the error estimate
};

To use the ETP solver in a module, you must define the macro USE_GLSOLVERS in each source file that will makes solver call, including the init.cpp file (which loads and initializes the solver):

#define USE_GLSOLVERS
#include "gridlabd.h"

When the module is initialized, you must load the ETP solver (which will automatically initialize it).

glsolver *etp_solver;

EXPORT CLASS *init(CALLBACKS *fntable, MODULE *module, int argc, char *argv[])
{
  if ( set_callback(fntable)==NULL ) return NULL;
  etp_solver = new glsolver("etp");
  // ...
  return first_class;
}

To set/get parameters for the ETP solver, use the set/get calls:

int iteration_limit;

if ( etp_solver->get("max_iterations",&iteration_limit,NULL)==0 )
  gl_error("unable to get iteration limit");

if ( etp_solver->set("max_iterations",iteration_limit,NULL)==0 )
  gl_error("unable to set iteration limit");

To call the ETP solver, you must construct the ETP data structure required by the solver. For example:

struct { double t,a,n,b,m,c,p,*e; } etp = {0,0.1,-0.1,0.2,-0.2,0.3,1e-6,NULL};

if ( etp_solver->solve((void*)&etp)==0 || isnan(t) )
  gl_error("no solution found");

max_iterations

Use this set/get parameter to control the maximum number of iterations used by the solver.

Version

The general solvers library was introduced in Hassayampa (Version 3.0).

See also