MOOSE - Multiscale Object Oriented Simulation Environment
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
HinesMatrix Class Reference

#include <HinesMatrix.h>

+ Inheritance diagram for HinesMatrix:
+ Collaboration diagram for HinesMatrix:

Public Member Functions

double getA (unsigned int row, unsigned int col) const
 
double getB (unsigned int row) const
 
unsigned int getSize () const
 
double getVMid (unsigned int row) const
 
 HinesMatrix ()
 
void setup (const vector< TreeNodeStruct > &tree, double dt)
 

Protected Types

typedef vector< double >::iterator vdIterator
 

Protected Attributes

vector< vdIteratorbackOperand_
 
double dt_
 
vector< double > HJ_
 
vector< double > HJCopy_
 
vector< double > HS_
 
vector< JunctionStructjunction_
 
unsigned int nCompt_
 
vector< vdIteratoroperand_
 
int stage_
 reached. Used in getA. More...
 
vector< double > VMid_
 middle of a time step. More...
 

Private Member Functions

void clear ()
 
void makeJunctions ()
 
void makeMatrix ()
 
void makeOperands ()
 elimination easier. More...
 

Private Attributes

vector< vector< unsigned int > > coupled_
 
vector< double > Ga_
 
map< unsigned int, unsigned int > groupNumber_
 
map< unsigned int, vdIteratoroperandBase_
 
const vector< TreeNodeStruct > * tree_
 setup. More...
 

Detailed Description

Definition at line 55 of file HinesMatrix.h.

Member Typedef Documentation

typedef vector< double >::iterator HinesMatrix::vdIterator
protected

Definition at line 68 of file HinesMatrix.h.

Constructor & Destructor Documentation

HinesMatrix::HinesMatrix ( )

Definition at line 16 of file HinesMatrix.cpp.

17  :
18  nCompt_( 0 ),
19  dt_( 0.0 ),
20  stage_( -1 )
21 {
22  ;
23 }
unsigned int nCompt_
Definition: HinesMatrix.h:70
int stage_
reached. Used in getA.
Definition: HinesMatrix.h:87
double dt_
Definition: HinesMatrix.h:71

Member Function Documentation

void HinesMatrix::clear ( )
private

Definition at line 53 of file HinesMatrix.cpp.

References backOperand_, coupled_, dt_, Ga_, groupNumber_, HJ_, HJCopy_, HS_, junction_, nCompt_, operand_, operandBase_, stage_, tree_, and VMid_.

Referenced by setup().

54 {
55  nCompt_ = 0;
56  dt_ = 0.0;
57  junction_.clear();
58  HS_.clear();
59  HJ_.clear();
60  HJCopy_.clear();
61  VMid_.clear();
62  operand_.clear();
63  backOperand_.clear();
64  stage_ = 0;
65 
66  tree_ = 0;
67  Ga_.clear();
68  coupled_.clear();
69  operandBase_.clear();
70  groupNumber_.clear();
71 }
map< unsigned int, unsigned int > groupNumber_
Definition: HinesMatrix.h:124
vector< double > VMid_
middle of a time step.
Definition: HinesMatrix.h:83
unsigned int nCompt_
Definition: HinesMatrix.h:70
vector< vdIterator > backOperand_
Definition: HinesMatrix.h:86
int stage_
reached. Used in getA.
Definition: HinesMatrix.h:87
vector< vdIterator > operand_
Definition: HinesMatrix.h:85
vector< double > HJCopy_
Definition: HinesMatrix.h:82
const vector< TreeNodeStruct > * tree_
setup.
Definition: HinesMatrix.h:112
vector< double > Ga_
Definition: HinesMatrix.h:114
vector< double > HS_
Definition: HinesMatrix.h:74
vector< vector< unsigned int > > coupled_
Definition: HinesMatrix.h:115
map< unsigned int, vdIterator > operandBase_
Definition: HinesMatrix.h:121
vector< JunctionStruct > junction_
Definition: HinesMatrix.h:73
vector< double > HJ_
Definition: HinesMatrix.h:79
double dt_
Definition: HinesMatrix.h:71

+ Here is the caller graph for this function:

double HinesMatrix::getA ( unsigned int  row,
unsigned int  col 
) const

Definition at line 375 of file HinesMatrix.cpp.

