//package PS3; import javax.swing.*; import java.util.*; // For Vector public class FluidTest { public static void main(String[] args) { // Input data- fluids Fluid[] substance= new Fluid[4]; substance[0]= new Fluid("water", 1.0E3, 1.0E-3); substance[1]= new Fluid("air", 1.2, 1.8E-5); substance[2]= new Fluid("ethyl", 0.79E3, 1.2E-3); substance[3]= new Fluid("methyl", 0.79E3, 0.62E-3); // Input data- pipe network Vector network= new Vector(); network.addElement(new Pipe(0.5, 50.0, -0.1, "AB", null)); network.addElement(new Pipe(0.4, 15.0, -0.05, "BC", (Pipe) network.elementAt(0))); network.addElement(new Pipe(0.3, 5.0, -0.03, "CD", (Pipe) network.elementAt(1))); network.addElement(new Pipe(0.1*Math.sqrt(7), 8.0, -0.03, "CE", (Pipe) network.elementAt(1))); network.addElement(new Pipe(0.3, 25.0, 0.05, "BF", (Pipe) network.elementAt(0))); // Prompt user for fluid to be used Fluid chosen; String text= JOptionPane.showInputDialog("Enter fluid (water, air, ethyl, methyl):"); if (text.equals("water")) chosen= substance[0]; else if (text.equals("air")) chosen= substance[1]; else if (text.equals("ethyl")) chosen= substance[2]; else if (text.equals("methyl")) chosen= substance[3]; else { chosen= null; System.out.println("You need to enter a valid fluid next time"); System.exit(0); } double d= chosen.getDensity(); // For convenience later double q= chosen.getViscosity(); text= JOptionPane.showInputDialog("Enter initial fluid pressure"); double p1= Double.parseDouble(text); text= JOptionPane.showInputDialog("Enter initial fluid velocity"); double velocity= Double.parseDouble(text); Pipe.setVelocity(velocity); text= JOptionPane.showInputDialog("Enter pipe roughness"); double e= Double.parseDouble(text); Pipe.setRoughness(e); // Compute pipe pressure losses, etc. Pipe first= (Pipe) network.elementAt(0); first.calcOutletPressure(p1, d, q); for (int i=1; i < network.size(); i++) { Pipe p= (Pipe) network.elementAt(i); Pipe pup= p.getUpstreamPipe(); double press= pup.getOutletPressure(); p.calcOutletPressure(press, d, q); } // Output results System.out.println("Fluid type: " + chosen.getFluidName()); for (int k=0; k < network.size(); k++) { Pipe pout= (Pipe) network.elementAt(k); pout.printData(chosen); } //System.exit(0); } } class Fluid { private double density; private double viscosity; private String name; Fluid(String n, double d, double v) { density= d; viscosity= v; name= n; } public double getDensity() { return density; } public double getViscosity() { return viscosity; } public String getFluidName() { return name; } } class Pipe { // Instance variables private double D; // Diameter private double L; // Length private double dz; // Elevation change private String segment; // Name, e.g., AB, BC private Pipe upstream; // Upstream pipe private double pa; // Initial pressure- input. This is a problem; it's never set anywhere (yet) private double pb= -1; // Outlet pressure- computed. Init to -1 to flag if not computed yet // Static fields private static double v; // Fluid velocity private static double e; // Roughness private final static double critR= 2000; // Critical Reynolds number private final static double g= 9.8; // Gravity Pipe(double d1, double L1, double z1, String s, Pipe pipe1) { D= d1; L= L1; dz= z1; segment= s; upstream= pipe1; } public static double getReynoldsNumber(double dens, double vel, double diam, double visc) { return dens*vel*diam/visc; } public static double getFriction(double R, double e, double D) { if (R < critR) return 64.0/R; else { double t= 1.81*0.4343 *(Math.log(6.9/R + Math.pow((e/D/3.7), 1.11))); return 1.0/t/t; } } // Instance method, just takes init pressure, fluid density, viscosity as parameters public double calcOutletPressure(double p1, double dens, double visc) { pa= p1; // Awkward double R= getReynoldsNumber(dens, v, D, visc); double f= getFriction(R, e, D); pb= pa - dens*g*(dz + f*L*v*v/(D*2*g)); return pb; } public double getOutletPressure() { // Should check that it's been calculated. Not handled in this homework return pb; } public Pipe getUpstreamPipe() { return upstream; } public double getFlow() { return Math.PI*0.25*D*D*v; } public static void setRoughness(double rough) { e= rough; } public static void setVelocity(double vel) { v= vel; } public void printData(Fluid fl) { System.out.println("Pipe " + segment); double R= Pipe.getReynoldsNumber(fl.getDensity(), v, D, fl.getViscosity()); System.out.println(" Reynolds number: " + R); System.out.println(" Friction: " + getFriction(R, e, D)); System.out.println(" Pressure at inlet: " + pa); System.out.println(" Pressure at outlet: " + pb); System.out.println(" Pressure change: " + (pb - pa)); System.out.println(" Volume flow rate: " + getFlow()); } }