예제 #1
0
        /// <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));
        }
예제 #2
0
 /// <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));
     }
 }