buckpy-dev 0.0.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,98 @@
1
+ """
2
+ This module contains the definition of the indices of the variables used in BuckPy.
3
+ The indices of the variables listed in this module are global variables.
4
+ """
5
+
6
+ # Index of the variables of the np_prob_var and np_case NumPy arrays
7
+ MUAX = 0
8
+ MULAT_HT = 1
9
+ MULAT_OP = 2
10
+ HOOS = 3
11
+
12
+ # Index of the variables of the np_case NumPy array
13
+ CBF_HT = 4
14
+ CBF_OP = 5
15
+ LFF_INST = 6
16
+ LFF_HT = 7
17
+ LFF_OP = 8
18
+ RFF_INST = 9
19
+ RFF_HT = 10
20
+ RFF_OP = 11
21
+ EAF_INST = 12
22
+ EAF_HT = 13
23
+ EAF_P_OP = 14
24
+ EAF_OP = 15
25
+ EAF_OP_UNBUCK = 16
26
+ LDELTAF_HT = 17
27
+ RDELTAF_HT = 18
28
+ LDELTAF_OP = 19
29
+ RDELTAF_OP = 20
30
+
31
+ # Index of the variables of the np_scen NumPy array
32
+ KP = 0
33
+ LENGTH = 1
34
+ ROUTE_TYPE = 2
35
+ BEND_RADIUS = 3
36
+ SW_INST = 4
37
+ SW_HT = 5
38
+ SW_OP = 6
39
+ SCHAR_HT = 7
40
+ SCHAR_OP = 8
41
+ SV_HT = 9
42
+ SV_OP = 10
43
+ CBF_RCM = 11
44
+ RLT = 12
45
+ FRF_HT = 13
46
+ FRF_P_OP = 14
47
+ FRF_T_OP = 15
48
+ FRF_OP = 16
49
+ L_BUCKLE_HT = 17
50
+ EAF_BUCKLE_HT = 18
51
+ L_BUCKLE_OP = 19
52
+ EAF_BUCKLE_OP = 20
53
+ SECTION_ID = 21
54
+ SECTION_KP = 22
55
+ SECTION_REF = 23
56
+ MUAX_MEAN = 24
57
+ MULAT_HT_MEAN = 25
58
+ MULAT_OP_MEAN = 26
59
+ HOOS_MEAN = 27
60
+
61
+ # Index of the variables of the np_distr NumPy array
62
+ MUAX_ARRAY = 0
63
+ MUAX_CDF_ARRAY = 1
64
+ MULAT_ARRAY_HT = 2
65
+ MULAT_CDF_ARRAY_HT = 3
66
+ MULAT_ARRAY_OP = 4
67
+ MULAT_CDF_ARRAY_OP = 5
68
+ HOOS_ARRAY = 6
69
+ HOOS_CDF_ARRAY = 7
70
+
71
+ # Index of the variables of the np_ends NumPy array
72
+ ROUTE_TYPE_BC = 0
73
+ KP_FROM = 1
74
+ KP_TO = 2
75
+ REAC_INST = 3
76
+ REAC_HT = 4
77
+ REAC_OP = 5
78
+
79
+ # Index of the variables of the np_pp_buckle NumPy array
80
+ SIM_PP = 0
81
+ KP_PP = 1
82
+ ROUTE_TYPE_PP = 2
83
+ MUAX_PP = 3
84
+ MULAT_OP_PP = 4
85
+ HOOS_PP = 5
86
+ CBF_OP_PP = 6
87
+ VAS_PP = 7
88
+
89
+ # Index of the variables of the np_pp_plot NumPy array
90
+ P_KP = 0
91
+ P_CBF_HT = 1
92
+ P_CBF_OP = 2
93
+ P_EAF_INST = 3
94
+ P_EAF_HT = 4
95
+ P_EAF_P_OP = 5
96
+ P_EAF_OP = 6
97
+ P_BETA2 = 7
98
+ P_EAF_OP_UNBUCK = 8
@@ -0,0 +1,419 @@
1
+ """
2
+ This module contains the plot functions of BuckPy result files.
3
+ """
4
+ import time
5
+ import pandas as pd
6
+ import matplotlib.pyplot as plt
7
+
8
+ def read_output(output_file_name):
9
+
10
+ '''
11
+ Read the data from the BuckPy result file.
12
+
13
+ Parameters
14
+ ----------
15
+ output_file_name : string
16
+ File path of the BuckPy result file.
17
+
18
+ Returns
19
+ -------
20
+ df_sets : pandas DataFrame
21
+ DataFrame containing the data in the 'Sets' tab.
22
+ df_buckle : pandas DataFrame
23
+ DataFrame containing the data related to the number of buckles.
24
+ df_force_prof : pandas DataFrame
25
+ DataFrame containing the force profile data.
26
+ '''
27
+
28
+ # Read all tabs in the BuckPy result file
29
+ all_sheets_dict = pd.read_excel(output_file_name, sheet_name = None)
30
+
31
+ # Read the 'Sets', 'No Buckles' and 'Force Profiles' tabs
32
+ df_sets = all_sheets_dict['Sets']
33
+ df_buckle = all_sheets_dict['No Buckles']
34
+ df_force_prof = all_sheets_dict['Force Profiles']
35
+
36
+ return df_sets, df_buckle, df_force_prof
37
+
38
+ def assembly_dataframe_bend_sleeper_ilt(df):
39
+
40
+ '''
41
+ Read the route bend data from the BuckPy input file and select the KP
42
+ of the 'Bend', 'Sleeper', 'RCM' and 'ILT' from the 'Route Type' column.
43
+
44
+ Parameters
45
+ ----------
46
+ df : pandas DataFrame
47
+ DataFrame containing the data in the 'Route' tab.
48
+
49
+ Returns
50
+ -------
51
+ df1 : pandas DataFrame
52
+ DataFrame containing the 'Bend' route type data.
53
+ df2 : pandas DataFrame
54
+ DataFrame containing the 'Sleeper' route type data.
55
+ df3 : pandas DataFrame
56
+ DataFrame containing the 'RCM' route type data.
57
+ df4 : pandas DataFrame
58
+ DataFrame containing the 'ILT' route type data.
59
+ '''
60
+
61
+ # Select route bend and KP columns
62
+ cols = ['Route Type', 'Point ID From', 'Point ID To', 'KP From', 'KP To']
63
+ df = df[cols]
64
+
65
+ # Select rows of route bend from 'Route Type'
66
+ df1 = df.loc[df['Route Type'] == 'Bend'].copy()
67
+ df1 = df1.reset_index(drop = True)
68
+
69
+ # Select rows of sleeper from 'Point ID'
70
+ df2 = df.iloc[1:-1].loc[df['Route Type'] == 'Sleeper'].copy()
71
+ df2 = df2.reset_index(drop = True)
72
+
73
+ # Select rows of RCM from 'Point ID'
74
+ df3 = df.iloc[1:-1].loc[df['Route Type'] == 'RCM'].copy()
75
+ df3 = df3.reset_index(drop = True)
76
+
77
+ # Select rows of ILT from 'Point ID'
78
+ df4 = df.iloc[1:-1].loc[df['Point ID From'].str.contains('ILT') &
79
+ df['Point ID To'].str.contains('ILT')].copy()
80
+ df4 = df4.reset_index(drop = True)
81
+
82
+ return df1, df2, df3, df4
83
+
84
+ def assembly_double_rows(df):
85
+
86
+ """
87
+ Double each row of the dataframe based on KP.
88
+
89
+ Parameters
90
+ ----------
91
+ df : pandas DataFrame
92
+ DataFrame containing the KP and results.
93
+
94
+ Returns
95
+ -------
96
+ df : pandas DataFrame
97
+ DataFrame containing the doubled rows of KP and results.
98
+ """
99
+
100
+ # Double each row of the df
101
+ df_temp1 = df.copy()
102
+ df_temp1 = df_temp1.rename(columns = {'KP To (m)': 'KP'})
103
+ df_temp1 = df_temp1.drop(labels = 'KP From (m)', axis = 1)
104
+ df_temp1['sort'] = 1
105
+
106
+ df_temp2 = df.copy()
107
+ df_temp2 = df_temp2.rename(columns = {'KP From (m)': 'KP'})
108
+ df_temp2 = df_temp2.drop(labels = 'KP To (m)', axis = 1)
109
+ df_temp2['sort'] = 2
110
+
111
+ # Double the rows except the start and end
112
+ df = pd.concat([df_temp1, df_temp2])
113
+ df = df.sort_values(by = ['KP', 'sort']).reset_index(drop = True)
114
+
115
+ # Double the start and end rows and fill nan with 0
116
+ first_row = pd.DataFrame({'KP': [df['KP'].min()]})
117
+ last_row = pd.DataFrame({'KP': [df['KP'].max()]})
118
+ df = pd.concat([first_row, df, last_row], ignore_index = True)
119
+ df = df.fillna(0)
120
+
121
+ return df
122
+
123
+ def assembly_dataframe_plot(df_sets, df_pps):
124
+
125
+ """
126
+ Assemble the dataframes on the probabilistic results and
127
+ post-processing input data from BuckPy.
128
+
129
+ Parameters
130
+ ----------
131
+ df_sets : pandas DataFrame
132
+ DataFrame containing the output data in the 'Sets' tab.
133
+ df_pps : pandas DataFrame
134
+ DataFrame containing the input data in the 'Post-Processing' tab.
135
+
136
+ Returns
137
+ -------
138
+ df : pandas DataFrame
139
+ DataFrame containing the doubled rows of KP and results.
140
+ """
141
+
142
+ # Accept both legacy and current post-processing schemas
143
+ if {"pp_set", "KP_from", "KP_to"}.issubset(df_pps.columns):
144
+ df_pps = df_pps.rename(columns={
145
+ "pp_set": "Set Label",
146
+ "KP_from": "KP From (m)",
147
+ "KP_to": "KP To (m)",
148
+ })
149
+ else:
150
+ df_pps = df_pps.rename(columns={
151
+ "Post-Processing Set": "Set Label",
152
+ "KP From": "KP From (m)",
153
+ "KP To": "KP To (m)",
154
+ })
155
+ df_pps = df_pps[["Set Label", "KP From (m)", "KP To (m)"]]
156
+
157
+ # DataFrame of the 'Sets' tab from the BuckPy output
158
+ df_sets = df_sets[['Set Label', 'KP From (m)', 'KP To (m)', 'Probability of Buckling',
159
+ 'Characteristic VAS Probability',
160
+ 'Characteristic VAS, Unconditional (m)',
161
+ 'Characteristic Lateral Breakout Friction Probability',
162
+ 'Characteristic Lateral Breakout Friction, Buckles',
163
+ 'Lateral Breakout Friction, HE, Geotech']]
164
+
165
+ # Add sets without outputs
166
+ df = pd.concat([df_sets, df_pps])
167
+ df = df.drop_duplicates(subset = ['Set Label', 'KP From (m)', 'KP To (m)'],
168
+ keep = 'first')
169
+ df = df.sort_values(by = ['KP From (m)'])
170
+
171
+ # Double each row for KP
172
+ df = assembly_double_rows(df)
173
+
174
+ # Add initial and final rows with zeros
175
+ df_temp1 = pd.DataFrame({'KP': [df['KP'].min()],
176
+ 'Probability of Buckling': [0.0],
177
+ 'Characteristic VAS, Unconditional (m)': [0.0],
178
+ 'Characteristic Lateral Breakout Friction, Buckles': [0.0]})
179
+ df_temp2 = pd.DataFrame({'KP': [df['KP'].max()],
180
+ 'Probability of Buckling': [0.0],
181
+ 'Characteristic VAS, Unconditional (m)': [0.0],
182
+ 'Characteristic Lateral Breakout Friction, Buckles': [0.0]})
183
+ df = pd.concat([df_temp1, df, df_temp2], ignore_index = True)
184
+ df = df.fillna(0.0)
185
+
186
+ # Replace 0.0 with NaN for Geotech friction column
187
+ df.loc[df['Characteristic Lateral Breakout Friction, Buckles'] == 0.0,
188
+ 'Lateral Breakout Friction, HE, Geotech'] = 0.0
189
+
190
+ return df
191
+
192
+ def plot_bend_sleeper_ilt(a1, df1, df2, df3, df4, y_max):
193
+
194
+ """
195
+ Plot route bend, sleeper and ILT.
196
+
197
+ Parameters
198
+ ----------
199
+ a1 : Matplotlib plot
200
+ Axis of the Matplotlib plot.
201
+ df1 : pandas DataFrame
202
+ Dataframe containing the locations of the route bends.
203
+ df2 : pandas DataFrame
204
+ Dataframe containing the locations of sleepers.
205
+ df3 : pandas DataFrame
206
+ Dataframe containing the locations of RCMs.
207
+ df4 : pandas DataFrame
208
+ Dataframe containing the locations of ILTs.
209
+ """
210
+
211
+ # Plot bends
212
+ for index, row in df1.iterrows():
213
+ if index == 0:
214
+ a1.plot([row['KP From'], row['KP To']], 2 * [0.1 * y_max],
215
+ color = 'C2', label = 'Route Bend', linestyle = 'dotted')
216
+ else:
217
+ a1.plot([row['KP From'], row['KP To']], 2 * [0.1 * y_max],
218
+ color = 'C2', linestyle = 'dotted')
219
+
220
+ # Plot sleepers
221
+ for index, row in df2.iterrows():
222
+ kp_centre = 0.5 * (row['KP From'] + row['KP To'])
223
+ if index == 0:
224
+ a1.scatter(kp_centre, 0.1 * y_max,
225
+ color = 'C3', label = 'Sleeper', marker = '*')
226
+ else:
227
+ a1.scatter(kp_centre, 0.1 * y_max,
228
+ color = 'C3', marker = '*')
229
+
230
+ # Plot RCMs
231
+ for index, row in df3.iterrows():
232
+ kp_centre = 0.5 * (row['KP From'] + row['KP To'])
233
+ if index == 0:
234
+ a1.scatter(kp_centre, 0.1 * y_max,
235
+ color = 'C4', label = 'RCM', marker = 'o')
236
+ else:
237
+ a1.scatter(kp_centre, 0.1 * y_max,
238
+ color = 'C4', marker = 'o')
239
+
240
+ # Plot ILTs
241
+ for index, row in df4.iterrows():
242
+ kp_centre = 0.5 * (row['KP From'] + row['KP To'])
243
+ if index == 0:
244
+ a1.scatter(kp_centre, 0.1 * y_max,
245
+ color = 'C5', label = 'ILT', marker = '+')
246
+ else:
247
+ a1.scatter(kp_centre, 0.1 * y_max,
248
+ color = 'C5', marker = '+')
249
+
250
+ def plot_results(file_name, df_no_buckles, df_force_profiles,
251
+ df_bends, df_sleepers, df_rcms, df_ilts, df_set_pps):
252
+
253
+ """
254
+ Plot probabilistic results of BuckPy in 6 subplots:
255
+ Row 1: unbuckled EAF, Number of Buckles, VAS;
256
+ Row 2: buckled EAF, Probobality of Buckling, Friction.
257
+
258
+ Parameters
259
+ ----------
260
+ file_name : str
261
+ The name of the output image file.
262
+ df_no_buckles : pandas DataFrame
263
+ DataFrame containing the data related to the number of buckles.
264
+ df_force_profiles : pandas DataFrame
265
+ DataFrame containing the force profile data.
266
+ df_bends : pandas DataFrame
267
+ DataFrame containing the 'Bend' route type data.
268
+ df_sleepers : pandas DataFrame
269
+ DataFrame containing the 'Sleeper' route type data.
270
+ df_rcms : pandas DataFrame
271
+ DataFrame containing the 'RCM' route type data.
272
+ df_ilts : pandas DataFrame
273
+ DataFrame containing the 'ILT' route type data.
274
+ df_set_pps : pandas DataFrame
275
+ DataFrame containing the doubled rows of KP and results from
276
+ 'Sets' and 'Post-Processing' tabs.
277
+ """
278
+
279
+ # Generate matplolib figure
280
+ fig = plt.figure()
281
+ dpi_size = 110
282
+ fig.set_size_inches(19.2 * 100 / dpi_size, 10.8 * 100 / dpi_size)
283
+
284
+ # Subplot 1: Plot probabilistic results of the unbuckled EAF
285
+ a1 = fig.add_subplot(231)
286
+ a1.plot(df_force_profiles['KP (m)'],
287
+ df_force_profiles['EAF Operation [without Buckling] (kN)'])
288
+
289
+ a1.set_xlabel('KP (m)')
290
+ a1.set_ylabel('EAF [without Buckling] (kN)')
291
+ a1.grid()
292
+
293
+ # Subplot 2: Plot distribution of number of buckles
294
+ a2 = fig.add_subplot(232)
295
+ a2.plot(df_no_buckles['Number of Buckles'], df_no_buckles['Probability of Buckling'])
296
+
297
+ a2.set_xlabel('Number of Buckles')
298
+ a2.set_ylabel('Probability of Buckling')
299
+ a2.grid()
300
+
301
+ # Subplot 3: Plot characteristic VAS with route bend, sleeper, RCM and ILT
302
+ a3 = fig.add_subplot(233)
303
+ a3.plot(df_set_pps['KP'], df_set_pps['Characteristic VAS, Unconditional (m)'],
304
+ label = 'BuckPy')
305
+ plot_bend_sleeper_ilt(a3, df_bends, df_sleepers, df_rcms, df_ilts,
306
+ df_set_pps['Characteristic VAS, Unconditional (m)'].max())
307
+
308
+ a3.set_xlabel('KP (m)')
309
+ a3.set_ylabel('Characteristic VAS (m)')
310
+ a3.legend()
311
+ a3.grid()
312
+
313
+ # Subplot 4: Plot probabilistic results of the buckled EAF
314
+ a4 = fig.add_subplot(234)
315
+ a4.plot(df_force_profiles['KP (m)'],
316
+ df_force_profiles['EAF Operation (kN)'])
317
+
318
+ a4.set_xlabel('KP (m)')
319
+ a4.set_ylabel('EAF [with Buckling] (kN)')
320
+ a4.grid()
321
+
322
+ # Subplot 5: Plot probabilities of buckling with route bend, sleeper, RCM and ILT
323
+ a5 = fig.add_subplot(235)
324
+ a5.plot(df_set_pps['KP'], df_set_pps['Probability of Buckling'], label = 'BuckPy')
325
+ plot_bend_sleeper_ilt(a5, df_bends, df_sleepers, df_rcms, df_ilts,
326
+ df_set_pps['Probability of Buckling'].max())
327
+
328
+ a5.set_xlabel('KP (m)')
329
+ a5.set_ylabel('Probability of Buckling')
330
+ a5.legend()
331
+ a5.grid()
332
+
333
+ # Subplot 6: Plot characteristic friction with route bend, sleeper, RCM and ILT
334
+ prob_exceed_char_fric = df_set_pps[
335
+ 'Characteristic Lateral Breakout Friction Probability'
336
+ ].max()
337
+ a6 = fig.add_subplot(236)
338
+ a6.plot(df_set_pps['KP'], df_set_pps['Characteristic Lateral Breakout Friction, Buckles'],
339
+ label = f'P{int(100 * prob_exceed_char_fric)} Buckle Friction')
340
+ a6.plot(df_set_pps['KP'], df_set_pps['Lateral Breakout Friction, HE, Geotech'],
341
+ label = f'P{int(100 * prob_exceed_char_fric)} Geotech Friction', linestyle = 'dashed')
342
+ plot_bend_sleeper_ilt(a6, df_bends, df_sleepers, df_rcms, df_ilts,
343
+ df_set_pps['Characteristic Lateral Breakout Friction, Buckles'].max())
344
+
345
+ a6.set_xlabel('KP (m)')
346
+ a6.set_ylabel('Breakout Lateral Friction')
347
+ a6.legend()
348
+ a6.grid()
349
+
350
+ # Save the image file and close the plot
351
+ fig_manager=plt.get_current_fig_manager()
352
+ try:
353
+ fig_manager.window.state('zoomed')
354
+ except AttributeError:
355
+ pass
356
+ try:
357
+ fig_manager.window.showMaximized()
358
+ except AttributeError:
359
+ pass
360
+ plt.subplots_adjust(
361
+ left = 0.1, bottom = 0.1, right = 0.95, top = 0.925, wspace = 0.225, hspace = 0.2)
362
+ plt.savefig(file_name, dpi = dpi_size)
363
+ # plt.show()
364
+ plt.close()
365
+
366
+ def plot_buckpy(work_dir, input_file_name, scen_df, route_df, pp_df, bl_verbose):
367
+ """
368
+ Plot the probabilistic buckling results from BuckPy result files.
369
+
370
+ Parameters
371
+ ----------
372
+ work_dir : str
373
+ The working directory where the analysis files are located.
374
+ input_file_name : str
375
+ The name of the input file.
376
+ scen_df : pandas DataFrame
377
+ DataFrame containing scenario data.
378
+ route_df : pandas DataFrame
379
+ DataFrame containing route data.
380
+ pp_df : pandas DataFrame
381
+ DataFrame containing post-processing data.
382
+ bl_verbose : bool, optional
383
+ Flag to enable verbose output. Default is False.
384
+
385
+ Returns
386
+ -------
387
+ None
388
+ """
389
+
390
+ # Obtain pipeline ID and scenario number from the scenario dataframe
391
+ pipeline_id = scen_df["Pipeline"].values[0]
392
+ scenario_no = scen_df["Scenario"].values[0]
393
+
394
+ # Starting time of the plot buckpy results module
395
+ start_time = time.time()
396
+
397
+ # Print in the terminal that the plot of the results has started
398
+ if bl_verbose:
399
+ print("5. Plot results")
400
+
401
+ # Read the probabilistic outputs from the result Excel file
402
+ file_name_temp = f"{work_dir}/{input_file_name.split('.')[0]}_{pipeline_id}_scen{scenario_no}"
403
+ output_file_name = f"{file_name_temp}_outputs.xlsx"
404
+ df_set, df_no_buckle, df_force_profile = read_output(output_file_name)
405
+
406
+ # Assembly dataframes with the location of sleepers, RCMs, ILTs and route bends
407
+ df_bend, df_sleeper, df_rcm, df_ilt = assembly_dataframe_bend_sleeper_ilt(route_df)
408
+
409
+ # Assembly a dataframe with the "Sets" results using "Post-Processing" tab of input
410
+ df_set_pp = assembly_dataframe_plot(df_set, pp_df)
411
+
412
+ # Print in the terminal the time taken to plot results
413
+ if bl_verbose:
414
+ print(f' Time taken to plot results: {time.time() - start_time:.1f}s')
415
+
416
+ # Plot the 6 subplots and save the figure to file
417
+ plot_file_name = f"{file_name_temp}_plots-2.png"
418
+ plot_results(plot_file_name, df_no_buckle, df_force_profile,
419
+ df_bend, df_sleeper, df_rcm, df_ilt, df_set_pp)
@@ -0,0 +1,51 @@
1
+ Metadata-Version: 2.4
2
+ Name: buckpy-dev
3
+ Version: 0.0.1
4
+ Summary: BuckPy: Lateral buckling formation algorithm
5
+ Home-page: https://github.com/buckpy-org/buckpy
6
+ Author: ismael-ripoll
7
+ License: GPL-3.0-or-later
8
+ Project-URL: Documentation, https://buckpy-org-dev.github.io/
9
+ Project-URL: Source, https://github.com/buckpy-org/buckpy
10
+ Project-URL: Tracker, https://github.com/buckpy-org/buckpy/issues
11
+ Keywords: pipelines,buckling,engineering,reliability,simulation
12
+ Classifier: Programming Language :: Python :: 3
13
+ Classifier: Programming Language :: Python :: 3.9
14
+ Classifier: License :: OSI Approved :: GNU General Public License v3 (GPLv3)
15
+ Classifier: Operating System :: OS Independent
16
+ Requires-Python: >=3.9
17
+ Description-Content-Type: text/markdown
18
+ License-File: LICENSE
19
+ Requires-Dist: matplotlib==3.8.3
20
+ Requires-Dist: multiprocess==0.70.16
21
+ Requires-Dist: numba==0.59.0
22
+ Requires-Dist: numpy==1.26.4
23
+ Requires-Dist: openpyxl==3.1.5
24
+ Requires-Dist: pandas==2.2.1
25
+ Requires-Dist: scipy==1.12.0
26
+ Requires-Dist: xlrd==2.0.1
27
+ Requires-Dist: XlsxWriter==3.2.0
28
+ Requires-Dist: pysubsea==0.1.5
29
+ Dynamic: author
30
+ Dynamic: classifier
31
+ Dynamic: description
32
+ Dynamic: description-content-type
33
+ Dynamic: home-page
34
+ Dynamic: keywords
35
+ Dynamic: license
36
+ Dynamic: license-file
37
+ Dynamic: project-url
38
+ Dynamic: requires-dist
39
+ Dynamic: requires-python
40
+ Dynamic: summary
41
+
42
+ # BUCKPY
43
+ Probabilistic Lateral Buckling Algorithm.
44
+
45
+ ## Project Philosophy
46
+ **BuckPy** is an open-source algorithm developed to facilitate the implementation of the probabilistic lateral buckling methodology presented in [Lateral Buckling Design using the Friction Distributions at the Expected Buckles (PDF)](docs/_static/SPT%202023%20-%20Lateral%20Buckling%20Design%20using%20the%20Friction%20Distributions%20at%20the%20Expected%20Buckles.pdf), published by Ismael R., Carlos S., and Emilien B. at the 2023 Subsea Pipeline Technology Congress in London (SPT 2023).
47
+
48
+ The code is available on [GitHub](https://github.com/Xodus-Group/BuckPy), allowing the pipeline community to review, expand, and use it under the [GNU General Public License v3.0](https://github.com/Xodus-Group/BuckPy/blob/main/LICENSE).
49
+
50
+ ## Documentation
51
+ See the [BuckPy Documentation Website](https://buckpy-org.github.io/) for full usage guides, technical references, benchmarking, API references, and updates.
@@ -0,0 +1,18 @@
1
+ buckpy/__init__.py,sha256=BXg5L76psWvzLb8-pq2mDHWuL6laXSLyxZ8L0F6YE5Y,171
2
+ buckpy/buckfast_input_file_writer_.py,sha256=S36fHAdrK_kRxJ9Y2qJiw3hevJ5pOlboiXu2mWJVsM0,44078
3
+ buckpy/buckpy.py,sha256=niIeMIRYmJ8NzKW-1MIUkuKtGumKL_Hi5DS4xwygqNw,4584
4
+ buckpy/buckpy_gui.py,sha256=35nyOCYjAUtMbkfKop23az8f4nJ8rJaJeKWbwPCpuaw,18287
5
+ buckpy/buckpy_postprocessing.py,sha256=wjHOLdQMbH79TkpXlag28wDvshVObly8aKh9curbSK4,56200
6
+ buckpy/buckpy_preprocessing_current.py,sha256=tlnL4S7m_VdxKjemD8X2Qq5PonJgT05A8Zgrx2Mnnjw,46234
7
+ buckpy/buckpy_preprocessing_legacy.py,sha256=sVtt60JznBb1FxVq025R2Pkm6fHiQv5K79Ln-8_A_DY,35085
8
+ buckpy/buckpy_solver.py,sha256=It7MOWe3AeRJDc04qyFoDx8jJHA2AsJHxgaqRbCvot8,33994
9
+ buckpy/buckpy_variables.py,sha256=f2bs_JUGtl6FCp9URLboVVnoK25Yi4ni_VM1i9Q-a1w,2167
10
+ buckpy/buckpy_visualisation.py,sha256=-oaUF0aIfIgD8YY2jd4J9ogdAutznbyHuxk62VFBBfs,15296
11
+ buckpy/_static/logo.png,sha256=Z8vVUhEd375gLQ1i1EAtFftWdDRj9bkX7upsX6RzcQM,1587
12
+ buckpy/_static/logo.svg,sha256=3o31r4Uxex2NkzDaEjJJnm4hrOGBgi8M_A1pRplmKGQ,287
13
+ buckpy_dev-0.0.1.dist-info/licenses/LICENSE,sha256=IwGE9guuL-ryRPEKi6wFPI_zOhg7zDZbTYuHbSt_SAk,35823
14
+ buckpy_dev-0.0.1.dist-info/METADATA,sha256=JbToGKoILvVX-65jkcphTzzaHMkzn6TQbWOG_9mm2Ro,2354
15
+ buckpy_dev-0.0.1.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
16
+ buckpy_dev-0.0.1.dist-info/entry_points.txt,sha256=0K11SznPK4y9PGXGalBCkQen1L-1FJDQTCNvANlPYKQ,38
17
+ buckpy_dev-0.0.1.dist-info/top_level.txt,sha256=XC8Z-oELh-egh28D_WMP5yiF4V075BQuNh1lg1_8-mM,7
18
+ buckpy_dev-0.0.1.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (82.0.1)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ buckpy = buckpy:run