package org.visico.utilitydss.server.processsim; import java.util.Arrays; import java.util.concurrent.TimeUnit; import org.visico.utilitydss.shared.Scenario; import desmoj.core.simulator.Model; import desmoj.core.simulator.TimeInstant; import desmoj.core.simulator.TimeSpan; import desmoj.core.advancedModellingFeatures.Bin; public class SectionProcessAll extends ParentProcess { /** * @author Simon * Constructor of the section * * Used to create a new section of a sewer line to be replaced * * @param owner the model this process belongs to * @param name this section's name * @param showInTrace flag to indicate if this process shall produce output * for the trace */ public SectionProcessAll(Model owner, String name, boolean showInTrace, int shore, int replacement, int old_separated, int new_separated, double num_put_connections, int old_pavement, int new_pavement, double section_length, double pipe_length, double section_width, double trench_width, double trench_depth, String old_sewer_type, String new_sewer_type, double old_diameter, double old_diameter_sep, double new_diameter, double new_diameter_sep, double asphalt_old, double asphalt_new, double cables, double length_connections, double diameter_connections, double foundation_type, double soil_removed, double soil_new, double pipes_old, double pipes_new, double rock_layer, double sand_layer, double old_put_area, double old_put_area_sep, double new_put_area, double new_put_area_sep, double bed_preparation, int pipe_connections[] ) { super(owner, name, showInTrace, shore, replacement, old_separated, new_separated, num_put_connections, old_pavement, new_pavement, section_length, pipe_length, section_width, trench_width, trench_depth, old_sewer_type, new_sewer_type, old_diameter, new_diameter, asphalt_old, asphalt_new, cables, length_connections, diameter_connections, foundation_type, soil_removed, soil_new, pipes_old, pipes_new, rock_layer, sand_layer, old_put_area, new_put_area, bed_preparation); myModel = (UtilitySimulation)owner; Shore = shore; // Indicates if shoring is used and if so what type is used. Replacement = replacement; // indicates if this section has old sewer to be removed Old_Separated = old_separated; // Indicates if the old section has combined or separated sewer: 0 is combined, 2 is separated New_Separated = new_separated; // Indicates if the new section has combined or separated sewer: 0 is combined, 2 is separated Old_pavement = old_pavement; // type of old pavement New_pavement = new_pavement; // type of new pavement Section_length = section_length; // length of section in Pipe_length = pipe_length; // length of pipes in Section_width = section_width; // width of section in Trench_width = trench_width; // width of Trench v Trench_depth = trench_depth; // depth of Trench in Old_sewer_type = old_sewer_type; // type of old sewer New_sewer_type = new_sewer_type; // type of new sewer Old_diameter = old_diameter; // diameter of old sewer Old_diameter_Sep = old_diameter_sep; // diameter of old DWA sewer in case of separated New_diameter = new_diameter; // diameter of new sewer New_diameter_Sep = new_diameter_sep; // diameter of new DWA sewer in case of separated Asphalt_old = asphalt_old; // layer thickness of old asphalt in Asphalt_new = asphalt_new; // layer thickness of new asphalt in // Cables = cables; // weight class of cables in the ground Length_connections = length_connections; // average length of connections Diameter_connections = diameter_connections;// average depth of connections Foundation_type = foundation_type; // type foundation used: 1 = , 2 = Soil_removed = soil_removed; // where is the removed soil placed: 1 = , 2 = Soil_new = soil_new; // where is the new soil placed: 1 = , 2 = Pipes_old = pipes_old; // where are the removed pipes placed: 1 = , 2 = Pipes_new = pipes_new; // where are the new pipes placed: 1 = , 2 = Rock_layer = rock_layer; // height of broken rock layer Sand_layer = sand_layer; // height of sand layer Old_put_area = old_put_area; // area of the old put Old_put_area_sep = old_put_area_sep; // area of the old put New_put_area = new_put_area; // area of the new put New_put_area_sep = new_put_area_sep; // area of the new put Pipe_connections = pipe_connections; // indicates if a pipe has a connection. } /** * Describes this section's life cycle. * This is the actual description of the work that is done * * First the section specific parameters are calculated * Next the activity durations are selected based on settings in UtilitySimulation.java * * After this the actual lifecycle is handled * the section will loop through the following stages: * 1. wait for breaker to break street or remove stones * 2. wait for excavator to excavate (excavator requires truck)(quantity of dirt not yet modelled) * 3. If shoring required: wait for crane to shore the section * 4. If replacement project: wait for crane to remove the old pipe * 5. wait for crew to prepare bed * 6. wait for crane to place pipe (pipe requires truck) - think how to model that a truck can already get a pipe * 7. wait for crew to handbackfill (first backfill) * 8. If shoring required: wait for crane to remove the trench * 9. If there are housing connections: housing connections * 10. wait for excavator to backfill (needs truck with backfill - excavator needed to load truck) (second backfill) * 11. wait for crew to prepare surface * 12. wait for road crew to pave the surface with asphalt or stones */ public void lifeCycle() { /** * Calculation of section specific parameters */ NUM_Pipe = (int) Math.ceil(Section_length / Pipe_length); // calculation of the required number of pipes Section_area = (Section_length * Section_width); // total surface of the section Pipe_area = (Pipe_length * Trench_width); // total surface of area around one pipe Trench_area = (Pipe_length * NUM_Pipe * Trench_width); // total surface of the trench Excavation_volume = (Pipe_area * Trench_depth); // excavation volume per pipe Total_area = (myModel.getTotal_length() * Section_width); // total working area of all sections if(this.Num_Connections != 0) // if there are housing connections backfill is only to top of main sewer pipe // height of first backfill in m (pipe diameter + 2x average wall thickness (wall = 0.13 * diameter) calculated by multiplying the pipe diameter with 1.26) {First_backfill_height = New_diameter * 1.26 * 0.001; // height of second backfill in m, only if there are connections Second_backfill_height = Trench_depth - First_backfill_height;} else // if there are no housing connections backfill is to bottom of surface layer {First_backfill_height = Trench_depth;} /** * Initiation of a duration database containing the activity durations for this section */ ProductionDatabase ProductionDB = new ProductionDatabase( myModel, //owner this, //name Shore, // number of pipes in section Replacement, // indicates if there is replacement Old_pavement, // type of old pavement New_pavement, // type of new pavement Trench_width, // width of Trench Trench_depth, // depth of Trench in Old_sewer_type, // type of old sewer New_sewer_type, // type of new sewer Old_diameter, // diameter of old sewer Old_diameter_Sep, // diameter of old DWA sewer in case of separated sewer New_diameter, // diameter of new sewer New_diameter_Sep, // diameter of new DWA sewer in case of separated sewer Asphalt_old, // layer thickness of old asphalt in Asphalt_new, // layer thickness of new asphalt in Cables, // weight class of cables in the ground Length_connections, // average length of connections Diameter_connections, // average depth of connections Foundation_type, // type foundation used: 1 = , 2 = Soil_removed, // where is the removed soil placed: 1 = , 2 = Soil_new, // where is the new soil placed: 1 = , 2 = Pipes_old, // where are the removed pipes placed: 1 = , 2 = Pipes_new, // where are the new pipes placed: 1 = , 2 = Rock_layer, // height of pavement preparation rock layer in m Sand_layer, // height of pavement preparation sand layer in m Old_put_area, // area of the old put Old_put_area_sep, // area of the new DWA put in case of separated sewer New_put_area, // area of the new put New_put_area_sep, // area of the new DWA put in case of separated sewer Bed_preparation // height of bed preparation layer ); //===================================================================================================================================================================== //===================================================================================================================================================================== /** Actual life cycle **/ /** * Section needs to retrieve 1 of this resource in order to start * This allows control to make the section wait to start the lifecycle until the user wants this. * The resource is supplied with 1 unit after a specified activity of the preceding section * Which activity this is can be selected in UtlitySimulation.java */ myModel.startingCondition.retrieve(1); //time instants for the different activitymsg's TimeInstant start_1 = myModel.presentTime(); // starting time of activity corresponding to detail level 1 as selected in UtilitySimulation.java TimeInstant start_2 = myModel.presentTime(); // starting time of activity corresponding to detail level 2 as selected in UtilitySimulation.java TimeInstant start_3 = myModel.presentTime(); // starting time of activity corresponding to detail level 3 as selected in UtilitySimulation.java connections_done = 0; /** * Delay before 2nd crews becomes operational * this allows practitioners to test what delay in 2nd crew arival on work site is optimal. * Only activated if there is a second crew and in first section (first sewer line or put) * * COMMENT: this results in errors in usage percentages since the program thinks the resource is in use * A better solution would be to instantiate the resource after the selected amount of time has passed. */ if(myModel.getSecondCrew()== true && this.getIdentNumber() == 1){ SecondCrewDelay Delay = new SecondCrewDelay( myModel, //owner "Delay for second crew", //name true); Delay.activate(); } // 1. break the section or remove stone pavement /** * start new breaking process */ Breaking pavementbreaking = new Breaking( myModel, this, "Breaking Section ", true, Old_pavement, Total_area, Section_area, ProductionDB.getRemove_pavement()); pavementbreaking.activate(); this.passivate(); // this needs to passivate while breaking performs it's activities // gathers data on total duration of main sewer loop (1 task contains all pipes in section), only active if turned on in utilitysimulation.java start_1 = myModel.presentTime(); // for loop iterating trough main loop (iterates trough all pipes in this section) for (int i=1; i<=this.NUM_Pipe; i++) { // gathers start time of every pipe in main loop, only active if turned on in utilitysimulation.java start_2 = myModel.presentTime(); // 2. excavate the section myModel.crews.provide(1); myModel.excavators.provide(1); myModel.trucks.provide(1); start_3 = myModel.presentTime(); hold (new TimeSpan((myModel.getExcavatingTime() * (Excavation_volume/ProductionDB.getExcavation()) * ProductionDB.getSoil_rm_factor() * ProductionDB.getCables_weight()), TimeUnit.HOURS)); ActivityMessage msg_2 = new ActivityMessage(myModel, this, start_3, "Excavate pipe " + i, myModel.presentTime(), 3) ; sendMessage(msg_2); sendTraceNote("Activity: " + getName() + " Pipe: " + i + " Excavating Start: " + start_3.toString() + " End: " + myModel.presentTime().toString()); myModel.crews.takeBack(1); myModel.excavators.takeBack(1); myModel.trucks.takeBack(1); // Closing sewer // One time activity in first section or put in first iteration of pipe if(this.getIdentNumber() == 1 && i == 1){ myModel.crews.provide(1); start_3 = myModel.presentTime(); hold (new TimeSpan((myModel.getClosingTime() * ProductionDB.getClosing_sewer()), TimeUnit.HOURS)); ActivityMessage msg_2a = new ActivityMessage(myModel, this, start_3, "Closing sewer " + i, myModel.presentTime(), 3) ; sendMessage(msg_2a); sendTraceNote("Activity: " + getName() + " Pipe: " + i + " Closing sewer: " + start_3.toString() + " End: " + myModel.presentTime().toString()); myModel.crews.takeBack(1); } // 3. shore the section // only for projects that require shoring (set variable Shore to right value in simulation class) if(this.Shore != 0) { myModel.crews.provide(1); myModel.excavators.provide(1); start_3 = myModel.presentTime(); hold (new TimeSpan((myModel.getShoringTime() * (Pipe_length*ProductionDB.getShoring()) * ProductionDB.getCables_weight() * ProductionDB.getCables_weight()), TimeUnit.HOURS)); ActivityMessage msg_3 = new ActivityMessage(myModel, this, start_3, "Shore " + i, myModel.presentTime(), 3) ; sendMessage(msg_3); sendTraceNote("Activity: " + getName() + " Pipe: " + i + " Shoring: " + start_3.toString() + " End: " + myModel.presentTime().toString()); myModel.crews.takeBack(1); myModel.excavators.takeBack(1); } // 4. remove the pipe // only for replacement projects (set variable Replacement in UtilitySimulation.java class to true/false ) if(Replacement == 1) { myModel.crews.provide(1); myModel.excavators.provide(1); for(int j=1; j<=Old_Separated; j++){ start_3 = myModel.presentTime(); if(j == 1){hold (new TimeSpan((myModel.getPipeRemoveTime() * (Pipe_length/ProductionDB.getPipe_removal()) * ProductionDB.getPipe_rm_factor() * ProductionDB.getCables_weight()), TimeUnit.HOURS));} // pipe removal combined sewer or HWA sewer else{hold (new TimeSpan((myModel.getPipeRemoveTime() * (Pipe_length/ProductionDB.getPipe_removal_sep()) * ProductionDB.getPipe_rm_factor() * ProductionDB.getCables_weight()), TimeUnit.HOURS));} // pipe removal separated sewer Dwa sewer ActivityMessage msg_4 = new ActivityMessage(myModel, this, start_3, "Remove Pipe " + i +"."+ j, myModel.presentTime(), 3) ; sendMessage(msg_4); sendTraceNote("Activity: " + getName() + " Pipe: " + i + " Remove pipe: " + start_3.toString() + " End: " + myModel.presentTime().toString()); } myModel.crews.takeBack(1); myModel.excavators.takeBack(1); } // 5a Foundation if(Foundation_type != 0) { myModel.crews.provide(1); myModel.excavators.provide(1); start_3 = myModel.presentTime(); hold (new TimeSpan((myModel.getPipeRemoveTime() * (Pipe_length/ProductionDB.getFoundation_duration())), TimeUnit.HOURS)); ActivityMessage msg_5 = new ActivityMessage(myModel, this, start_3, "Foundation " + i, myModel.presentTime(), 3) ; sendMessage(msg_5); sendTraceNote("Activity: " + getName() + " Pipe: " + i + " Foundation: " + start_3.toString() + " End: " + myModel.presentTime().toString()); myModel.crews.takeBack(1); myModel.excavators.takeBack(1); } // 5b prepare the bed // TODO bed preparations not always necessary? is already possible by keeping the activity 0 but then it still shows in output. // TODO possibly make it the lightest variant of foundation? myModel.crews.provide(1); myModel.excavators.provide(1); start_3 = myModel.presentTime(); hold (new TimeSpan((myModel.getBedPreparationTime() * ((Pipe_area * Bed_preparation)/ProductionDB.getPreparation())), TimeUnit.HOURS)); ActivityMessage msg_6 = new ActivityMessage(myModel, this, start_3, "Prepare Bed " + i, myModel.presentTime(), 3) ; sendMessage(msg_6); sendTraceNote("Activity: " + getName() + " Pipe: " + i + " Prepare Bed: " + start_3.toString() + " End: " + myModel.presentTime().toString()); myModel.crews.takeBack(1); myModel.excavators.takeBack(1); // 6. install the pipe myModel.crews.provide(1); myModel.excavators.provide(1); for(int j=1; j<=New_Separated; j++){ start_3 = myModel.presentTime(); if(j == 1){hold (new TimeSpan((myModel.getPipePlacingTime() * (Pipe_length/ProductionDB.getPipe_placement()) * ProductionDB.getPipe_pl_factor() * ProductionDB.getCables_weight()), TimeUnit.HOURS));}// pipe placement combined sewer or HWA sewer else{hold (new TimeSpan((myModel.getPipePlacingTime() * (Pipe_length/ProductionDB.getPipe_placement_sep()) * ProductionDB.getPipe_pl_factor() * ProductionDB.getCables_weight()), TimeUnit.HOURS));} // pipe placement separated sewer Dwa sewer ActivityMessage msg_7 = new ActivityMessage(myModel, this, start_3, "Install Pipe " + i + "."+ j, myModel.presentTime(), 3) ; sendMessage(msg_7); sendTraceNote("Activity: " + getName() + " Pipe: " + i + " Install Pipe: " + start_3.toString() + " End: " + myModel.presentTime().toString()); } myModel.crews.takeBack(1); myModel.excavators.takeBack(1); // 7. First backfill + compacting myModel.crews.provide(1); myModel.excavators.provide(1); start_3 = myModel.presentTime(); // if there are housing connections backfill is only to top of main sewer pipe hold (new TimeSpan((myModel.getBackfillTime() * ((First_backfill_height * Pipe_area)/ProductionDB.getBackfill()) * ProductionDB.getSoil_pl_factor() * ProductionDB.getCables_weight()), TimeUnit.HOURS)); ActivityMessage msg_8 = new ActivityMessage(myModel, this, start_3, "First Backfill " + i, myModel.presentTime(), 3); sendMessage(msg_8); sendTraceNote("Activity: " + getName() + " Pipe: " + i + " First Backfill: " + start_3.toString() + " End: " + myModel.presentTime().toString()); myModel.crews.takeBack(1); myModel.excavators.takeBack(1); // 8. remove shoring // only for projects that require shoring (set variable Shore to right value in simulation class) if(this.Shore != 0) { myModel.crews.provide(1); myModel.excavators.provide(1); start_3 = myModel.presentTime(); hold (new TimeSpan((myModel.getRemoveTrenchTime() * (Pipe_length*ProductionDB.getShoring_remove()) * ProductionDB.getCables_weight()), TimeUnit.HOURS)); ActivityMessage msg_9 = new ActivityMessage(myModel, this, start_3, "Remove Shoring " + i, myModel.presentTime(), 3) ; sendMessage(msg_9); sendTraceNote("Activity: " + getName() + " Pipe: " + i + " Remove Shoring: " + start_3.toString() + " End: " + myModel.presentTime().toString()); myModel.crews.takeBack(1); myModel.excavators.takeBack(1); } // gathers data on total construction time of pipe in main sewer loop, only active if turned on in utilitysimulation.java ActivityMessage msg = new ActivityMessage(myModel, this, start_2, "Pipe " + i + " construction", myModel.presentTime(), 2) ; sendMessage(msg); /** * If this pipe has a connection (rain or house) a process for developing this connection should be initialed. * * The loop iterates trough the total length of the array. * A connection process is only started if there is a connection in this pipe. */ for(int j=0; j<Pipe_connections.length; j++) { if(Pipe_connections[j] == i) { /** * Initiation of the connections process. This process can be performed by the same crew as the main sewer after the main * sewer is completed or simultaneously by another crew after a certain amount of work is done on the main sewer. * */ Connections housing_connection = new Connections( myModel, // owner this, // parent "housing connection ", // name true, // show in trace ProductionDB.getConnection_duration_hwa(), Second_backfill_height, Pipe_area, ProductionDB.getBackfill(), ProductionDB.getSoil_pl_factor()); housing_connection.activate(); System.out.println("connection started"); this.Num_Connections ++; // if there is only one crew the main process waits till the connection is constructed if (myModel.getSecondCrew() == false) { this.passivate(); } } } // End of pipe iteration lifecycle } // sets flags that this section is done with all pipes myModel.pipes_done(); // Stops main sewer crew if there are second crews for connections and main crews completed all their work in all sections. if(myModel.getSecondCrew()) // if there are second crews: { if (UtilitySimulation.getPipeCounter() == myModel.getNUM_SEC()) { myModel.crews.stopUse(); myModel.excavators.stopUse(); System.out.println("resource crews stopped at simulation time " + myModel.presentTime() + " 2nd crew finishes housing connections"); System.out.println("resource excavators stopped at simulation time " + myModel.presentTime()); } } // gathers data on total duration of main sewer loop (1 task contains all pipes in section), only active if turned on in utilitysimulation.java ActivityMessage msg = new ActivityMessage(myModel, this, start_1, "main sewer loop", myModel.presentTime(), 1) ; sendMessage(msg); // Allows the next section to start after this if setting is set to 1 in UtilitySimulation.java) // setting 1 is only possible if there are 2ND crews for connection work if(myModel.getSectionWait() == 1) { myModel.startingCondition.store(1); } // if there are connections and not all connections are finished yet this passivates and waits until all connections have finished. if(Num_Connections != 0 && connections_done < Num_Connections ){ setPassive(true); this.passivate(); } if (Scenario.getNUM_3RDCREW() != 0 && Num_Connections != 0){ SecondBackfill second_backfill = new SecondBackfill( myModel, // owner this, // parent "Second Backfill ", // name true, // show in trace Second_backfill_height, Trench_area, ProductionDB.getBackfill(), ProductionDB.getSoil_pl_factor()); second_backfill.activate(); System.out.println("second backfill started"); setPassive(true); this.passivate(); } /** * work cannot proceed until all connections have been made and second backfill is completed * for each connection completed one unit is stored in: Connections_finished_counter * a number of units equal to the total number of connections is requested and needs to be delivered before the process continues */ myModel.backfill(); if (UtilitySimulation.getBackfillCounter() == myModel.getNUM_SEC()) { myModel.trucks.stopUse(); if(myModel.getSecondCrew()){ myModel.secondcrews.stopUse(); System.out.println("resource second crews stopped at simulation time " + myModel.presentTime()); if(Scenario.getNUM_3RDCREW() != 0){ myModel.thirdcrews.stopUse(); System.out.println("resource third crews stopped at simulation time " + myModel.presentTime()); } } else { myModel.crews.stopUse(); myModel.excavators.stopUse(); System.out.println("resource crews stopped at simulation time " + myModel.presentTime()); System.out.println("resource excavators stopped at simulation time " + myModel.presentTime()); } System.out.println("resource trucks stopped at simulation time " + myModel.presentTime()); } // Allows the next section to start after this if setting is set to 2 in UtilitySimulation.java) if(myModel.getSectionWait() == 2) { myModel.startingCondition.store(1); } // TODO It could also be that only a broken-stone road is constructed and paving alone is performed later // 11a. roll/prepare surface - sand for brick paving if(New_pavement == 2){ myModel.rollers.provide(1); start_3 = myModel.presentTime(); hold (new TimeSpan((myModel.getSurfacePrepareTime() * (Section_area/ProductionDB.getPaving_preparation())), TimeUnit.HOURS)); ActivityMessage msg_12 = new ActivityMessage(myModel, this, start_3, "Roll ", myModel.presentTime(), 0) ; sendMessage(msg_12); sendTraceNote("Activity: " + getName() + " Compact: " + start_3.toString() + " End: " + myModel.presentTime().toString()); myModel.rollers.takeBack(1); myModel.prepare(); if (UtilitySimulation.getPrepareCounter() == myModel.getNUM_SEC()) { myModel.rollers.stopUse(); System.out.println("resource rollers stopped at simulation time " + myModel.presentTime()); } } // 11b. roll/prepare surface - broken rock for asphalt paving // TODO finish & investigate if this is a choice or always the same + who does this? if(New_pavement == 1 ) {myModel.trucks.provide(1); start_3 = myModel.presentTime(); hold (new TimeSpan((myModel.getSurfacePrepareTime() * ((Section_length * Rock_layer )/ProductionDB.getPaving_preparation())), TimeUnit.HOURS)); ActivityMessage msg_13 = new ActivityMessage(myModel, this, start_3, "Roll ", myModel.presentTime(), 0) ; sendMessage(msg_13); sendTraceNote("Activity: " + getName() + " Broken rock: " + start_3.toString() + " End: " + myModel.presentTime().toString()); myModel.trucks.takeBack(1); myModel.prepare(); if (UtilitySimulation.getPrepareCounter() == myModel.getNUM_SEC()) { myModel.rollers.stopUse(); System.out.println("resource rollers stopped at simulation time " + myModel.presentTime()); } } // Allows the next section to start after this if setting is set to 3 in UtilitySimulation.java) if(myModel.getSectionWait() == 3) { myModel.startingCondition.store(1); } // 12. pave /** * start new paving process */ Paving pavement = new Paving( myModel, this, "Paving Section ", true, New_pavement, Total_area, Section_area, ProductionDB.getPaving_time(), Rock_layer, ProductionDB.getPaving_preparation()); pavement.activate(); this.passivate(); //this needs to passivate while paving performs it's activities // Allows the next section to start after this if setting is set to 5 in UtilitySimulation.java) if(myModel.getSectionWait() == 4) { myModel.startingCondition.store(1); } System.out.println(this + " completed"); } //===================================================================================================================================================================== //===================================================================================================================================================================== /** * General section parameters, set in UttilitySimulation.java */ private UtilitySimulation myModel; private int Shore; // Indicates if shoring is used and if so what type is used. private int Replacement; // indicates if this section has old sewer to be removed private int Old_Separated; // Indicates if the old section has combined or separated sewer: 0 is combined, 2 is separated private int New_Separated; // Indicates if the new section has combined or separated sewer: 0 is combined, 2 is separated int Num_Connections; // indicates the number of connections in this section private int Old_pavement; // type of old pavement private int New_pavement; // type of new pavement private double Section_length; // length of section in m private double Pipe_length; // length of pipes in m private double Section_width; // width of section in m private double Trench_width; // width of Trench in m private double Trench_depth; // depth of Trench in m private String Old_sewer_type; // type of old sewer private String New_sewer_type; // type of new sewer private double Old_diameter; // diameter of old sewer private double Old_diameter_Sep; // diameter of old DWA sewer in case of separated sewer private double New_diameter; // diameter of new sewer private double New_diameter_Sep; // diameter of new DWA sewer in case of separated sewer private double Old_put_area; // Area of the old put private double Old_put_area_sep; // Area of the old DWA put in case of separated sewer private double New_put_area; // Area of the new put private double New_put_area_sep; // Area of the new DWA put in case of separated sewer private double Asphalt_old; // layer thickness of old asphalt in mm private double Asphalt_new; // layer thickness of new asphalt in mm private double Cables; // weight class of cables in the ground private double Length_connections; // average length of connections in m private double Diameter_connections;// average depth of connections in m private double Foundation_type; // type foundation used: 1 = solidified sand, 2 = styrofoam plate, 3 = pole construction private double Soil_removed; // where is the removed soil placed: 0 = next to trench 1 = in depot, 2 = transported off site private double Soil_new; // where is the new soil placed: 0 = next to trench 1 = in depot, 2 = transported off site private double Pipes_old; // where are the removed pipes placed: 0 = next to trench 1 = in depot, 2 = transported off site private double Pipes_new; // where are the new pipes placed: 0 = next to trench 1 = in depot, 2 = transported off site private double Rock_layer; // height of pavement preparation rock layer in m private double Sand_layer; // height of pavement preparation sand layer in m private double Bed_preparation; // height of bed preparation sand layer in m private int Pipe_connections[]; // indicates if a pipe has a connection. /** * Test for reading the data from an arraylist in UtilitySimulation corresponding to this section */ // private int pipe = (int) myModel.pipes.get((this.getIdentNumber()).intValue(); /** * local section parameters **/ int connections_done; // number of connections done by 2nd crew already while main crew is still working on main sewer private int NUM_Pipe; // calculation of the required number of pipes private double Section_area; // total surface of the section private double Pipe_area; // total area around one pipe private double Trench_area; // total surface of the trench private double Excavation_volume; // excavation volume per pipe private double Total_area; // total working area of all sections private double First_backfill_height; // height of first backfill in m (pipe diameter + 2x average wall thinkness) private double Second_backfill_height; // height of first backfill in m (pipe diameter + 2x average wall thinkness) /** * Indicator for state of the class */ private boolean passive; public boolean isPassive() { return passive; } public void setPassive(boolean passive) { this.passive = passive; } }