wawi 0.0.3__py3-none-any.whl → 0.0.7__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.
Potentially problematic release.
This version of wawi might be problematic. Click here for more details.
- wawi/__init__.py +2 -2
- wawi/general.py +0 -5
- wawi/io.py +35 -12
- wawi/modal.py +1 -1
- wawi/wind.py +32 -38
- {wawi-0.0.3.dist-info → wawi-0.0.7.dist-info}/METADATA +61 -2
- {wawi-0.0.3.dist-info → wawi-0.0.7.dist-info}/RECORD +10 -11
- wawi/abq.py +0 -1128
- {wawi-0.0.3.dist-info → wawi-0.0.7.dist-info}/LICENSE +0 -0
- {wawi-0.0.3.dist-info → wawi-0.0.7.dist-info}/WHEEL +0 -0
- {wawi-0.0.3.dist-info → wawi-0.0.7.dist-info}/top_level.txt +0 -0
wawi/__init__.py
CHANGED
wawi/general.py
CHANGED
@@ -162,8 +162,6 @@ def merge_tr_phi(phi_trans, phi_rot, thread_stack=True):
|
|
162
162
|
thread_stack: specify if the matrices should be thread in or not (if True, 3 translational DOFs and 3 rotational DOFs ...) (default = True)
|
163
163
|
Returns:
|
164
164
|
phi_combined: phi matrix with all DOFs
|
165
|
-
|
166
|
-
AAJ / Knut Andreas Kvaale, 2017
|
167
165
|
"""
|
168
166
|
|
169
167
|
Ndofs = phi_trans.shape[0]*2
|
@@ -204,7 +202,6 @@ def interp1z(z,mat,znew):
|
|
204
202
|
Returns:
|
205
203
|
matnew: interpolated 3D matrix (Numpy array)
|
206
204
|
|
207
|
-
NTNU / Knut Andreas Kvaale, 2018
|
208
205
|
"""
|
209
206
|
|
210
207
|
matnew = np.zeros([1,len(mat[0]),len(mat[0][0])])
|
@@ -226,7 +223,6 @@ def interpolate_3d(z, mat, zi):
|
|
226
223
|
Returns:
|
227
224
|
mati: interpolated matrix
|
228
225
|
|
229
|
-
NTNU / Knut Andreas Kvaale, 2017
|
230
226
|
"""
|
231
227
|
mat_shape = np.shape(mat)
|
232
228
|
mati = np.zeros([mat_shape[0], mat_shape[1], len(zi)])
|
@@ -280,7 +276,6 @@ def rodrot(theta, rotaxis=[0, 0, 1], style='row'):
|
|
280
276
|
Returns:
|
281
277
|
T: transformation matrix in NumPy format
|
282
278
|
|
283
|
-
NTNU / Knut Andreas Kvaale, 2017
|
284
279
|
"""
|
285
280
|
|
286
281
|
axis = np.asarray(rotaxis)
|
wawi/io.py
CHANGED
@@ -48,7 +48,7 @@ def import_folder(model_folder, pontoon_stl='pontoon.stl', aero_sections='aero_s
|
|
48
48
|
|
49
49
|
Notes
|
50
50
|
---------------
|
51
|
-
Add info here describing the structure and contents of all files.
|
51
|
+
TODO: Add info here describing the structure and contents of all files.
|
52
52
|
|
53
53
|
See `importing-folder.ipynb` for a full example.
|
54
54
|
'''
|
@@ -105,7 +105,7 @@ def import_folder(model_folder, pontoon_stl='pontoon.stl', aero_sections='aero_s
|
|
105
105
|
common_ptype_settings = pontoon_type_settings.pop('*')
|
106
106
|
|
107
107
|
except:
|
108
|
-
print('Valid pontoon
|
108
|
+
print('Valid pontoon type settings file not found. No definitions applied.')
|
109
109
|
pontoon_type_settings = {}
|
110
110
|
|
111
111
|
else:
|
@@ -152,22 +152,28 @@ def import_folder(model_folder, pontoon_stl='pontoon.stl', aero_sections='aero_s
|
|
152
152
|
|
153
153
|
# Modal dry object
|
154
154
|
if 'xi0' in modal:
|
155
|
-
xi0 = np.array(modal
|
155
|
+
xi0 = np.array(modal.pop('xi0'))
|
156
156
|
else:
|
157
157
|
xi0 = 0.0
|
158
158
|
|
159
159
|
if 'm_min' in modal:
|
160
|
-
m_min = modal
|
160
|
+
m_min = modal.pop('m_min')
|
161
161
|
else:
|
162
162
|
m_min = 0.0
|
163
163
|
|
164
164
|
if 'phi_x' in modal:
|
165
|
-
phi_x = modal
|
165
|
+
phi_x = modal.pop('phi_x')
|
166
166
|
else:
|
167
167
|
phi_x = None
|
168
|
-
|
169
|
-
|
170
|
-
|
168
|
+
|
169
|
+
if 'local' in modal:
|
170
|
+
local_phi = modal.pop('local')
|
171
|
+
else:
|
172
|
+
local_phi = False
|
173
|
+
|
174
|
+
phi = modal.pop('phi')
|
175
|
+
|
176
|
+
modal_dry = ModalDry(phi, xi0=xi0, local_phi=local_phi, phi_x=phi_x, m_min=m_min, **modal)
|
171
177
|
|
172
178
|
# Element definition
|
173
179
|
if element_data != {}:
|
@@ -184,7 +190,25 @@ def import_folder(model_folder, pontoon_stl='pontoon.stl', aero_sections='aero_s
|
|
184
190
|
node_matrix = np.array(element_data['node_matrix'])
|
185
191
|
node_matrix[:,0] = node_matrix[:,0].astype(int)
|
186
192
|
element_matrix = np.array(element_data['element_matrix'])
|
187
|
-
|
193
|
+
element_matrix = element_matrix.astype(int)
|
194
|
+
|
195
|
+
# Remove elements without valid nodes
|
196
|
+
remove_ix = []
|
197
|
+
remove_els = []
|
198
|
+
|
199
|
+
for ix,row in enumerate(element_matrix):
|
200
|
+
el,node1,node2 = row
|
201
|
+
# print(row)
|
202
|
+
|
203
|
+
if (node1 not in node_matrix[:,0].astype(int)) or (node2 not in node_matrix[:,0].astype(int)):
|
204
|
+
remove_ix.append(ix)
|
205
|
+
remove_els.append(el)
|
206
|
+
|
207
|
+
if len(remove_els)>0:
|
208
|
+
print(f'Elements {remove_els} do not have valid nodes - not included in model.')
|
209
|
+
|
210
|
+
element_matrix = np.delete(element_matrix, remove_ix, axis=0)
|
211
|
+
|
188
212
|
eldef = Part(node_matrix, element_matrix, sections=sections,
|
189
213
|
assemble=False, forced_ndofs=6)
|
190
214
|
|
@@ -211,7 +235,6 @@ def import_folder(model_folder, pontoon_stl='pontoon.stl', aero_sections='aero_s
|
|
211
235
|
for el_label in elements:
|
212
236
|
el = eldef.get_element(int(el_label))
|
213
237
|
|
214
|
-
|
215
238
|
el.assign_e2(e2)
|
216
239
|
el.assign_e3(e3)
|
217
240
|
|
@@ -219,7 +242,7 @@ def import_folder(model_folder, pontoon_stl='pontoon.stl', aero_sections='aero_s
|
|
219
242
|
else:
|
220
243
|
eldef = None
|
221
244
|
|
222
|
-
# Create model object
|
245
|
+
# Create model object (only hydro part)
|
223
246
|
model = Model.from_nodes_and_types(pontoon_nodes, [ptypes[pt] for pt in pontoon_types], modal_dry=modal_dry,
|
224
247
|
rotation=pontoon_rotation, eldef=eldef, labels=pontoon_names)
|
225
248
|
|
@@ -249,7 +272,7 @@ def import_folder(model_folder, pontoon_stl='pontoon.stl', aero_sections='aero_s
|
|
249
272
|
model.assign_drag_elements(data)
|
250
273
|
except:
|
251
274
|
print('Specified drag_elements file found or invalid. No drag elements defined.')
|
252
|
-
|
275
|
+
|
253
276
|
model.connect_eldef()
|
254
277
|
model.assign_dry_modes()
|
255
278
|
|
wawi/modal.py
CHANGED
@@ -17,7 +17,7 @@ def maxreal(phi):
|
|
17
17
|
complex-valued modal transformation matrix, with vectors rotated to have maximum real parts
|
18
18
|
"""
|
19
19
|
|
20
|
-
angles = np.expand_dims(np.arange(0,np.pi
|
20
|
+
angles = np.expand_dims(np.arange(0,np.pi, 0.01), axis=0)
|
21
21
|
phi_max_real = np.zeros(np.shape(phi)).astype('complex')
|
22
22
|
for mode in range(0,np.shape(phi)[1]):
|
23
23
|
rot_mode = np.dot(np.expand_dims(phi[:, mode], axis=1), np.exp(angles*1j))
|
wawi/wind.py
CHANGED
@@ -526,7 +526,7 @@ def kaimal_auto(omega, Lx, A, sigma, V):
|
|
526
526
|
|
527
527
|
return S/(2*np.pi)
|
528
528
|
|
529
|
-
def
|
529
|
+
def von_karman_auto(omega, Lx, sigma, V):
|
530
530
|
|
531
531
|
A1 = [
|
532
532
|
0.0,
|
@@ -552,7 +552,7 @@ def von_Karman_auto(omega, Lx, sigma, V):
|
|
552
552
|
|
553
553
|
return S/(2*np.pi)
|
554
554
|
|
555
|
-
def generic_kaimal_matrix(omega, nodes, T_wind, A, sigma, C, Lx, U,
|
555
|
+
def generic_kaimal_matrix(omega, nodes, T_wind, A, sigma, C, Lx, U, spectrum_type='kaimal'):
|
556
556
|
# Adopted from MATLAB version. `nodes` is list with beef-nodes.
|
557
557
|
V = np.zeros(len(nodes)) # Initialize vector with mean wind in all nodes
|
558
558
|
Su = np.zeros([len(nodes), len(nodes)]) # One-point spectra for u component in all nodes
|
@@ -560,22 +560,16 @@ def generic_kaimal_matrix(omega, nodes, T_wind, A, sigma, C, Lx, U, options=None
|
|
560
560
|
Sw = np.zeros([len(nodes), len(nodes)]) # One-point spectra for w component in all nodes
|
561
561
|
xyz = np.zeros([len(nodes), 3]) # Nodes in wind coordinate system
|
562
562
|
|
563
|
-
if options is None:
|
564
|
-
options = {
|
565
|
-
'spectra_type': 'Kaimal'
|
566
|
-
}
|
567
|
-
|
568
563
|
for node_ix, node in enumerate(nodes):
|
569
564
|
xyz[node_ix,:] = (T_wind @ node.coordinates).T #Transform node coordinates to the wind coordinate system
|
570
565
|
V[node_ix] = U(node.coordinates) # Mean wind velocity in the nodes
|
571
566
|
|
572
|
-
if '
|
573
|
-
|
574
|
-
|
575
|
-
|
576
|
-
|
577
|
-
|
578
|
-
Su[node_ix,:], Sv[node_ix,:], Sw[node_ix,:] = kaimal_auto(omega, Lx, A, sigma, V[node_ix])
|
567
|
+
if 'karman' in spectrum_type.lower():
|
568
|
+
Su[node_ix,:], Sv[node_ix,:], Sw[node_ix,:] = von_karman_auto(omega, Lx, sigma, V[node_ix])
|
569
|
+
elif spectrum_type.lower() == 'kaimal':
|
570
|
+
Su[node_ix,:], Sv[node_ix,:], Sw[node_ix,:] = kaimal_auto(omega, Lx, A, sigma, V[node_ix]) # One point spectra for u component in all nodes
|
571
|
+
else:
|
572
|
+
raise ValueError('spectrum_type must either be defined as "vonKarman"/"Karman" or "Kaimal"')
|
579
573
|
|
580
574
|
x = xyz[:, 0]
|
581
575
|
y = xyz[:, 1]
|
@@ -610,10 +604,10 @@ def generic_kaimal_matrix(omega, nodes, T_wind, A, sigma, C, Lx, U, options=None
|
|
610
604
|
return SvSv
|
611
605
|
|
612
606
|
|
613
|
-
def loadmatrix_fe(V, load_coefficients, rho, B, D,
|
607
|
+
def loadmatrix_fe(V, load_coefficients, rho, B, D, admittance=None):
|
614
608
|
|
615
|
-
if
|
616
|
-
|
609
|
+
if admittance is None :
|
610
|
+
admittance = lambda omega_k: np.ones( (4,3) )
|
617
611
|
|
618
612
|
Cd = load_coefficients['Cd']
|
619
613
|
dCd = load_coefficients['dCd']
|
@@ -623,7 +617,7 @@ def loadmatrix_fe(V, load_coefficients, rho, B, D, Admittance = None):
|
|
623
617
|
dCm = load_coefficients['dCm']
|
624
618
|
|
625
619
|
# Equation 7 from Oiseth, 2010
|
626
|
-
BqBq = lambda omega_k: 1/2*rho*V*B*
|
620
|
+
BqBq = lambda omega_k: 1/2*rho*V*B*admittance(omega_k*B/V/2/np.pi)*np.array([[0, 0, 0],
|
627
621
|
[0, 2*D/B*Cd, (D/B*dCd-Cl)],
|
628
622
|
[0, 2*Cl, (dCl+D/B*Cd)],
|
629
623
|
[0, -2*B*Cm, -B*dCm]])
|
@@ -636,10 +630,10 @@ def loadmatrix_fe_static(V, load_coefficients, rho, B, D ):
|
|
636
630
|
Cl = load_coefficients['Cl']
|
637
631
|
Cm = load_coefficients['Cm']
|
638
632
|
|
639
|
-
BqBq = 1/2*rho*V**2*B*np.array([[ 0
|
640
|
-
[ D/B*Cd
|
641
|
-
[
|
642
|
-
[
|
633
|
+
BqBq = 1/2*rho*V**2*B*np.array([[ 0 ],
|
634
|
+
[ D/B*Cd ],
|
635
|
+
[ Cl ],
|
636
|
+
[ -B*Cm ]])
|
643
637
|
return BqBq
|
644
638
|
|
645
639
|
def loadvector(T_el, Bq, T_wind, L, static = False):
|
@@ -660,15 +654,16 @@ def loadvector(T_el, Bq, T_wind, L, static = False):
|
|
660
654
|
|
661
655
|
# Transform from wind coordinates to local element coordinates
|
662
656
|
|
663
|
-
|
664
|
-
T = T_el @ T_wind.T
|
665
|
-
else:
|
666
|
-
T = T_el @ T_wind.T @ np.ones( [3,1] )
|
657
|
+
T = T_el @ T_wind.T
|
667
658
|
|
668
659
|
T_full = blkdiag(T_el, 4) # Block diagonal - repeated 4 times to transform both trans and rot DOFs at each node (2+2)
|
669
660
|
|
670
661
|
# T_full.T transforms L-->G
|
671
|
-
|
662
|
+
if static is False:
|
663
|
+
R = T_full.T @ G @ Bq @ T
|
664
|
+
else:
|
665
|
+
R = T_full.T @ G @ Bq
|
666
|
+
|
672
667
|
R1 = R[0:6] # Element node 1
|
673
668
|
R2 = R[6:12] # Element node 2
|
674
669
|
|
@@ -678,7 +673,7 @@ def loadvector(T_el, Bq, T_wind, L, static = False):
|
|
678
673
|
|
679
674
|
def windaction(omega, S, load_coefficients, elements, T_wind,
|
680
675
|
phi, B, D, U, omega_reduced=None, rho=1.225, print_progress=True,
|
681
|
-
section_lookup=None, nodes=None,
|
676
|
+
section_lookup=None, nodes=None, admittance=None):
|
682
677
|
|
683
678
|
if nodes is None:
|
684
679
|
nodes = list(set([a for b in [el.nodes for el in elements] for a in b]))
|
@@ -704,7 +699,7 @@ def windaction(omega, S, load_coefficients, elements, T_wind,
|
|
704
699
|
lc_fun = lambda el: load_coefficients
|
705
700
|
B_fun = lambda el: B
|
706
701
|
D_fun = lambda el: D
|
707
|
-
|
702
|
+
admittance_fun = lambda el: admittance
|
708
703
|
else:
|
709
704
|
def get_sec(el):
|
710
705
|
for key in section_lookup:
|
@@ -715,7 +710,7 @@ def windaction(omega, S, load_coefficients, elements, T_wind,
|
|
715
710
|
B_fun = lambda el: B[get_sec(el)]
|
716
711
|
D_fun = lambda el: D[get_sec(el)]
|
717
712
|
|
718
|
-
if
|
713
|
+
if admittance is None: # omit the frequency loop if ADmittance is not included - faster !
|
719
714
|
RG = np.zeros([len(nodes)*n_dofs, 3])
|
720
715
|
for el in elements:
|
721
716
|
node1_dofs = el.nodes[0].global_dofs
|
@@ -724,7 +719,7 @@ def windaction(omega, S, load_coefficients, elements, T_wind,
|
|
724
719
|
mean_wind = U(el.get_cog())
|
725
720
|
Vn = normal_wind(T_wind, el.T0)*mean_wind # Find the normal wind
|
726
721
|
BqBq = loadmatrix_fe(Vn, lc_fun(el), rho, B_fun(el), D_fun(el))
|
727
|
-
R1, R2 = loadvector(el.T0, BqBq, T_wind, el.L) # Obtain the load vector for each element
|
722
|
+
R1, R2 = loadvector(el.T0, BqBq(1), T_wind, el.L) # Obtain the load vector for each element
|
728
723
|
|
729
724
|
RG[node1_dofs, :] = RG[node1_dofs, :] + R1 # Add the contribution from the element (end 1) to the system
|
730
725
|
RG[node2_dofs, :] = RG[node2_dofs, :] + R2 # Add the contribution from the element (end 2) to the system
|
@@ -747,7 +742,7 @@ def windaction(omega, S, load_coefficients, elements, T_wind,
|
|
747
742
|
genSqSq_reduced[:, :, k] = phiT_RG_block @ S(omega_k) @ phiT_RG_block.T # to modal coordinates
|
748
743
|
|
749
744
|
else: # admittance is given - triple loop (the old way, slower)
|
750
|
-
|
745
|
+
admittance_fun = lambda el: admittance[get_sec(el)]
|
751
746
|
|
752
747
|
for k, omega_k in enumerate(omega_reduced):
|
753
748
|
if print_progress:
|
@@ -763,7 +758,7 @@ def windaction(omega, S, load_coefficients, elements, T_wind,
|
|
763
758
|
|
764
759
|
mean_wind = U(el.get_cog())
|
765
760
|
Vn = normal_wind(T_wind, el.T0)*mean_wind # Find the normal wind
|
766
|
-
BqBq = loadmatrix_fe(Vn, lc_fun(el), rho, B_fun(el), D_fun(el),
|
761
|
+
BqBq = loadmatrix_fe(Vn, lc_fun(el), rho, B_fun(el), D_fun(el), admittance=admittance_fun(el))
|
767
762
|
R1, R2 = loadvector(el.T0, BqBq(omega_k), T_wind, el.L) # Obtain the load vector for each element
|
768
763
|
|
769
764
|
RG[node1_dofs, :] = RG[node1_dofs, :] + R1 # Add the contribution from the element (end 1) to the system
|
@@ -821,7 +816,7 @@ def windaction_static(load_coefficients, elements, T_wind,
|
|
821
816
|
mean_wind = U(el.get_cog())
|
822
817
|
Vn = normal_wind(T_wind, el.T0)*mean_wind # Find the normal wind
|
823
818
|
BqBq = loadmatrix_fe_static(Vn, lc_fun(el), rho, B_fun(el), D_fun(el))
|
824
|
-
R1, R2 = loadvector(el.T0, BqBq, T_wind, el.L, static
|
819
|
+
R1, R2 = loadvector(el.T0, BqBq, T_wind, el.L, static=True) # Obtain the load vector for each element
|
825
820
|
|
826
821
|
RG[node1_dofs] = RG[node1_dofs] + R1[:,0] # Add the contribution from the element (end 1) to the system
|
827
822
|
RG[node2_dofs] = RG[node2_dofs] + R2[:,0] # Add the contribution from the element (end 2) to the system
|
@@ -832,12 +827,11 @@ def windaction_static(load_coefficients, elements, T_wind,
|
|
832
827
|
for node in nodes:
|
833
828
|
ix = node.index
|
834
829
|
n = np.r_[6*ix:6*ix+6]
|
835
|
-
RG_block[np.ix_(n)] = RG[n]
|
830
|
+
RG_block[np.ix_(n)] = RG[n]
|
836
831
|
|
837
|
-
|
838
|
-
genSqSq = phi.T @ RG_block
|
832
|
+
genF = phi.T @ RG_block
|
839
833
|
|
840
|
-
return
|
834
|
+
return genF
|
841
835
|
|
842
836
|
def K_from_ad(ad, V, w, B, rho):
|
843
837
|
if w==0:
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.2
|
2
2
|
Name: wawi
|
3
|
-
Version: 0.0.
|
3
|
+
Version: 0.0.7
|
4
4
|
Summary: WAve and WInd response prediction
|
5
5
|
Author-email: "Knut A. Kvåle" <knut.a.kvale@ntnu.no>, Ole Øiseth <ole.oiseth@ntnu.no>, Aksel Fenerci <aksel.fenerci@ntnu.no>, Øivind Wiig Petersen <oyvind.w.petersen@ntnu.no>
|
6
6
|
License: MIT License
|
@@ -69,6 +69,65 @@ pip install git+https://www.github.com/knutankv/wawi.git@main
|
|
69
69
|
|
70
70
|
Quick start
|
71
71
|
=======================
|
72
|
+
Assuming a premade WAWI-model is created and saved as `MyModel.wwi´, it can be imported as follows:
|
73
|
+
|
74
|
+
```python
|
75
|
+
from wawi.model import Model, Windstate, Seastate
|
76
|
+
|
77
|
+
model = Model.load('MyModel.wwi')
|
78
|
+
model.n_modes = 50 # number of dry modes to use for computation
|
79
|
+
omega = np.arange(0.001, 2, 0.01) # frequency axis to use for FRF
|
80
|
+
```
|
81
|
+
|
82
|
+
A windstate (U=20 m/s with origin 90 degrees and other required properties) and a seastate (Hs=2.1m, Tp=8.3s, gamma=8, s=12, heading 90 deg) is created and assigned to the model:
|
83
|
+
|
84
|
+
```python
|
85
|
+
# Wind state
|
86
|
+
U0 = 20.0
|
87
|
+
direction = 90.0
|
88
|
+
windstate = Windstate(U0, direction, Iu=0.136, Iw=0.072,
|
89
|
+
Au=6.8, Aw=9.4, Cuy=10.0, Cwy=6.5,
|
90
|
+
Lux=115, Lwx=9.58, spectrum_type='kaimal')
|
91
|
+
model.assign_windstate(windstate)
|
92
|
+
|
93
|
+
# Sea state
|
94
|
+
Hs = 2.1
|
95
|
+
Tp = 8.3
|
96
|
+
gamma = 8
|
97
|
+
s = 12
|
98
|
+
theta0 = 90.0
|
99
|
+
seastate = Seastate(Tp, Hs, gamma, theta0, s)
|
100
|
+
model.assign_seastate(seastate)
|
101
|
+
```
|
102
|
+
|
103
|
+
The model is plotted by envoking this command:
|
104
|
+
|
105
|
+
```python
|
106
|
+
model.plot()
|
107
|
+
```
|
108
|
+
|
109
|
+
which gives this plot of the model and the wind and wave states:
|
110
|
+

|
111
|
+
|
112
|
+
Then, response predictions can be run by the `run_freqsim` method or iterative modal analysis (combined system) conducted by `run_eig`:
|
113
|
+
|
114
|
+
```python
|
115
|
+
model.run_eig(include=['hydro', 'aero'])
|
116
|
+
model.run_freqsim(omega)
|
117
|
+
```
|
118
|
+
|
119
|
+
The results are stored in `model.results`, and consists of modal representation of the response (easily converted to relevant physical counterparts using built-in methods) or modal parameters of the combined system (natural frequencies, damping ratio, mode shapes).
|
120
|
+
|
121
|
+
The resulting first mode shape is plotted as follows:
|
122
|
+
|
123
|
+
```python
|
124
|
+
model.plot_mode(0)
|
125
|
+
```
|
126
|
+
|
127
|
+
This results in this plot:
|
128
|
+

|
129
|
+
|
130
|
+
For more details and recommendations regarding the analysis setup, it is referred to the examples provided and the code reference.
|
72
131
|
|
73
132
|
Examples
|
74
133
|
=======================
|
@@ -79,7 +138,7 @@ References
|
|
79
138
|
|
80
139
|
Citation
|
81
140
|
=======================
|
82
|
-
Zenodo research entry:
|
141
|
+
Zenodo research entry: [](https://doi.org/10.5281/zenodo.14895014)
|
83
142
|
|
84
143
|
Support
|
85
144
|
=======================
|
@@ -1,10 +1,9 @@
|
|
1
|
-
wawi/__init__.py,sha256=
|
2
|
-
wawi/abq.py,sha256=Sb58fd_REKbOmWngLzzB3_3PxCR-iO_HK1CpdM8sjKs,42660
|
1
|
+
wawi/__init__.py,sha256=ZGsScT_c7WfnnnPCIKTMq2u95I502YsW9e2AXSVKAaY,158
|
3
2
|
wawi/fe.py,sha256=22QKI1GlfsG7o_TpFXaKJfzmbO2_2zdIMaoJmaIZdmY,4001
|
4
|
-
wawi/general.py,sha256=
|
3
|
+
wawi/general.py,sha256=xHRoDkcchrL6Y7pTUqGsjBHh8YBLvX9dYcNXXCjQap8,13787
|
5
4
|
wawi/identification.py,sha256=bVB6EVRR6J39OO9ckuzNJ6f0FwIo4cLqfYgrsIN89TE,1748
|
6
|
-
wawi/io.py,sha256=
|
7
|
-
wawi/modal.py,sha256=
|
5
|
+
wawi/io.py,sha256=5p3q_lQStQR85yo5hZ1Syl25RS2C__zIyV6e_2qRRw4,25308
|
6
|
+
wawi/modal.py,sha256=WjNGFsk0C3tYRy18Q9WNRCatmGJtq1JSv0WrkGV02Eo,20247
|
8
7
|
wawi/plot.py,sha256=XVaQjkjXv26Kt-G8xtAULa4KbWcCIErTQfB6euPACLg,19750
|
9
8
|
wawi/prob.py,sha256=0nCdKdwkNf4M6sHyCZuYlt06gD0NmqRNfl4KesgySWA,215
|
10
9
|
wawi/random.py,sha256=MHPpyTlRJSJFkCmeTAmw4Q5K1BPoFVb0Nxg0jDhkuIM,871
|
@@ -13,10 +12,10 @@ wawi/structural.py,sha256=t25ohH4uBbzUJ7Hqn_kUfYhxcikZkRp8da-9dn7aEbw,8341
|
|
13
12
|
wawi/time_domain.py,sha256=Oe-jviwDtBgpSmA7ZVmKEqQ5tdvsekXwOakYO1qUsN4,3841
|
14
13
|
wawi/tools.py,sha256=-hFBvf0qK4AMn2MQRhrOitDMMMKm2QuRkVfbPBefEkQ,332
|
15
14
|
wawi/wave.py,sha256=hhKg3KhKMBhOoCI7g8PFOGUbYgVhDyGmnYdBEdJ8mkY,16064
|
16
|
-
wawi/wind.py,sha256=
|
15
|
+
wawi/wind.py,sha256=1rUqiEdMaUrhprs87TBdX24l1uDCOINaYkBChMLYWso,38208
|
17
16
|
wawi/wind_code.py,sha256=8OKLPpqc84obNNKBoYb2NunKjcn6a3i_pAWpIFEwg4Q,223
|
18
|
-
wawi-0.0.
|
19
|
-
wawi-0.0.
|
20
|
-
wawi-0.0.
|
21
|
-
wawi-0.0.
|
22
|
-
wawi-0.0.
|
17
|
+
wawi-0.0.7.dist-info/LICENSE,sha256=bH1aWhrNbbPLrYnVFRaoYYzcUr-figHjry-kGB7Tc54,1076
|
18
|
+
wawi-0.0.7.dist-info/METADATA,sha256=8rKv08-csO88ctlULuHEvJ0CPGLeIPmwh-5LiWi71SE,5197
|
19
|
+
wawi-0.0.7.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
|
20
|
+
wawi-0.0.7.dist-info/top_level.txt,sha256=sE2NH_xVXnDKTGeIYzeX5IyU_j5vYDLl32v5uLiOMT4,5
|
21
|
+
wawi-0.0.7.dist-info/RECORD,,
|