Skip to content
This repository was archived by the owner on Sep 27, 2023. It is now read-only.

Commit

Permalink
Merge branch 'develop' into develop-fix-noaa-forecast
Browse files Browse the repository at this point in the history
  • Loading branch information
David P. Chassin committed Jan 13, 2022
2 parents 7aad05b + 0eb5ac7 commit 1ee293f
Show file tree
Hide file tree
Showing 7 changed files with 8,945 additions and 8,850 deletions.
20 changes: 19 additions & 1 deletion docs/Module/Powerflow/Pole.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,9 @@ object pole
equipment_moment "0 ft*lb";
equipment_moment_nowind "0 ft*lb";
critical_wind_speed "0 m/s";
guy_height "0 ft";
wire_moment "0 ft*lb";
wire_tension "0 ft*lb";
guy_height "0 ft";
}
~~~

Expand Down Expand Up @@ -218,6 +220,22 @@ The resisting moment on the pole.

Wind speed at pole failure.

### `wire_moment`

~~~
double wire_moment[ft*lb];
~~~

Wire moment due to conductor weight.

### `wire_tension`

~~~
double wire_tension[ft*lb];
~~~

Wire moment due to conductor tension.

### `guy_height`

~~~
Expand Down
8 changes: 7 additions & 1 deletion docs/Module/Powerflow/Pole_mount.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,14 @@ object pole_mount
equipment link_id;
height 0.0 ft;
offset 0.0 ft;
area 0.0 ft;
direction 0.0 deg;
weight 0.0 lbs;
area 0.0 ft;
pole_spacing 0.0 ft;
angle 0.0 deg;
weather <climate-object>;
wind_speed 0.0 m/s;
wind_direction 0.0 deg;
}
~~~

Expand Down Expand Up @@ -41,6 +46,7 @@ object pole
object pole_mount
{
equipment "line123";
weather "weather";
};
}
~~~
Expand Down
17,568 changes: 8,784 additions & 8,784 deletions module/powerflow/autotest/test_pole.csv

Large diffs are not rendered by default.

6 changes: 3 additions & 3 deletions module/powerflow/autotest/test_pole.glm
Original file line number Diff line number Diff line change
Expand Up @@ -191,6 +191,6 @@ object multi_recorder {
file test_pole.csv;
}

// #ifexist "../test_pole.csv"
// #on_exit 0 diff -q test_pole.csv ../test_pole.csv
// #endif
#ifexist "../test_pole.csv"
#on_exit 0 diff -q test_pole.csv ../test_pole.csv
#endif
59 changes: 29 additions & 30 deletions module/powerflow/pole.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -144,11 +144,11 @@ pole::pole(MODULE *mod)

PT_double, "wire_moment[ft*lb]", get_wire_moment_offset(),
PT_OUTPUT,
PT_DESCRIPTION, "wind moment at current wind speed",
PT_DESCRIPTION, "wire moment due to conductor weight",

PT_double, "wire_tension[ft*lb]", get_wire_tension_offset(),
PT_OUTPUT,
PT_DESCRIPTION, "wind tension at current wind speed",
PT_DESCRIPTION, "wire moment due to conductor tension",

PT_double, "guy_height[ft]", get_guy_height_offset(),
PT_DEFAULT, "0 ft",
Expand Down Expand Up @@ -231,7 +231,6 @@ int pole::init(OBJECT *parent)

}
verbose("repair_time = %g hr",repair_time);
verbose("weather = %s",weather);
// weather check
if ( weather )
{
Expand Down Expand Up @@ -314,7 +313,7 @@ int pole::init(OBJECT *parent)

// pole moment per unit of wind pressure
pole_moment_nowind = height * height * (config->ground_diameter+2*config->top_diameter)/72 * config->overload_factor_transverse_general;
verbose("pole_moment_nowind = %g ft.lb",pole_moment_nowind);
verbose("pole_moment_nowind = %g ft*lb (wind load is 1 lb/sf)",pole_moment_nowind);

// check install year
if ( install_year > gl_globalclock )
Expand Down Expand Up @@ -342,9 +341,8 @@ TIMESTAMP pole::precommit(TIMESTAMP t0)
}

height = config->pole_length - config->pole_depth - guy_height;
double diameter = config->ground_diameter
- height/(config->pole_length - config->pole_depth)
*(config->ground_diameter-config->top_diameter);
double diameter = config->top_diameter
+ height/(config->pole_length - config->pole_depth)*(config->ground_diameter-config->top_diameter);
double t0_year = 1970 + (int)(t0/86400/365.24);
double age = t0_year - install_year;
if ( age > 0 && config->degradation_rate > 0 )
Expand All @@ -354,14 +352,13 @@ TIMESTAMP pole::precommit(TIMESTAMP t0)
else
current_hollow_diameter = 0.0; // ignore future installation years
verbose("current_hollow_diameter = %g in",current_hollow_diameter);

}
else
{
verbose("pole degradation model disabled (age=%g, degradation_rate=%g)", age,config->degradation_rate);
}

// update resisting moment
// update resisting moment considering aging
// TODO: check constants and unit conversion of diameters
resisting_moment = 0.008186 // constant * pi^3
* config->strength_factor_250b_wood
Expand Down Expand Up @@ -403,17 +400,17 @@ TIMESTAMP pole::precommit(TIMESTAMP t0)
// pole_moment += 0.125 * rho * PI * (H*H) * (D0*D0 - DD*DD) * sin(tilt_angle/180*PI);
pole_moment += 0.125 * rho * PI * (H*H) * ((D0*D0+D1*D1+2*D0*D1)/6 + D1*D1/3) * sin(tilt_angle/180*PI);
}
verbose("pole_moment = %g ft.lb (tilt moment)",pole_moment);
verbose("pole_moment = %g ft*lb (tilt moment)",pole_moment);