References coupled_, group(), groupNumber_, HJ_, HS_, nCompt_, and stage_.

Referenced by operator<<().

376 {
377  /*
378  * If forward elimination is done, or backward substitution is done, and
379  * if (row, col) is in the lower triangle, then return 0.
380  */
381  if ( ( stage_ == 1 || stage_ == 2 ) && row > col )
382  return 0.0;
383 
384  if ( row >= nCompt_ || col >= nCompt_ )
385  return 0.0;
386 
387  if ( row == col )
388  return HS_[ 4 * row ];
389 
390  unsigned int smaller = row < col ? row : col;
391  unsigned int bigger = row > col ? row : col;
392 
393  if ( groupNumber_.find( smaller ) == groupNumber_.end() )
394  {
395  if ( bigger - smaller == 1 )
396  return HS_[ 4 * smaller + 1 ];
397  else
398  return 0.0;
399  }
400  else
401  {
402  // We could use: groupNumber = groupNumber_[ smaller ], but this is a
403  // const function
404  unsigned int groupNumber = groupNumber_.find( smaller )->second;
405  const vector< unsigned int >& group = coupled_[ groupNumber ];
406  unsigned int location, size;
407  unsigned int smallRank, bigRank;
408 
409  if ( find( group.begin(), group.end(), bigger ) != group.end() )
410  {
411  location = 0;
412  for ( int i = 0; i < static_cast< int >( groupNumber ); ++i )
413  {
414  size = coupled_[ i ].size();
415  location += size * ( size - 1 );
416  }
417 
418  size = group.size();
419  smallRank = group.end() - find( group.begin(), group.end(), smaller ) - 1;
420  bigRank = group.end() - find( group.begin(), group.end(), bigger ) - 1;
421  location += size * ( size - 1 ) - smallRank * ( smallRank + 1 );
422  location += 2 * ( smallRank - bigRank - 1 );
423 
424  if ( row == smaller )
425  return HJ_[ location ];
426  else
427  return HJ_[ location + 1 ];
428  }
429  else
430  {
431  return 0.0;
432  }
433  }
434 }
static SrcFinfo0 * group()
Definition: Group.cpp:17
map< unsigned int, unsigned int > groupNumber_
Definition: HinesMatrix.h:124
unsigned int nCompt_
Definition: HinesMatrix.h:70
int stage_
reached. Used in getA.
Definition: HinesMatrix.h:87
vector< double > HS_
Definition: HinesMatrix.h:74
vector< vector< unsigned int > > coupled_
Definition: HinesMatrix.h:115
vector< double > HJ_
Definition: HinesMatrix.h:79

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

double HinesMatrix::getB ( unsigned int  row) const

Definition at line 436 of file HinesMatrix.cpp.

References HS_.

Referenced by operator<<().

437 {
438  return HS_[ 4 * row + 3 ];
439 }
vector< double > HS_
Definition: HinesMatrix.h:74

+ Here is the caller graph for this function:

unsigned int HinesMatrix::getSize ( ) const

Definition at line 370 of file HinesMatrix.cpp.

References nCompt_.

Referenced by operator<<().

371 {
372  return nCompt_;
373 }
unsigned int nCompt_
Definition: HinesMatrix.h:70

+ Here is the caller graph for this function:

double HinesMatrix::getVMid ( unsigned int  row) const

Definition at line 441 of file HinesMatrix.cpp.

References VMid_.

Referenced by operator<<().

442 {
443  return VMid_[ row ];
444 }
vector< double > VMid_
middle of a time step.
Definition: HinesMatrix.h:83

+ Here is the caller graph for this function:

void HinesMatrix::makeJunctions ( )
private

This function creates junction structs to be stored in junction_. It does so by first looking through all compartments and finding those which have more than zero or one child. The zero-one child compts are left alone. coupled_ is populated with the rest of the compartments. Each element of coupled_ is sorted (they are all unsigned ints) and coupled_ itself is sorted by the first element in each element (groupCompare does this comparison in HinesMatrix.cpp). Note: the children themselves are unsigned ints that store the Hines index of the corresponding child compartment. So essentially, at each branch, a JunctionStruct is created for each child, which contains the hines index of that child and its rank, which is group-size() - childIndex - 1.

