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 CHANGED
@@ -1,7 +1,7 @@
1
- __version__ = "0.0.3"
1
+ __version__ = "0.0.7"
2
2
 
3
3
  __pdoc__ = dict()
4
- __pdoc__['module.name'] = False
4
+ __pdoc__['wawi.abq'] = False
5
5
 
6
6
  # Other packages
7
7
  import numpy as np
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 types file not found. No pontoon_types definitions applied.')
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['xi0'])
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['m_min']
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['phi_x']
165
+ phi_x = modal.pop('phi_x')
166
166
  else:
167
167
  phi_x = None
168
-
169
- modal_dry = ModalDry(modal['phi'], m=np.array(modal['m']), k=np.array(modal['k']),
170
- local_phi=modal['local'], xi0=xi0, phi_x=phi_x, m_min=m_min)
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/2, 0.01), axis=0)
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 von_Karman_auto(omega, Lx, sigma, V):
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, options=None):
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 'spectra_type' in options:
573
- if options['spectra_type'] == 'vonKarman':
574
- Su[node_ix,:], Sv[node_ix,:], Sw[node_ix,:] = von_Karman_auto(omega, Lx, sigma, V[node_ix])
575
- elif options['spectra_type'] == 'Kaimal':
576
- 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
577
- else: # use Kaimal (default)
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, Admittance = None):
607
+ def loadmatrix_fe(V, load_coefficients, rho, B, D, admittance=None):
614
608
 
615
- if Admittance is None :
616
- Admittance = lambda omega_k: np.ones( (4,3) )
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*Admittance(omega_k*B/V/2/np.pi)*np.array([[0, 0, 0],
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, 0 , 0 ],
640
- [ D/B*Cd, 0 , 0 ],
641
- [ 0, 0 , Cl ],
642
- [ 0, B*Cm , 0 ]])
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
- if static is False:
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
- R = T_full.T @ G @ Bq @ T
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, Admittance = 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
- Admittance_fun = lambda el: Admittance
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 Admittance is None: # omit the frequency loop if ADmittance is not included - faster !
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
- Admittance_fun = lambda el: Admittance[get_sec(el)]
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), Admittance = Admittance_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 = True) # Obtain the load vector for each element
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] #verified with MATLAB version for beam example
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 genSqSq
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
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
+ ![Model](https://raw.githubusercontent.com/knutankv/wawi/main/docs/model.png)
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
+ ![Mode 1](https://raw.githubusercontent.com/knutankv/wawi/main/docs/mode1.png)
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: [![DOI](https://zenodo.org/badge/921621297.svg)](https://doi.org/10.5281/zenodo.14895014)
83
142
 
84
143
  Support
85
144
  =======================
@@ -1,10 +1,9 @@
1
- wawi/__init__.py,sha256=QHZAh_Xn6XY-OJjNJfylCc7nxgq1uXVgu1IQtnv1VPI,161
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=BWlI7oNnYTwfEwztwySl_j45YD6s634rczFO5D8iolI,13935
3
+ wawi/general.py,sha256=xHRoDkcchrL6Y7pTUqGsjBHh8YBLvX9dYcNXXCjQap8,13787
5
4
  wawi/identification.py,sha256=bVB6EVRR6J39OO9ckuzNJ6f0FwIo4cLqfYgrsIN89TE,1748
6
- wawi/io.py,sha256=XANKEHBPGC_1-Rn2QPlI_ygpntAR1Haw962IovER8jA,24586
7
- wawi/modal.py,sha256=c8cZ98y8BZuFcfrwweE75AAX7QGFDfjLeYK07hzAvCo,20249
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=uyKuNugXmkXDGFDRvddbPCAfoGfWkJR7Ge6qNm-uiLM,38548
15
+ wawi/wind.py,sha256=1rUqiEdMaUrhprs87TBdX24l1uDCOINaYkBChMLYWso,38208
17
16
  wawi/wind_code.py,sha256=8OKLPpqc84obNNKBoYb2NunKjcn6a3i_pAWpIFEwg4Q,223
18
- wawi-0.0.3.dist-info/LICENSE,sha256=bH1aWhrNbbPLrYnVFRaoYYzcUr-figHjry-kGB7Tc54,1076
19
- wawi-0.0.3.dist-info/METADATA,sha256=Wl2EVbB9D3m0LPJsgJX6D4jCNIUKpCYh3Jl40bBnuAg,3133
20
- wawi-0.0.3.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
21
- wawi-0.0.3.dist-info/top_level.txt,sha256=sE2NH_xVXnDKTGeIYzeX5IyU_j5vYDLl32v5uLiOMT4,5
22
- wawi-0.0.3.dist-info/RECORD,,
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,,