// TODO: this needs to be moved to commit in order to consider equipment and wire wind susceptibility
wind_pressure = 0.00256*2.24 * (wind_speed)*(wind_speed); //2.24 account for m/s to mph conversion
wind_pressure = 0.00256 * (2.24*wind_speed) * (2.24*wind_speed); // 2.24 account for m/s to mph conversion
pole_moment_nowind = height * height * (config->ground_diameter+2*config->top_diameter)/72 * config->overload_factor_transverse_general;
double wind_pressure_failure = (resisting_moment - wire_tension) / (pole_moment_nowind + equipment_moment_nowind + wire_moment_nowind);
critical_wind_speed = sqrt(wind_pressure_failure / (0.00256 * 2.24));
verbose("wind_pressure = %g psi",wind_pressure); // TODO: units?
verbose("pole_moment_nowind = %g ft.lb.s/m",pole_moment_nowind); // TODO: units?
verbose("wind_pressure_failure = %g psi",wind_pressure_failure); // TODO: units?
verbose("critical_wind_speed = %g m/s",critical_wind_speed); // TODO: units?
double wind_pressure_failure = (resisting_moment-wire_tension-wire_moment) / (pole_moment_nowind+equipment_moment_nowind+wire_moment_nowind);
critical_wind_speed = sqrt(wind_pressure_failure / (0.00256 * 2.24 * 2.24));
verbose("wind_pressure = %g psf",wind_pressure); // unit: pounds per square foot
verbose("pole_moment_nowind = %g ft*lb (wind load is 1 lb/sf)",pole_moment_nowind);
verbose("wind_pressure_failure = %g psf",wind_pressure_failure); // unit: pounds per square foot
verbose("critical_wind_speed = %g m/s",critical_wind_speed);
last_wind_speed = wind_speed;

double wind_moment = 0.0;
Expand All @@ -423,13 +420,13 @@ TIMESTAMP pole::precommit(TIMESTAMP t0)
verbose("wind_angle = %g rad",beta);
wind_moment = wind_pressure * height * height * (config->ground_diameter+2*config->top_diameter)/72 * config->overload_factor_transverse_general;
double x = pole_moment + wind_moment*cos(beta);
verbose("x = %g ft.lb",x);
verbose("x = %g ft*lb",x);
double y = wind_moment*sin(beta);
verbose("y = %g ft.lb",y);
verbose("y = %g ft*lb",y);
pole_moment = sqrt(x*x+y*y);
}
verbose("wind_moment = %g ft.lb",wind_moment);
verbose("pole_moment = %g ft.lb (with wind)",pole_moment);
verbose("wind_moment = %g ft*lb",wind_moment);
verbose("pole_moment = %g ft*lb (with wind)",pole_moment);

recalc = true;
verbose("setting pole recalculation flag");
Expand Down Expand Up @@ -460,21 +457,22 @@ TIMESTAMP pole::postsync(TIMESTAMP t0) ////
// - pole calculate total moment and failure status
if ( recalc )
{
verbose("pole_moment = %g ft.lb",pole_moment);
verbose("equipment_moment = %g ft.lb",equipment_moment);
verbose("wire_moment = %g ft.lb",wire_moment);
verbose("wire_tension = %g psi",wire_tension);
verbose("pole_moment = %g ft*lb",pole_moment); // moment due to pole tilt and wind loads
verbose("equipment_moment = %g ft*lb",equipment_moment); // moment due to equipment weight and pole tilt
verbose("wire_moment = %g ft*lb",wire_moment); // moment due to conductor weight
verbose("wire_tension = %g ft*lb",wire_tension); // moment due to conductor tension
verbose("wire_load = %g ft*lb",wire_load); // // moment due to wind load on wires

total_moment = pole_moment + equipment_moment + wire_moment + wire_tension;
verbose("total_moment = %g ft.lb",total_moment);
total_moment = pole_moment + equipment_moment + wire_moment + wire_tension + wire_load;
verbose("total_moment = %g ft*lb",total_moment);

if ( wind_speed > 0.0 )
susceptibility = 2*(pole_moment+equipment_moment+wire_moment)/resisting_moment/(wind_speed)/(0.00256)/(2.24);
susceptibility = 2*(pole_moment+equipment_moment+wire_load)/resisting_moment/(wind_speed)/(0.00256)/(2.24);
else
susceptibility = 0.0;
verbose("susceptibility = %g ft.lb.s/m",susceptibility);
verbose("susceptibility = %g ft*lb.s/m",susceptibility);

if ( resisting_moment > 0.0 ) ////
if ( resisting_moment > 0.0 )
{
pole_stress = total_moment/resisting_moment;
}
Expand All @@ -494,6 +492,7 @@ TIMESTAMP pole::postsync(TIMESTAMP t0) ////
}

// M = a * V^2 + b * V + c
// TODO
pole_stress_polynomial_a = pole_moment_nowind + equipment_moment_nowind + wire_moment_nowind;
pole_stress_polynomial_b = 0.0;
pole_stress_polynomial_c = wire_tension;
Expand Down
Loading

0 comments on commit 1ee293f

Please sign in to comment.