Definition at line 84 of file HinesMatrix.cpp.

References coupled_, group(), groupCompare(), groupNumber_, junction_, and nCompt_.

Referenced by setup().

85 {
86  // 3.1
87  for ( unsigned int i = 0; i < nCompt_; ++i )
88  {
89  const vector< unsigned int >& c = ( *tree_ )[ i ].children;
90 
91  if ( c.size() == 0 )
92  continue;
93 
94  if ( c.size() == 1 )
95  {
96  int diff = ( int )( c[ 0 ] ) - i;
97 
98  if ( diff == 1 || diff == -1 )
99  continue;
100  }
101 
102  // "coupled" contains a list of all children..
103  coupled_.push_back( c );
104  // ..and the parent compartment itself.
105  coupled_.back().push_back( i );
106  }
107 
108  // 3.2
109  vector< vector< unsigned int > >::iterator group;
110  for ( group = coupled_.begin(); group != coupled_.end(); ++group )
111  sort( group->begin(), group->end() );
112 
113  sort( coupled_.begin(), coupled_.end(), groupCompare );
114 
115  // 3.3
116  unsigned int index;
117  unsigned int rank;
118  for ( group = coupled_.begin(); group != coupled_.end(); ++group )
119  // Loop uptil penultimate compartment in group
120  for ( unsigned int c = 0; c < group->size() - 1; ++c )
121  {
122  index = ( *group )[ c ];
123  rank = group->size() - c - 1;
124  junction_.push_back( JunctionStruct( index, rank ) );
125 
126  groupNumber_[ index ] = group - coupled_.begin();
127  }
128 
129  sort( junction_.begin(), junction_.end() );
130 }
static SrcFinfo0 * group()
Definition: Group.cpp:17
map< unsigned int, unsigned int > groupNumber_
Definition: HinesMatrix.h:124
bool groupCompare(const vector< unsigned int > &A, const vector< unsigned int > &B)
Definition: HinesMatrix.cpp:73
unsigned int nCompt_
Definition: HinesMatrix.h:70
vector< vector< unsigned int > > coupled_
Definition: HinesMatrix.h:115
vector< JunctionStruct > junction_
Definition: HinesMatrix.h:73

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void HinesMatrix::makeMatrix ( )
private

Populates HS_ and HJ_. All of the electrical circuit analysis goes into this one single function (and updateMatrix, of course).

Definition at line 133 of file HinesMatrix.cpp.

References coupled_, dt_, Ga_, group(), HJ_, HJCopy_, HS_, junction_, nCompt_, operandBase_, and tree_.

Referenced by setup().

