void exfil_initState(int k) // // Input: k = storage unit index // Output: none // Purpose: initializes the state of a storage unit's exfiltration object. // { int i; double a, alast, d; TTable* aCurve; TExfil* exfil = Storage[k].exfil; // --- initialize exfiltration object if ( exfil != NULL ) { // --- initialize the Green-Ampt infil. parameters grnampt_initState(exfil->btmExfil); grnampt_initState(exfil->bankExfil); // --- shape given by a Storage Curve i = Storage[k].aCurve; if ( i >= 0 ) { // --- get bottom area aCurve = &Curve[i]; Storage[k].exfil->btmArea = table_lookupEx(aCurve, 0.0); // --- find min/max bank depths and max. bank area table_getFirstEntry(aCurve, &d, &a); exfil->bankMinDepth = 0.0; exfil->bankMaxDepth = 0.0; exfil->bankMaxArea = 0.0; alast = a; while ( table_getNextEntry(aCurve, &d, &a) ) { if ( a < alast ) break; else if ( a > alast ) { exfil->bankMaxArea = a; exfil->bankMaxDepth = d; } else if ( exfil->bankMaxArea == 0.0 ) exfil->bankMinDepth = d; else break; alast = a; } } // --- functional storage shape curve else { exfil->btmArea = Storage[k].aConst; if ( Storage[k].aExpon == 0.0 ) exfil->btmArea +=Storage[k].aCoeff; exfil->bankMinDepth = 0.0; exfil->bankMaxDepth = BIG; exfil->bankMaxArea = BIG; } } }
void infil_initState(int j, int m) // // Input: j = subcatchment index // m = infiltration method code // Output: none // Purpose: initializes state of infiltration for a subcatchment. // { switch (m) { case HORTON: case MOD_HORTON: horton_initState(&HortInfil[j]); break; case GREEN_AMPT: grnampt_initState(&GAInfil[j]); break; case CURVE_NUMBER: curvenum_initState(&CNInfil[j]); break; } }
void node_initState(int j) // // Input: j = node index // Output: none // Purpose: initializes a node's state variables at start of simulation. // { int p; // --- initialize depth Node[j].oldDepth = Node[j].initDepth; Node[j].newDepth = Node[j].oldDepth; Node[j].crownElev = Node[j].invertElev; // --- initialize volume // Node[j].fullVolume = 0.0; //(5.0.014 - LR) // Node[j].newVolume = 0.0; //(5.0.014 - LR) Node[j].fullVolume = node_getVolume(j, Node[j].fullDepth); Node[j].oldVolume = node_getVolume(j, Node[j].oldDepth); Node[j].newVolume = Node[j].oldVolume; // --- initialize water quality state for (p = 0; p < Nobjects[POLLUT]; p++) { Node[j].oldQual[p] = 0.0; Node[j].newQual[p] = 0.0; } // --- initialize any inflow Node[j].oldLatFlow = 0.0; Node[j].newLatFlow = 0.0; // --- initialize HRT in storage nodes if ( Node[j].type == STORAGE ) { Storage[Node[j].subIndex].hrt = 0.0; grnampt_initState(Storage[Node[j].subIndex].infil); //(5.0.015 - LR) } }