Tutorial 2a - Building a sector-shaped cable design
This tutorial demonstrates how to model a typical low-voltage three-core power cable with sector-shaped conductors using the LineCableModels.jl package. The objective is to build a complete representation of a three-core 1 kV cable with 95 mm² aluminum sector-shaped conductors and a concentric copper neutral.
Tutorial outline
- Introduction
- Getting started
- Cable and Material Data
- Sector-Shaped Core Conductors
- Concentric Neutral and Outer Jacket
- Assembling the Cable Design
- Examining the Cable Design
- Conclusion
Introduction
Three-core power cables with sector-shaped conductors are common in low-voltage distribution networks. Their compact design allows for efficient use of space. This tutorial will guide you through creating a detailed CableDesign for such a cable.
This tutorial covers:
- Defining materials with corrected resistivity.
- Creating sector-shaped conductors using
SectorParamsandSector. - Assembling a multi-core
CableDesign. - Modeling a concentric neutral wire array.
- Previewing the final cable design.
Getting started
Load the package and set up the environment:
using LineCableModels
using DataFrames
import LineCableModels.BackendHandler: renderfig #hide
fullfile(filename) = joinpath(@__DIR__, filename); #hide
set_verbosity!(0); #hide
nothing #hideCable and Material Data
We start by defining the materials. We will create a custom aluminum material with a resistivity corrected based on its nominal DC resistance, and a PVC material for insulation.
Initialize materials library and add a PVC material
materials = MaterialsLibrary(add_defaults=true)
pvc = Material(Inf, 8.0, 1.0, 20.0, 0.1) # simple PVC
add!(materials, "pvc", pvc)
copper = get(materials, "copper")
aluminum = get(materials, "aluminum")Material with properties: [rho=2.826e-8, eps_r=1.0, mu_r=1.0, T0=20.0, alpha=0.00429]Sector-Shaped Core Conductors
The core of the cable consists of three sector-shaped aluminum conductors. We define the geometry using SectorParams based on datasheet or standard values.
=== Sector (core) geometry (table data) === Based on Urquhart's paper for a 3-core 95mm^2 cable
n_sectors = 3
r_back_mm = 10.24 # sector radius b
d_sector_mm = 9.14 # sector depth s
r_corner_mm = 1.02 # corner radius c
theta_cond_deg = 119.0 # sector angle φ
ins_thick = 1.1e-3 # core insulation thickness
sector_params = SectorParams(
n_sectors,
r_back_mm / 1000,
d_sector_mm / 1000,
r_corner_mm / 1000,
theta_cond_deg,
ins_thick
)SectorParams{Float64}(3, 0.01024, 0.00914, 0.00102, 119.0, 0.0011)With the sector parameters defined, we can create the individual Sector conductors and their insulation. Each sector is rotated to form the 3-core bundle.
rot_angles = (0.0, 120.0, 240.0)
sectors = [Sector(sector_params, ang, aluminum) for ang in rot_angles]
insulators = [SectorInsulator(sectors[i], ins_thick, pvc) for i in 1:3]
components = [
CableComponent("core1", ConductorGroup(sectors[1]), InsulatorGroup(insulators[1])),
CableComponent("core2", ConductorGroup(sectors[2]), InsulatorGroup(insulators[2])),
CableComponent("core3", ConductorGroup(sectors[3]), InsulatorGroup(insulators[3]))
]3-element Vector{CableComponent{Float64}}:
CableComponent{Float64}("core1", ConductorGroup{Float64}(0.0, 0.01024, 9.202272485708818e-5, 0, 0.0, 0.0003071415244864152, 0.00429, 0.004214990448041226, LineCableModels.DataModel.AbstractConductorPart{Float64}[Sector{Float64}(0.0, 0.01024, SectorParams{Float64}(3, 0.01024, 0.00914, 0.00102, 119.0, 0.0011), 0.0, Material{Float64}(2.8264e-8, 1.0, 1.000022, 20.0, 0.00429), 20.0, 9.202272485708818e-5, 0.0003071415244864152, 0.004214990448041226, GeometryBasics.Point{2, Float64}[[-0.0005176891572773457, 0.00157511280849576], [-0.0004850826517213136, 0.0015567037044093013], [-0.0004518226196523756, 0.0015395039226859808], [-0.0004179535317234695, 0.0015235365135595202], [-0.00038352119736373425, 0.0015088228974491358], [-0.00034857209539040923, 0.0014953830977901816], [-0.000313153286697343, 0.0014832350425422192], [-0.0002773123560473323, 0.001472395146265626], [-0.00024109779042191803, 0.0014628780772909522], [-0.0002045582077698782, 0.0014546967577189207] … [-0.007760071195662022, 0.006015402264893055], [-0.007729159668087959, 0.005961365066468716], [-0.007695009000599384, 0.005909314379096031], [-0.007657746784389019, 0.0058594439178705215], [-0.007617511786520481, 0.0058119394816458225], [-0.007574453484266996, 0.005766978487372398], [-0.007528732996433973, 0.005724727641791105], [-0.007480519823729992, 0.005685344338417053], [-0.007429993711411953, 0.005648976191878319], [-0.007377343252301216, 0.005615757778286934]], [2.1877252787128043e-10, 0.006463778205215931])]), Material{Float64}(1.0117851978807552e-7, 0.0, 3.550617177370004, 20.0, 0.00429), InsulatorGroup{Float64}(0.01024, 0.011340000000000001, 4.538243621584221e-5, 2.2203133669309363e-9, 0.0, LineCableModels.DataModel.AbstractInsulatorPart{Float64}[SectorInsulator{Float64}(0.01024, 0.011340000000000001, Sector{Float64}(0.0, 0.01024, SectorParams{Float64}(3, 0.01024, 0.00914, 0.00102, 119.0, 0.0011), 0.0, Material{Float64}(2.8264e-8, 1.0, 1.000022, 20.0, 0.00429), 20.0, 9.202272485708818e-5, 0.0003071415244864152, 0.004214990448041226, GeometryBasics.Point{2, Float64}[[-0.0005176891572773457, 0.00157511280849576], [-0.0004850826517213136, 0.0015567037044093013], [-0.0004518226196523756, 0.0015395039226859808], [-0.0004179535317234695, 0.0015235365135595202], [-0.00038352119736373425, 0.0015088228974491358], [-0.00034857209539040923, 0.0014953830977901816], [-0.000313153286697343, 0.0014832350425422192], [-0.0002773123560473323, 0.001472395146265626], [-0.00024109779042191803, 0.0014628780772909522], [-0.0002045582077698782, 0.0014546967577189207] … [-0.007760071195662022, 0.006015402264893055], [-0.007729159668087959, 0.005961365066468716], [-0.007695009000599384, 0.005909314379096031], [-0.007657746784389019, 0.0058594439178705215], [-0.007617511786520481, 0.0058119394816458225], [-0.007574453484266996, 0.005766978487372398], [-0.007528732996433973, 0.005724727641791105], [-0.007480519823729992, 0.005685344338417053], [-0.007429993711411953, 0.005648976191878319], [-0.007377343252301216, 0.005615757778286934]], [2.1877252787128043e-10, 0.006463778205215931]), 0.0011, Material{Float64}(Inf, 8.0, 1.0, 20.0, 0.1), 20.0, 4.538243621584221e-5, 2.2203133669309363e-9, 0.0, GeometryBasics.Point{2, Float64}[[-0.0010672830103877176, 0.0006221970146746171], [-0.0010083003307166394, 0.000588896350563364], [-0.0009391639790693278, 0.0005531438246783684], [-0.0008687632940728937, 0.000519953780042955], [-0.0007971920727534049, 0.0004893699844732368], [-0.0007245466146488504, 0.0004614339189398975], [-0.0006509257694640687, 0.0004361832081535267], [-0.0005764263950220039, 0.0004136512739381739], [-0.0005011482505562813, 0.0003938684246676315], [-0.00042519606287864627, 0.0003768625073996912] … [-0.008731561932922828, 0.00549835913585353], [-0.008667298152504978, 0.005386018047383631], [-0.008596301038228093, 0.005277807904761229], [-0.008518837061577791, 0.005174132797996161], [-0.008435189113766523, 0.005075371798552079], [-0.008345674076993109, 0.004981901205307098], [-0.008250627814006544, 0.004894067825331136], [-0.008150392276215722, 0.004812189650295556], [-0.0080453504350271, 0.004736581674581929], [-0.007950100908324148, 0.004676486506831396]])]), Material{Float64}(Inf, 4.072241040617575, 1.0, 20.0, 0.0))
CableComponent{Float64}("core2", ConductorGroup{Float64}(0.0, 0.01024, 9.202269575325772e-5, 0, 0.0, 0.00030714162162543925, 0.00429, 0.004214989722730465, LineCableModels.DataModel.AbstractConductorPart{Float64}[Sector{Float64}(0.0, 0.01024, SectorParams{Float64}(3, 0.01024, 0.00914, 0.00102, 119.0, 0.0011), 120.0, Material{Float64}(2.8264e-8, 1.0, 1.000022, 20.0, 0.00429), 20.0, 9.202269575325772e-5, 0.00030714162162543925, 0.004214989722730465, GeometryBasics.Point{2, Float64}[[-0.001105243107303977, -0.0012358883395791054], [-0.001105603645555675, -0.0011984457960352302], [-0.0011073382338508964, -0.0011610417859628797], [-0.0011104445438832045, -0.001123726600781083], [-0.0011149183847010136, -0.0010865505319088697], [-0.0011207537027075887, -0.0010495638707652688], [-0.0011279425816610456, -0.0010128162102773786], [-0.0011364754755049944, -0.0009763571433722973], [-0.0011463406262919307, -0.0009402358555234969], [-0.0011575252283364534, -0.000904501008335501] … [-0.0013294555246829987, -0.00972811970859766], [-0.001298113726079464, -0.009674331173300743], [-0.001270111883059144, -0.009618730284273624], [-0.0012455538380891085, -0.009561525657773018], [-0.001224531326442957, -0.009502928704023361], [-0.0012071231612935662, -0.009443158283829689], [-0.0011933930218219757, -0.009382437914609909], [-0.0011833927128463984, -0.009320992045104504], [-0.001177160069346428, -0.009259051643311977], [-0.0011747173266485333, -0.009196845814585686]], [-0.0055977962911129, -0.0032318891026079655])]), Material{Float64}(1.0117855178759979e-7, 0.0, 3.55061786568551, 20.0, 0.00429), InsulatorGroup{Float64}(0.01024, 0.011340000000000001, 4.53824651929065e-5, 2.22031162044118e-9, 0.0, LineCableModels.DataModel.AbstractInsulatorPart{Float64}[SectorInsulator{Float64}(0.01024, 0.011340000000000001, Sector{Float64}(0.0, 0.01024, SectorParams{Float64}(3, 0.01024, 0.00914, 0.00102, 119.0, 0.0011), 120.0, Material{Float64}(2.8264e-8, 1.0, 1.000022, 20.0, 0.00429), 20.0, 9.202269575325772e-5, 0.00030714162162543925, 0.004214989722730465, GeometryBasics.Point{2, Float64}[[-0.001105243107303977, -0.0012358883395791054], [-0.001105603645555675, -0.0011984457960352302], [-0.0011073382338508964, -0.0011610417859628797], [-0.0011104445438832045, -0.001123726600781083], [-0.0011149183847010136, -0.0010865505319088697], [-0.0011207537027075887, -0.0010495638707652688], [-0.0011279425816610456, -0.0010128162102773786], [-0.0011364754755049944, -0.0009763571433722973], [-0.0011463406262919307, -0.0009402358555234969], [-0.0011575252283364534, -0.000904501008335501] … [-0.0013294555246829987, -0.00972811970859766], [-0.001298113726079464, -0.009674331173300743], [-0.001270111883059144, -0.009618730284273624], [-0.0012455538380891085, -0.009561525657773018], [-0.001224531326442957, -0.009502928704023361], [-0.0012071231612935662, -0.009443158283829689], [-0.0011933930218219757, -0.009382437914609909], [-0.0011833927128463984, -0.009320992045104504], [-0.001177160069346428, -0.009259051643311977], [-0.0011747173266485333, -0.009196845814585686]], [-0.0055977962911129, -0.0032318891026079655]), 0.0011, Material{Float64}(Inf, 8.0, 1.0, 20.0, 0.1), 20.0, 4.53824651929065e-5, 2.22031162044118e-9, 0.0, GeometryBasics.Point{2, Float64}[[-5.196890718730607e-6, -0.0012353921287796468], [-5.849079774364243e-6, -0.0011676611265922408], [-9.454636957745765e-6, -0.0010899122465985406], [-1.5911480576084967e-5, -0.001012348090798807], [-2.5210889146608673e-5, -0.0009350732239523054], [-3.734011783243637e-5, -0.0008581931514643174], [-5.2282993477771903e-5, -0.0007818090970821656], [-7.001923573658536e-5, -0.0007060262671319982], [-9.052557313918666e-5, -0.0006309422332391902], [-0.00011377496013980823, -0.0005566603510251821] … [-0.0003959373953246716, -0.010310933225411949], [-0.0003307791687652376, -0.010199109216410073], [-0.0002725660067930632, -0.010083520269054581], [-0.00022151241882657118, -0.009964597877850293], [-0.00017780565970403994, -0.009842772142374048], [-0.00014161599519684062, -0.009718515999598483], [-0.00011307305811698062, -0.009592287298011572], [-9.228227586055267e-5, -0.009464540475732013], [-7.932486823838047e-5, -0.009335768946554917], [-7.490571537829122e-5, -0.009223232711704249]])]), Material{Float64}(Inf, 4.0722378374087995, 1.0, 20.0, 0.0))
CableComponent{Float64}("core3", ConductorGroup{Float64}(0.0, 0.01024, 9.202269575325772e-5, 0, 0.0, 0.00030714162162543925, 0.00429, 0.004214989722730465, LineCableModels.DataModel.AbstractConductorPart{Float64}[Sector{Float64}(0.0, 0.01024, SectorParams{Float64}(3, 0.01024, 0.00914, 0.00102, 119.0, 0.0011), 240.0, Material{Float64}(2.8264e-8, 1.0, 1.000022, 20.0, 0.00429), 20.0, 9.202269575325772e-5, 0.00030714162162543925, 0.004214989722730465, GeometryBasics.Point{2, Float64}[[0.0016229322645813227, -0.00033922443981282413], [0.0015906862681731582, -0.00035825796658173203], [0.0015591607661917806, -0.0003784621076192707], [0.0015283981338143349, -0.0003998098836746067], [0.0014984395820647478, -0.0004222723364364356], [0.0014693258563056588, -0.0004458192561287433], [0.001441095839254558, -0.0004704188322648406], [0.0014137878315523267, -0.0004960380028933287], [0.00138743850402534, -0.0005226422217674553], [0.0013620834797620773, -0.0005501957493834198] … [0.00908952672034502, 0.0037127176765352488], [0.009027273394167423, 0.0037129661068320274], [0.008965120650827885, 0.003709416138008237], [0.008903300389647484, 0.003702081274241209], [0.008842043578624725, 0.003690988989546895], [0.00878157652914524, 0.0036761797964572906], [0.008722126483917236, 0.003657710272818804], [0.008663912303745747, 0.003635647939518094], [0.008607153780758381, 0.003610075218603015], [0.008552060462534428, 0.003581087803468108]], [0.005597797688096762, -0.0032318895682692528])]), Material{Float64}(1.0117855178759979e-7, 0.0, 3.55061786568551, 20.0, 0.00429), InsulatorGroup{Float64}(0.01024, 0.011340000000000001, 4.53824653534045e-5, 2.2203116139720515e-9, 0.0, LineCableModels.DataModel.AbstractInsulatorPart{Float64}[SectorInsulator{Float64}(0.01024, 0.011340000000000001, Sector{Float64}(0.0, 0.01024, SectorParams{Float64}(3, 0.01024, 0.00914, 0.00102, 119.0, 0.0011), 240.0, Material{Float64}(2.8264e-8, 1.0, 1.000022, 20.0, 0.00429), 20.0, 9.202269575325772e-5, 0.00030714162162543925, 0.004214989722730465, GeometryBasics.Point{2, Float64}[[0.0016229322645813227, -0.00033922443981282413], [0.0015906862681731582, -0.00035825796658173203], [0.0015591607661917806, -0.0003784621076192707], [0.0015283981338143349, -0.0003998098836746067], [0.0014984395820647478, -0.0004222723364364356], [0.0014693258563056588, -0.0004458192561287433], [0.001441095839254558, -0.0004704188322648406], [0.0014137878315523267, -0.0004960380028933287], [0.00138743850402534, -0.0005226422217674553], [0.0013620834797620773, -0.0005501957493834198] … [0.00908952672034502, 0.0037127176765352488], [0.009027273394167423, 0.0037129661068320274], [0.008965120650827885, 0.003709416138008237], [0.008903300389647484, 0.003702081274241209], [0.008842043578624725, 0.003690988989546895], [0.00878157652914524, 0.0036761797964572906], [0.008722126483917236, 0.003657710272818804], [0.008663912303745747, 0.003635647939518094], [0.008607153780758381, 0.003610075218603015], [0.008552060462534428, 0.003581087803468108]], [0.005597797688096762, -0.0032318895682692528]), 0.0011, Material{Float64}(Inf, 8.0, 1.0, 20.0, 0.1), 20.0, 4.53824653534045e-5, 2.2203116139720515e-9, 0.0, GeometryBasics.Point{2, Float64}[[0.001072479667086591, 0.0006131955604173588], [0.0010141493925299087, 0.0005787655236413439], [0.0009486182409733196, 0.0005367677584928697], [0.0008846746305788245, 0.0004923939917058584], [0.0008224028414400029, 0.00044570357977883235], [0.0007618870766366288, 0.0003967589731786698], [0.0007032087617171209, 0.00034562681577375435], [0.0006464454713167433, 0.0002923739956464603], [0.0005916743850044692, 0.0002370730788874637], [0.0005389705735334923, 0.00017979938394818414] … [0.00912749967715493, 0.0048125748991351], [0.00899807788493108, 0.00481309137425741], [0.008868865875032715, 0.004805711191466561], [0.008740347250126942, 0.004790462685762925], [0.00861299522859641, 0.004767401986787129], [0.008487290162562618, 0.0047366151266498985], [0.008363702144197035, 0.004698219666766184], [0.008242674952615419, 0.004652352109561794], [0.008124675634647955, 0.004599187166787942], [0.008025006948996796, 0.004546746368882534]])]), Material{Float64}(Inf, 4.0722378255438745, 1.0, 20.0, 0.0))Concentric Neutral and Outer Jacket
The cable includes a concentric neutral conductor made of copper wires and an outer PVC jacket.
=== Concentric neutral (30 wires) ===
n_neutral = 30
r_strand = 0.79e-3
R_N = 14.36e-3 # radius to center of neutral wires
R_O = 17.25e-3 # outer radius of the cable
inner_radius_neutral = R_N - r_strand
outer_jacket_thickness = R_O - (R_N + r_strand)
neutral_wires = WireArray(
inner_radius_neutral,
Diameter(2*r_strand),
n_neutral,
0.0, # lay ratio
copper
)
neutral_jacket = Insulator(neutral_wires, Thickness(outer_jacket_thickness), pvc)
neutral_component = CableComponent("neutral", ConductorGroup(neutral_wires), InsulatorGroup(neutral_jacket))2-element CableComponent "neutral":
├─ 1-element ConductorGroup: [r_in=0.01357, r_ex=0.01515, cross_section=5.882e-5, resistance=0.0002931, gmr=0.01448]
│ ├─ Effective properties: [rho=4.179e-8, eps_r=0.0, mu_r=1.301, alpha=0.00393]
│ └─── CircStrands: [r_in=0.01357, r_ex=0.01515, cross_section=5.882e-5, resistance=0.0002931, gmr=0.01448]
└─ 1-element InsulatorGroup: [r_in=0.01515, r_ex=0.01725, cross_section=0.0002138, shunt_capacitance=3.429e-9, shunt_conductance=0.0]
├─ Effective properties: [rho=Inf, eps_r=8.0, mu_r=1.0, alpha=0.0]
└─── Insulator: [r_in=0.01515, r_ex=0.01725, cross_section=0.0002138, shunt_capacitance=3.429e-9, shunt_conductance=0.0]
Assembling the Cable Design
Now we assemble the complete CableDesign by adding all the components.
design = CableDesign("NAYCWY_O_3x95_30x2_5", components[1])
add!(design, components[2])
add!(design, components[3])
add!(design, neutral_component)4-element CableDesign "NAYCWY_O_3x95_30x2_5"
├─ Component "core1":
│ ├─ ConductorGroup: [r_in=0.0, r_ex=0.01024, rho=1.012e-7, eps_r=0.0, mu_r=3.551, alpha=0.00429]
│ └─ InsulatorGroup: [r_in=0.01024, r_ex=0.01134, rho=Inf, eps_r=4.072, mu_r=1.0, alpha=0.0]
├─ Component "core2":
│ ├─ ConductorGroup: [r_in=0.0, r_ex=0.01024, rho=1.012e-7, eps_r=0.0, mu_r=3.551, alpha=0.00429]
│ └─ InsulatorGroup: [r_in=0.01024, r_ex=0.01134, rho=Inf, eps_r=4.072, mu_r=1.0, alpha=0.0]
├─ Component "core3":
│ ├─ ConductorGroup: [r_in=0.0, r_ex=0.01024, rho=1.012e-7, eps_r=0.0, mu_r=3.551, alpha=0.00429]
│ └─ InsulatorGroup: [r_in=0.01024, r_ex=0.01134, rho=Inf, eps_r=4.072, mu_r=1.0, alpha=0.0]
└─ Component "neutral":
├─ ConductorGroup: [r_in=0.01357, r_ex=0.01515, rho=4.179e-8, eps_r=0.0, mu_r=1.301, alpha=0.00393]
└─ InsulatorGroup: [r_in=0.01515, r_ex=0.01725, rho=Inf, eps_r=8.0, mu_r=1.0, alpha=0.0]
Examining the Cable Design
We can now display a summary of the cable design and preview it graphically.
println("Cable design summary:")
detailed_df = DataFrame(design, :detailed)
display(detailed_df)
println("Previewing cable design...")
plt, _ = preview(design)
#=
# Storing in a Library
Finally, we can store the cable design in a `CablesLibrary` for future reference.
=#
library = CablesLibrary()
add!(library, design)
library_df = DataFrame(library)| Row | cable_id | nominal_data | components |
|---|---|---|---|
| String | String | String | |
| 1 | NAYCWY_O_3x95_30x2_5 | NominalData{Float64}(nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing, nothing) | core1, core2, core3, neutral |
Save to file for later use:
output_file = fullfile("cables_library.json")
save(library, file_name = output_file);
nothing #hideConclusion
This tutorial has demonstrated how to model a three-core cable with sector-shaped conductors. Key takeaways include:
- Creating custom materials with corrected properties.
- Defining complex conductor shapes like sectors.
- Assembling a multi-core cable design component by component.
- Visualizing the final design for verification.
This detailed modeling capability allows for accurate analysis of various cable configurations.
🏠 Back to Tutorials