134 {
135  const vector< TreeNodeStruct >& node = *tree_;
136 
137  // Setting up HS
138  HS_.resize( 4 * nCompt_, 0.0 );
139  for ( unsigned int i = 0; i < nCompt_; ++i )
140  HS_[ 4 * i + 2 ] =
141  node[ i ].Cm / ( dt_ / 2.0 ) +
142  1.0 / node[ i ].Rm;
143 
144  double gi, gj, gij;
145  vector< JunctionStruct >::iterator junction = junction_.begin();
146  for ( unsigned int i = 0; i < nCompt_ - 1; ++i )
147  {
148  if ( !junction_.empty() &&
149  junction < junction_.end() &&
150  i == junction->index )
151  {
152  ++junction;
153  continue;
154  }
155 
156  gi = Ga_[ i ];
157  gj = Ga_[ i + 1 ];
158  gij = gi * gj / ( gi + gj );
159 
160  HS_[ 4 * i + 1 ] = -gij;
161  HS_[ 4 * i + 2 ] += gij;
162  HS_[ 4 * i + 6 ] += gij;
163  }
164 
165  vector< vector< unsigned int > >::iterator group;
166  vector< unsigned int >::iterator i;
167  for ( group = coupled_.begin(); group != coupled_.end(); ++group )
168  {
169  double gsum = 0.0;
170 
171  for ( i = group->begin(); i != group->end(); ++i )
172  gsum += Ga_[ *i ];
173 
174  for ( i = group->begin(); i != group->end(); ++i )
175  {
176  gi = Ga_[ *i ];
177 
178  HS_[ 4 * *i + 2 ] += gi * ( 1.0 - gi / gsum );
179  }
180  }
181 
182  // Setting up HJ
183  vector< unsigned int >::iterator j;
184  unsigned int size = 0;
185  unsigned int rank;
186  for ( group = coupled_.begin(); group != coupled_.end(); ++group )
187  {
188  rank = group->size() - 1;
189  size += rank * ( rank + 1 );
190  }
191 
192  HJ_.reserve( size );
193 
194  for ( group = coupled_.begin(); group != coupled_.end(); ++group )
195  {
196  double gsum = 0.0;
197 
198  for ( i = group->begin(); i != group->end(); ++i )
199  gsum += Ga_[ *i ];
200 
201  for ( i = group->begin(); i != group->end() - 1; ++i )
202  {
203  int base = HJ_.size();
204 
205  for ( j = i + 1; j != group->end(); ++j )
206  {
207  gij = Ga_[ *i ] * Ga_[ *j ] / gsum;
208 
209  HJ_.push_back( -gij );
210  HJ_.push_back( -gij );
211  }
212 
213  //~ operandBase_[ *i ] = &HJ_[ base ];
214  operandBase_[ *i ] = HJ_.begin() + base;
215  }
216  }
217 
218  // Copy diagonal elements into their final locations
219  for ( unsigned int i = 0; i < nCompt_; ++i )
220  HS_[ 4 * i ] = HS_[ 4 * i + 2 ];
221  // Create copy of HJ
222  HJCopy_.assign( HJ_.begin(), HJ_.end() );
223 }
static SrcFinfo0 * group()
Definition: Group.cpp:17
unsigned int nCompt_
Definition: HinesMatrix.h:70
vector< double > HJCopy_
Definition: HinesMatrix.h:82
const vector< TreeNodeStruct > * tree_
setup.
Definition: HinesMatrix.h:112
vector< double > Ga_
Definition: HinesMatrix.h:114
vector< double > HS_
Definition: HinesMatrix.h:74
vector< vector< unsigned int > > coupled_
Definition: HinesMatrix.h:115
map< unsigned int, vdIterator > operandBase_
Definition: HinesMatrix.h:121
vector< JunctionStruct > junction_
Definition: HinesMatrix.h:73
vector< double > HJ_
Definition: HinesMatrix.h:79
double dt_
Definition: HinesMatrix.h:71

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void HinesMatrix::makeOperands ( )
private

elimination easier.

Makes operands in order to make forward

Definition at line 226 of file HinesMatrix.cpp.

References backOperand_, coupled_, group(), groupNumber_, HS_, junction_, nCompt_, operand_, operandBase_, and VMid_.

Referenced by setup().

