use of org.concord.energy3d.model.ParabolicDish in project energy3d by concord-consortium.
the class Scene method setSectionsForAllParabolicDishes.
public void setSectionsForAllParabolicDishes(final int nParabola, final int nAxis) {
for (final HousePart p : parts) {
if (p instanceof ParabolicDish) {
final ParabolicDish d = (ParabolicDish) p;
d.setNRadialSections(nParabola);
d.setNAxialSections(nAxis);
d.draw();
}
}
SceneManager.getInstance().refresh();
}
use of org.concord.energy3d.model.ParabolicDish in project energy3d by concord-consortium.
the class SceneManager method newPart.
private HousePart newPart() {
final HousePart drawn;
setGridsVisible(false);
if (operation == Operation.DRAW_WALL) {
drawn = new Wall();
drawn.setColor(Scene.getInstance().getWallColor());
} else if (operation == Operation.DRAW_DOOR) {
drawn = new Door();
drawn.setColor(Scene.getInstance().getDoorColor());
} else if (operation == Operation.DRAW_WINDOW) {
drawn = new Window();
} else if (operation == Operation.DRAW_ROOF_PYRAMID) {
drawn = new PyramidRoof();
drawn.setColor(Scene.getInstance().getRoofColor());
} else if (operation == Operation.DRAW_ROOF_HIP) {
drawn = new HipRoof();
drawn.setColor(Scene.getInstance().getRoofColor());
} else if (operation == Operation.DRAW_ROOF_SHED) {
drawn = new ShedRoof();
drawn.setColor(Scene.getInstance().getRoofColor());
} else if (operation == Operation.DRAW_ROOF_GAMBREL) {
drawn = new GambrelRoof();
drawn.setColor(Scene.getInstance().getRoofColor());
} else if (operation == Operation.DRAW_ROOF_CUSTOM) {
drawn = new CustomRoof();
drawn.setColor(Scene.getInstance().getRoofColor());
} else if (operation == Operation.DRAW_FLOOR) {
drawn = new Floor();
drawn.setColor(Scene.getInstance().getFloorColor());
} else if (operation == Operation.DRAW_SOLAR_PANEL) {
drawn = new SolarPanel();
} else if (operation == Operation.DRAW_RACK) {
drawn = new Rack();
} else if (operation == Operation.DRAW_MIRROR) {
drawn = new Mirror();
} else if (operation == Operation.DRAW_PARABOLIC_TROUGH) {
drawn = new ParabolicTrough();
} else if (operation == Operation.DRAW_PARABOLIC_DISH) {
drawn = new ParabolicDish();
} else if (operation == Operation.DRAW_FRESNEL_REFLECTOR) {
drawn = new FresnelReflector();
} else if (operation == Operation.DRAW_SENSOR) {
drawn = new Sensor();
} else if (operation == Operation.DRAW_FOUNDATION) {
drawn = new Foundation();
setGridsVisible(Scene.getInstance().isSnapToGrids());
drawn.setColor(Scene.getInstance().getFoundationColor());
} else if (operation == Operation.DRAW_DOGWOOD) {
drawn = new Tree(Tree.DOGWOOD);
setGridsVisible(true);
} else if (operation == Operation.DRAW_ELM) {
drawn = new Tree(Tree.ELM);
setGridsVisible(true);
} else if (operation == Operation.DRAW_OAK) {
drawn = new Tree(Tree.OAK);
setGridsVisible(true);
} else if (operation == Operation.DRAW_LINDEN) {
drawn = new Tree(Tree.LINDEN);
setGridsVisible(true);
} else if (operation == Operation.DRAW_COTTONWOOD) {
drawn = new Tree(Tree.COTTONWOOD);
setGridsVisible(true);
} else if (operation == Operation.DRAW_MAPLE) {
drawn = new Tree(Tree.MAPLE);
setGridsVisible(true);
} else if (operation == Operation.DRAW_PINE) {
drawn = new Tree(Tree.PINE);
setGridsVisible(true);
} else if (operation == Operation.DRAW_JANE) {
drawn = new Human(Human.JANE);
setGridsVisible(true);
} else if (operation == Operation.DRAW_JENI) {
drawn = new Human(Human.JENI);
setGridsVisible(true);
} else if (operation == Operation.DRAW_JILL) {
drawn = new Human(Human.JILL);
setGridsVisible(true);
} else if (operation == Operation.DRAW_JACK) {
drawn = new Human(Human.JACK);
setGridsVisible(true);
} else if (operation == Operation.DRAW_JOHN) {
drawn = new Human(Human.JOHN);
setGridsVisible(true);
} else if (operation == Operation.DRAW_JOSE) {
drawn = new Human(Human.JOSE);
setGridsVisible(true);
} else {
return null;
}
Scene.getInstance().add(drawn, false);
addPartCommand = new AddPartCommand(drawn);
return drawn;
}
use of org.concord.energy3d.model.ParabolicDish in project energy3d by concord-consortium.
the class GroupAnnualAnalysis method updateGraph.
@Override
public void updateGraph() {
for (final HousePart p : selectedParts) {
final String customText = p.getLabelCustomText();
if (p instanceof Window) {
final Window window = (Window) p;
final double solar = p.getSolarPotentialToday() * window.getSolarHeatGainCoefficient();
graph.addData("Solar " + p.getId(), solar);
final double[] loss = p.getHeatLoss();
double sum = 0;
for (final double x : loss) {
sum += x;
}
graph.addData("Heat Gain " + p.getId(), -sum);
} else if (p instanceof Wall || p instanceof Roof) {
final double[] loss = p.getHeatLoss();
double sum = 0;
for (final double x : loss) {
sum += x;
}
graph.addData("Heat Gain " + p.getId(), -sum);
} else if (p instanceof SolarPanel) {
if (customText != null) {
graph.addData("Solar " + p.getId() + graph.getDataNameDelimiter() + customText, ((SolarPanel) p).getYieldToday());
} else {
graph.addData("Solar " + p.getId(), ((SolarPanel) p).getYieldToday());
}
} else if (p instanceof Rack) {
if (customText != null) {
graph.addData("Solar " + p.getId() + graph.getDataNameDelimiter() + customText, ((Rack) p).getYieldToday());
} else {
graph.addData("Solar " + p.getId(), ((Rack) p).getYieldToday());
}
} else if (p instanceof Mirror) {
final Mirror mirror = (Mirror) p;
final double solar = mirror.getSolarPotentialToday() * mirror.getSystemEfficiency();
if (customText != null) {
graph.addData("Solar " + p.getId() + graph.getDataNameDelimiter() + customText, solar);
} else {
graph.addData("Solar " + p.getId(), solar);
}
} else if (p instanceof ParabolicTrough) {
final ParabolicTrough trough = (ParabolicTrough) p;
final double solar = trough.getSolarPotentialToday() * trough.getSystemEfficiency();
if (customText != null) {
graph.addData("Solar " + p.getId() + graph.getDataNameDelimiter() + customText, solar);
} else {
graph.addData("Solar " + p.getId(), solar);
}
} else if (p instanceof ParabolicDish) {
final ParabolicDish dish = (ParabolicDish) p;
final double solar = dish.getSolarPotentialToday() * dish.getSystemEfficiency();
if (customText != null) {
graph.addData("Solar " + p.getId() + graph.getDataNameDelimiter() + customText, solar);
} else {
graph.addData("Solar " + p.getId(), solar);
}
} else if (p instanceof FresnelReflector) {
final FresnelReflector reflector = (FresnelReflector) p;
final double solar = reflector.getSolarPotentialToday() * reflector.getSystemEfficiency();
if (customText != null) {
graph.addData("Solar " + p.getId() + graph.getDataNameDelimiter() + customText, solar);
} else {
graph.addData("Solar " + p.getId(), solar);
}
} else if (p instanceof Foundation) {
final boolean mean = group.getType().endsWith("(Mean)");
final Foundation foundation = (Foundation) p;
switch(foundation.getProjectType()) {
case Foundation.TYPE_PV_PROJECT:
double pv = foundation.getPhotovoltaicToday();
if (mean) {
pv /= foundation.getNumberOfSolarPanels();
if (customText != null) {
graph.addData("PV " + p.getId() + graph.getDataNameDelimiter() + customText + " mean", pv);
} else {
graph.addData("PV " + p.getId() + " mean", pv);
}
} else {
if (customText != null) {
graph.addData("PV " + p.getId() + graph.getDataNameDelimiter() + customText, pv);
} else {
graph.addData("PV " + p.getId(), pv);
}
}
break;
case Foundation.TYPE_CSP_PROJECT:
double csp = foundation.getCspToday();
if (mean) {
csp /= foundation.countParts(new Class[] { Mirror.class, ParabolicTrough.class, ParabolicDish.class });
if (customText != null) {
graph.addData("CSP " + p.getId() + graph.getDataNameDelimiter() + customText + " mean", csp);
} else {
graph.addData("CSP " + p.getId() + " mean", csp);
}
} else {
if (customText != null) {
graph.addData("CSP " + p.getId() + graph.getDataNameDelimiter() + customText, csp);
} else {
graph.addData("CSP " + p.getId(), csp);
}
}
break;
case Foundation.TYPE_BUILDING:
final double totalEnergy = foundation.getTotalEnergyToday();
graph.addData("Building " + p.getId(), totalEnergy);
break;
}
}
}
graph.repaint();
}
use of org.concord.energy3d.model.ParabolicDish in project energy3d by concord-consortium.
the class SolarRadiation method computeEnergyOfToday.
public void computeEnergyOfToday() {
updateTextures();
if (Scene.getInstance().getAlwaysComputeHeatFluxVectors()) {
for (final HousePart part : Scene.getInstance().getParts()) {
part.drawHeatFlux();
}
}
final Calendar today = Heliodon.getInstance().getCalendar();
final String city = (String) EnergyPanel.getInstance().getCityComboBox().getSelectedItem();
final double[] outsideTemperatureRange = Weather.computeOutsideTemperature(today, city);
for (final HousePart part : Scene.getInstance().getParts()) {
if (part instanceof Foundation) {
final Foundation foundation = (Foundation) part;
final int n = foundation.getHeatLoss().length;
final double[] heatLoss = new double[n];
final double[] passiveSolar = new double[n];
final double[] photovoltaic = new double[n];
final double[] csp = new double[n];
for (int i = 0; i < n; i++) {
final double groundHeatLoss = foundation.getHeatLoss()[i];
// In other words, geothermal energy is good in hot conditions. This is similar to passive solar energy, which is good in the winter but bad in the summer.
if (groundHeatLoss > 0) {
final double outsideTemperature = Weather.getInstance().getOutsideTemperatureAtMinute(outsideTemperatureRange[1], outsideTemperatureRange[0], i * Scene.getInstance().getTimeStep());
if (outsideTemperature >= foundation.getThermostat().getTemperature(today.get(Calendar.MONTH), today.get(Calendar.DAY_OF_WEEK) - Calendar.SUNDAY, today.get(Calendar.HOUR_OF_DAY))) {
heatLoss[i] -= groundHeatLoss;
}
} else {
heatLoss[i] += groundHeatLoss;
}
}
double solarPotentialTotal = 0;
for (final HousePart child : Scene.getInstance().getParts()) {
if (child.getTopContainer() == foundation) {
child.setSolarPotentialToday(0);
if (child instanceof SolarCollector) {
((SolarCollector) child).setYieldToday(0);
}
for (int i = 0; i < n; i++) {
solarPotentialTotal += child.getSolarPotential()[i];
child.setSolarPotentialToday(child.getSolarPotentialToday() + child.getSolarPotential()[i]);
if (child instanceof Wall || child instanceof Door || child instanceof Window || child instanceof Roof) {
heatLoss[i] += child.getHeatLoss()[i];
}
if (child instanceof Window) {
final Window window = (Window) child;
passiveSolar[i] += child.getSolarPotential()[i] * window.getSolarHeatGainCoefficient();
} else if (child instanceof SolarPanel) {
final SolarPanel sp = (SolarPanel) child;
// distributed efficiency must be handled for each individual cell
final double yield = sp.getSolarPotential()[i];
sp.setYieldToday(sp.getYieldToday() + yield);
photovoltaic[i] += yield;
} else if (child instanceof Rack) {
final Rack rack = (Rack) child;
// distributed efficiency must be handled for each individual cell
final double yield = rack.getSolarPotential()[i];
rack.setYieldToday(rack.getYieldToday() + yield);
photovoltaic[i] += yield;
} else if (child instanceof Mirror) {
final Mirror mirror = (Mirror) child;
final double yield = mirror.getSolarPotential()[i] * mirror.getSystemEfficiency();
mirror.setYieldToday(mirror.getYieldToday() + yield);
csp[i] += yield;
} else if (child instanceof ParabolicTrough) {
final ParabolicTrough trough = (ParabolicTrough) child;
final double yield = trough.getSolarPotential()[i] * trough.getSystemEfficiency();
trough.setYieldToday(trough.getYieldToday() + yield);
csp[i] += yield;
} else if (child instanceof ParabolicDish) {
final ParabolicDish dish = (ParabolicDish) child;
final double yield = dish.getSolarPotential()[i] * dish.getSystemEfficiency();
dish.setYieldToday(dish.getYieldToday() + yield);
csp[i] += yield;
} else if (child instanceof FresnelReflector) {
final FresnelReflector reflector = (FresnelReflector) child;
final double yield = reflector.getSolarPotential()[i] * reflector.getSystemEfficiency();
reflector.setYieldToday(reflector.getYieldToday() + yield);
csp[i] += yield;
}
}
}
}
if (foundation.getImportedNodes() != null) {
for (int i = 0; i < n; i++) {
solarPotentialTotal += foundation.getSolarPotential()[i];
foundation.setSolarPotentialToday(foundation.getSolarPotentialToday() + foundation.getSolarPotential()[i]);
}
}
double heatingTotal = 0.0;
double coolingTotal = 0.0;
double passiveSolarTotal = 0.0;
double photovoltaicTotal = 0.0;
double cspTotal = 0.0;
for (int i = 0; i < n; i++) {
if (heatLoss[i] < 0) {
heatLoss[i] -= passiveSolar[i];
} else {
heatLoss[i] = Math.max(0, heatLoss[i] - passiveSolar[i]);
}
if (heatLoss[i] > 0) {
heatingTotal += heatLoss[i];
} else {
coolingTotal -= heatLoss[i];
}
passiveSolarTotal += passiveSolar[i];
photovoltaicTotal += photovoltaic[i];
cspTotal += csp[i];
}
foundation.setSolarPotentialToday(solarPotentialTotal);
foundation.setPassiveSolarToday(passiveSolarTotal);
foundation.setPhotovoltaicToday(photovoltaicTotal);
foundation.setCspToday(cspTotal);
foundation.setHeatingToday(heatingTotal);
foundation.setCoolingToday(coolingTotal);
foundation.setTotalEnergyToday(heatingTotal + coolingTotal - photovoltaicTotal);
}
}
}
use of org.concord.energy3d.model.ParabolicDish in project energy3d by concord-consortium.
the class ParabolicDishAnnualAnalysis method show.
public void show() {
final HousePart selectedPart = SceneManager.getInstance().getSelectedPart();
String s = null;
int cost = -1;
String title = "Annual Yield of All Parabolic Dishes (" + Scene.getInstance().countParts(ParabolicDish.class) + " Dishes)";
if (selectedPart != null) {
if (selectedPart instanceof ParabolicDish) {
cost = (int) CspProjectCost.getPartCost(selectedPart);
s = selectedPart.toString().substring(0, selectedPart.toString().indexOf(')') + 1);
title = "Annual Yield";
} else if (selectedPart instanceof Foundation) {
title = "Annual Yield of Selected Foundation (" + ((Foundation) selectedPart).countParts(ParabolicDish.class) + " Parabolic Dishes)";
} else if (selectedPart.getTopContainer() instanceof Foundation) {
title = "Annual Yield of Selected Foundation (" + selectedPart.getTopContainer().countParts(ParabolicDish.class) + " Parabolic Dishes)";
}
}
final JDialog dialog = createDialog(s == null ? title : title + ": " + s + " (Cost: $" + cost + ")");
final JMenuBar menuBar = new JMenuBar();
dialog.setJMenuBar(menuBar);
menuBar.add(createOptionsMenu(dialog, null, true, true));
menuBar.add(createRunsMenu());
dialog.setVisible(true);
}
Aggregations