using IStation.Epanet.Enums;
using System;
namespace IStation.Epanet.Network.Structures
{
///Hydraulic valve structure.
public class Valve : Link
{
public Valve(string name, ValveType type) : base(name) => ValveType = type;
public ValveType ValveType { get; }
public override LinkType LinkType => LinkType.VALVE;
public override void InitResistance(HeadLossFormulaType formflag, double hexp) { }
public override void ConvertUnits(Network nw)
{
FieldsMap fMap = nw.FieldsMap;
Diameter /= fMap.GetUnits(FieldType.DIAM);
double diam = Math.Pow(Diameter, 2);
Km = 0.02517 * Km / diam / diam;
if (!double.IsNaN(Kc))
switch (ValveType)
{
case ValveType.FCV:
Kc /= fMap.GetUnits(FieldType.FLOW);
break;
case ValveType.PRV:
case ValveType.PSV:
case ValveType.PBV:
Kc /= fMap.GetUnits(FieldType.PRESSURE);
break;
}
}
///Settings curve.
public Curve Curve { get; set; }
#if NUCONVERT
public override double GetNuRoughness(FlowUnitsType fType, PressUnitsType pType, double spGrav)
{
switch (ValveType)
{
case ValveType.FCV:
return NUConvert.RevertFlow(fType, Kc);
case ValveType.PRV:
case ValveType.PSV:
case ValveType.PBV:
return NUConvert.RevertPressure(pType, spGrav, Kc);
}
return Kc;
}
#endif
}
}