227 {
228  unsigned int index;
229  unsigned int rank;
230  unsigned int farIndex;
231  vdIterator base;
232  vector< JunctionStruct >::iterator junction;
233 
234  // Allocate space in VMid. Needed, since we will store pointers to its
235  // elements below.
236  VMid_.resize( nCompt_ );
237 
238  // Operands for forward-elimination
239  for ( junction = junction_.begin(); junction != junction_.end(); ++junction )
240  {
241  index = junction->index;
242  rank = junction->rank;
243  base = operandBase_[ index ];
244 
245  // This is the list of compartments connected at a junction.
246  const vector< unsigned int >& group =
247  coupled_[ groupNumber_[ index ] ];
248 
249  if ( rank == 1 )
250  {
251  operand_.push_back( base );
252 
253  // Select last member.
254  farIndex = group[ group.size() - 1 ];
255  operand_.push_back( HS_.begin() + 4 * farIndex );
256  operand_.push_back( VMid_.begin() + farIndex );
257  }
258  else if ( rank == 2 )
259  {
260  operand_.push_back( base );
261 
262  // Select 2nd last member.
263  farIndex = group[ group.size() - 2 ];
264  operand_.push_back( HS_.begin() + 4 * farIndex );
265  operand_.push_back( VMid_.begin() + farIndex );
266 
267  // Select last member.
268  farIndex = group[ group.size() - 1 ];
269  operand_.push_back( HS_.begin() + 4 * farIndex );
270  operand_.push_back( VMid_.begin() + farIndex );
271  }
272  else
273  {
274  // Operations on diagonal elements and elements from B (as in Ax = B).
275  int start = group.size() - rank;
276  for ( unsigned int j = 0; j < rank; ++j )
277  {
278  farIndex = group[ start + j ];
279 
280  // Diagonal elements
281  operand_.push_back( HS_.begin() + 4 * farIndex );
282  operand_.push_back( base + 2 * j );
283  operand_.push_back( base + 2 * j + 1 );
284 
285  // Elements from B
286  operand_.push_back( HS_.begin() + 4 * farIndex + 3 );
287  operand_.push_back( HS_.begin() + 4 * index + 3 );
288  operand_.push_back( base + 2 * j + 1 );
289  }
290 
291  // Operations on off-diagonal elements.
292  vdIterator left;
293  vdIterator above;
294  vdIterator target;
295 
296  // Upper triangle elements
297  left = base + 1;
298  target = base + 2 * rank;
299  for ( unsigned int i = 1; i < rank; ++i )
300  {
301  above = base + 2 * i;
302  for ( unsigned int j = 0; j < rank - i; ++j )
303  {
304  operand_.push_back( target );
305  operand_.push_back( above );
306  operand_.push_back( left );
307 
308  above += 2;
309  target += 2;
310  }
311  left += 2;
312  }
313 
314  // Lower triangle elements
315  target = base + 2 * rank + 1;
316  above = base;
317  for ( unsigned int i = 1; i < rank; ++i )
318  {
319  left = base + 2 * i + 1;
320  for ( unsigned int j = 0; j < rank - i; ++j )
321  {
322  operand_.push_back( target );
323  operand_.push_back( above );
324  operand_.push_back( left );
325 
326  /*
327  * This check required because the MS VC++ compiler is
328  * paranoid about iterators going out of bounds, even if
329  * they are never used after that.
330  */
331  if ( i == rank - 1 && j == rank - i - 1 )
332  continue;
333 
334  target += 2;
335  left += 2;
336  }
337  above += 2;
338  }
339  }
340  }
341 
342  // Operands for backward substitution
343  for ( junction = junction_.begin(); junction != junction_.end(); ++junction )
344  {
345  if ( junction->rank < 3 )
346  continue;
347 
348  index = junction->index;
349  rank = junction->rank;
350  base = operandBase_[ index ];
351 
352  // This is the list of compartments connected at a junction.
353  const vector< unsigned int >& group =
354  coupled_[ groupNumber_[ index ] ];
355 
356  unsigned int start = group.size() - rank;
357  for ( unsigned int j = 0; j < rank; ++j )
358  {
359  farIndex = group[ start + j ];
360 
361  backOperand_.push_back( base + 2 * j );
362  backOperand_.push_back( VMid_.begin() + farIndex );
363  }
364  }
365 }
static SrcFinfo0 * group()
Definition: Group.cpp:17
map< unsigned int, unsigned int > groupNumber_
Definition: HinesMatrix.h:124
vector< double > VMid_
middle of a time step.
Definition: HinesMatrix.h:83
unsigned int nCompt_
Definition: HinesMatrix.h:70
vector< vdIterator > backOperand_
Definition: HinesMatrix.h:86
vector< vdIterator > operand_
Definition: HinesMatrix.h:85
vector< double > HS_
Definition: HinesMatrix.h:74
vector< vector< unsigned int > > coupled_
Definition: HinesMatrix.h:115
map< unsigned int, vdIterator > operandBase_
Definition: HinesMatrix.h:121
vector< JunctionStruct > junction_
Definition: HinesMatrix.h:73
vector< double >::iterator vdIterator
Definition: HinesMatrix.h:68

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

void HinesMatrix::setup ( const vector< TreeNodeStruct > &  tree,
double  dt 
)

Definition at line 25 of file HinesMatrix.cpp.

References clear(), dt_, Ga_, makeJunctions(), makeMatrix(), makeOperands(), nCompt_, and tree_.

Referenced by HSolvePassive::setup().

