Adding initial Project to git
This commit is contained in:
97
PressureVessel.cs
Normal file
97
PressureVessel.cs
Normal file
@@ -0,0 +1,97 @@
|
||||
using System;
|
||||
|
||||
namespace BWR_simulator
|
||||
{
|
||||
public class PressureVessel
|
||||
{
|
||||
public readonly double TOTAL_VOLUME; // Liters
|
||||
private const double VESSEL_COOLING_COEFF = 1000;
|
||||
private const double ROD_HEATING_COEFF = 2000;
|
||||
|
||||
// fluid density coeffcients to calculate fluid density at different pressures and temps
|
||||
private readonly double[] FDC =
|
||||
[
|
||||
999.83311,
|
||||
0.0752,
|
||||
0.0089,
|
||||
7.36413e-5,
|
||||
4.74639e-7,
|
||||
1.34888e-9,
|
||||
1.36e-11
|
||||
];
|
||||
public double HotwellTemp { get; private set; }
|
||||
|
||||
public double GasMass { get; private set; }
|
||||
public double GasVolume { get; private set; }
|
||||
public double GasDensity { get; private set; }
|
||||
public double Pressure { get; private set; }
|
||||
|
||||
public double FluidMass { get; private set; }
|
||||
public double FluidDensity { get; private set; }
|
||||
public double FluidVolume { get; private set; }
|
||||
public double FluidTemp { get; private set; }
|
||||
public double FluidBoilingPoint { get; private set; }
|
||||
|
||||
public double FeedwaterFlow { get; private set; }
|
||||
public double ReliefValvePos { get; private set; }
|
||||
public double InputEnergy { get; private set; }
|
||||
|
||||
public PressureVessel(double totalVolume = 9500,
|
||||
double fluidTemp = 300,
|
||||
double fluidMass = 6200,
|
||||
double gasMass = 0)
|
||||
{
|
||||
TOTAL_VOLUME = totalVolume;
|
||||
FluidTemp = fluidTemp;
|
||||
FluidMass = fluidMass;
|
||||
GasMass = gasMass;
|
||||
|
||||
InputEnergy = 0;
|
||||
ReliefValvePos = 0;
|
||||
FeedwaterFlow = 0;
|
||||
Pressure = 1; // calcualte initial pressure
|
||||
FluidBoilingPoint = Constants.WATER_BOILING_POINT_NORM; // calculate boiling point givien initial pressure
|
||||
FluidDensity = 1;
|
||||
|
||||
HotwellTemp = 300;
|
||||
CalculateDensity();
|
||||
|
||||
}
|
||||
private void CalculateDensity()
|
||||
{
|
||||
FluidVolume = FluidMass / FluidDensity;
|
||||
GasVolume = TOTAL_VOLUME - FluidVolume;
|
||||
GasDensity = GasMass / GasVolume;
|
||||
}
|
||||
private void CalculateEnergyInput(double dt)
|
||||
{
|
||||
InputEnergy -= VESSEL_COOLING_COEFF * (HotwellTemp - FluidTemp) * dt;
|
||||
InputEnergy += ROD_HEATING_COEFF * (600 - FluidTemp) * dt;
|
||||
InputEnergy /= 1e6;
|
||||
}
|
||||
public void Step(double dt)
|
||||
{
|
||||
CalculateEnergyInput(dt);
|
||||
FluidVolume += FeedwaterFlow * dt;
|
||||
FluidBoilingPoint = Math.Pow((1/Constants.WATER_BOILING_POINT_NORM - (8.314 * Math.Log(Pressure))/40700), -1);
|
||||
|
||||
FluidTemp += (InputEnergy * 1e6) / (FluidMass * Constants.WATER_HEAT_CAPACITY);
|
||||
if (FluidTemp > FluidBoilingPoint)
|
||||
{
|
||||
InputEnergy = FluidMass * Constants.WATER_HEAT_CAPACITY * FluidTemp - FluidBoilingPoint;
|
||||
FluidTemp = FluidBoilingPoint;
|
||||
double d_vapour = InputEnergy / Constants.WATER_LATENT_HEAT;
|
||||
FluidMass -= d_vapour;
|
||||
GasMass += d_vapour;
|
||||
|
||||
CalculateDensity();
|
||||
}
|
||||
|
||||
Pressure = 1 + ((GasMass/Constants.WATER_MOLAR_MASS) * (Constants.IDEAL_GAS_CONSTANT * FluidTemp / TOTAL_VOLUME - FluidVolume));
|
||||
if (Pressure < 1) {Pressure = 1;}
|
||||
|
||||
GasMass -= (Pressure - 1) * ReliefValvePos * dt;
|
||||
if (GasMass < 0) {GasMass = 0;}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user