Line Design
LineDesign captures the characteristics and circuit configuration of a transmission corridor — excluding the conductor strung on it.
Fields
| Field | Type | Constraints | Description |
|---|---|---|---|
environment |
Environment |
— | Weather and geographical conditions |
nbr_circuits |
int |
1–3 | Number of circuits in the line corridor |
nbr_bundles |
int |
2–3 | Number of phases (AC) or poles (DC) |
nbr_conds_per_bundle |
int |
≥1 | Conductors per phase or pole |
length_km |
float |
>0 | Total line length (km or mile) |
avg_span_m |
float |
>0 | Average span between structures (m or ft) |
max_span_m |
float |
>0 | Longest individual span (m or ft) |
nbr_structures |
int |
≥1, optional | Auto-calculated from line length and average span |
max_sag_m |
float |
optional | Maximum allowable sag (m or ft) — required for sag feasibility checks |
structure_cost_dol |
float |
≥0 | Structure cost specific to used conductor (default 0) |
Auto-calculated Fields
If nbr_structures is not provided, it is computed automatically:
Construction
from refa import LineDesign
from refa.defaults import default_clear_environment
line_design = LineDesign(
environment=default_clear_environment(),
nbr_circuits=1,
nbr_bundles=3, # 3-phase AC
nbr_conds_per_bundle=1,
length_km=30,
avg_span_m=300,
max_span_m=300,
)
print(line_design.nbr_structures) # 101 (auto-calculated)
Setting a Sag Limit
line_design = LineDesign(
environment=default_clear_environment(),
nbr_circuits=1,
nbr_bundles=3,
nbr_conds_per_bundle=1,
length_km=30,
avg_span_m=300,
max_span_m=300,
max_sag_m=10.0, # sag feasibility will be checked against this
)
Sag feasibility requires max_sag_m
If max_sag_m is None (the default), is_sag_feasible() cannot be evaluated and will be skipped by project feasibility filtering.
Attribute Proxying
LineDesign proxies attribute access to its Environment, so you can read environmental properties directly on the design object:
print(line_design.ambient_temperature_c) # same as line_design.environment.ambient_temperature_c
print(line_design.wind_speed_m_per_s)
Creating a Line with +
from refa.defaults import acsr_795_0_drake
line = line_design + acsr_795_0_drake()
# equivalent to: Line(line_design=line_design, conductor=acsr_795_0_drake())
LineDesignImperial
In case of imperial unit system, the user can use the same constructor LineDesign, which will accept values in imperial units. These are converted to metric system with which all internal calculations are conducted.
| metric name —> imperial name |
| length_km —> length_mile |
| avg_span_m —> avg_span_ft |
| max_span_m —> max_span_ft |
| max_sag_m —> max_sag_ft |