26 {
27  clear();
28 
29  nCompt_ = tree.size();
30 
31 #if SANITY_CHECK
32  stringstream ss;
33  if(nCompt_ <= 0)
34  {
35  ss << "Horror, horror! Trying to create a matrix with size " << nCompt_
36  << endl;
37  dump(ss.str(), "ERROR");
38  throw range_error("Expected greater than 0.");
39  }
40 #endif /* ----- not STRICT_CHECK ----- */
41 
42  dt_ = dt;
43  tree_ = &tree;
44 
45  for ( unsigned int i = 0; i < nCompt_; i++ )
46  Ga_.push_back( 2.0 / tree[ i ].Ra );
47 
48  makeJunctions();
49  makeMatrix();
50  makeOperands();
51 }
void makeMatrix()
unsigned int nCompt_
Definition: HinesMatrix.h:70
void clear()
Definition: HinesMatrix.cpp:53
const vector< TreeNodeStruct > * tree_
setup.
Definition: HinesMatrix.h:112
vector< double > Ga_
Definition: HinesMatrix.h:114
void makeJunctions()
Definition: HinesMatrix.cpp:84
void makeOperands()
elimination easier.
double dt_
Definition: HinesMatrix.h:71

+ Here is the call graph for this function:

+ Here is the caller graph for this function:

Member Data Documentation

vector< vdIterator > HinesMatrix::backOperand_
protected

Definition at line 86 of file HinesMatrix.h.

Referenced by HSolvePassive::backwardSubstitute(), clear(), and makeOperands().

vector< vector< unsigned int > > HinesMatrix::coupled_
private

Contains a list of all children of a given compt. Also contains the parent itself. i.e., for each compartment that has more than one child, coupled_ stores a vector containing the children of the compartment and the compartment itself. coupled_ is therefore a vector of such vectors.

Definition at line 115 of file HinesMatrix.h.

Referenced by clear(), getA(), makeJunctions(), makeMatrix(), and makeOperands().

double HinesMatrix::dt_
protected
vector< double > HinesMatrix::Ga_
private

Definition at line 114 of file HinesMatrix.h.

Referenced by clear(), makeMatrix(), and setup().

map< unsigned int, unsigned int > HinesMatrix::groupNumber_
private

Tells you the index of a compartment's group within coupled_, given the compartment's Hines index.

Definition at line 124 of file HinesMatrix.h.

Referenced by clear(), getA(), makeJunctions(), and makeOperands().

vector< double > HinesMatrix::HJ_
protected

Hines, junctions. Flattened array containing the off-diagonal elements of the Hines matrix

Definition at line 79 of file HinesMatrix.h.

Referenced by clear(), getA(), makeMatrix(), and HSolvePassive::updateMatrix().

vector< double > HinesMatrix::HJCopy_
protected

Definition at line 82 of file HinesMatrix.h.

Referenced by clear(), makeMatrix(), and HSolvePassive::updateMatrix().

vector< double > HinesMatrix::HS_
protected

Hines, series. Flattened array containing the tridiagonal of the approximately tridiagonal Hines matrix, stacked against the column vector "b" that appears on the RHS of the equation that we're trying to solve: Ax=b.

Definition at line 74 of file HinesMatrix.h.

Referenced by HSolvePassive::backwardSubstitute(), clear(), HSolvePassive::forwardEliminate(), getA(), getB(), makeMatrix(), makeOperands(), and HSolvePassive::updateMatrix().

vector< JunctionStruct > HinesMatrix::junction_
protected
vector< vdIterator > HinesMatrix::operand_
protected
map< unsigned int, vdIterator > HinesMatrix::operandBase_
private

Contains iterators into HJ_ demarcating where a child's neighbours begin. Used for iterating through HJ_ along with junction_.

Definition at line 121 of file HinesMatrix.h.

Referenced by clear(), makeMatrix(), and makeOperands().

int HinesMatrix::stage_
protected

reached. Used in getA.

Which stage the simulation has

Definition at line 87 of file HinesMatrix.h.

Referenced by HSolvePassive::backwardSubstitute(), clear(), HSolvePassive::forwardEliminate(), getA(), and HSolvePassive::updateMatrix().

const vector< TreeNodeStruct >* HinesMatrix::tree_
private

setup.

Stores compt info for

Definition at line 112 of file HinesMatrix.h.

Referenced by clear(), makeMatrix(), and setup().

vector< double > HinesMatrix::VMid_
protected

middle of a time step.

Compartment voltage at the

Definition at line 83 of file HinesMatrix.h.

Referenced by HSolvePassive::backwardSubstitute(), clear(), getVMid(), and makeOperands().


The documentation for this class was generated from the following files: