/// <summary>Computes solution matrix coeffs. for pressure sustaining valve.</summary> private void PsvCoeff(EpanetNetwork net, LsVariables ls, SparseMatrix smat) { int k = Index; int n1 = smat.GetRow(first.Index); int n2 = smat.GetRow(second.Index); double hset = first.Elevation + setting; if (status == StatType.ACTIVE) { invHeadLoss = 0.0; flowCorrection = flow - ls.GetNodalInFlow(first); ls.AddRhsCoeff(n1, +(hset * Constants.CBIG)); ls.AddAii(n1, +Constants.CBIG); if (ls.GetNodalInFlow(first) > 0.0) { ls.AddRhsCoeff(n2, +ls.GetNodalInFlow(first)); } return; } ValveCoeff(net); ls.AddAij(smat.GetNdx(k), -invHeadLoss); ls.AddAii(n1, +invHeadLoss); ls.AddAii(n2, +invHeadLoss); ls.AddRhsCoeff(n1, +(flowCorrection - flow)); ls.AddRhsCoeff(n2, -(flowCorrection - flow)); }
/// <summary>Completes calculation of nodal flow imbalance (X) flow correction (F) arrays.</summary> public static void ComputeNodeCoeffs(List <SimulationNode> junctions, SparseMatrix smat, LsVariables ls) { foreach (SimulationNode node in junctions) { ls.AddNodalInFlow(node, -node.demand); ls.AddRhsCoeff(smat.GetRow(node.Index), +ls.GetNodalInFlow(node)); } }