Skip to content
GitLab
Explore
Sign in
Register
Primary navigation
Search or go to…
Project
W
WindEnergyToolbox
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
toolbox
WindEnergyToolbox
Commits
b3833869
Commit
b3833869
authored
8 years ago
by
tlbl
Browse files
Options
Downloads
Patches
Plain Diff
integrating fatigue into windIO
parent
275c7854
No related branches found
No related tags found
1 merge request
!4
Integration of HAWCio into Windio and further fatigue tools marging
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
wetb/prepost/windIO.py
+38
-83
38 additions, 83 deletions
wetb/prepost/windIO.py
with
38 additions
and
83 deletions
wetb/prepost/windIO.py
+
38
−
83
View file @
b3833869
...
@@ -14,17 +14,8 @@ from builtins import range
...
@@ -14,17 +14,8 @@ from builtins import range
from
builtins
import
str
from
builtins
import
str
from
builtins
import
int
from
builtins
import
int
from
future
import
standard_library
from
future
import
standard_library
standard_library
.
install_aliases
()
from
builtins
import
object
from
builtins
import
object
# always devide as floats
#print(*objects, sep=' ', end='\n', file=sys.stdout)
__author__
=
'
David Verelst
'
__license__
=
'
GPL
'
__version__
=
'
0.5
'
import
os
import
os
import
copy
import
copy
import
unittest
import
unittest
...
@@ -40,17 +31,20 @@ import array
...
@@ -40,17 +31,20 @@ import array
import
numpy
as
np
import
numpy
as
np
import
pandas
as
pd
import
pandas
as
pd
#import sympy
# misc is part of prepost, which is available on the dtu wind gitlab server:
# misc is part of prepost, which is available on the dtu wind gitlab server:
# https://gitlab.windenergy.dtu.dk/dave/prepost
# https://gitlab.windenergy.dtu.dk/dave/prepost
from
wetb.prepost
import
misc
from
wetb.prepost
import
misc
# wind energy python toolbox, available on the dtu wind redmine server:
# wind energy python toolbox, available on the dtu wind redmine server:
# http://vind-redmine.win.dtu.dk/projects/pythontoolbox/repository/show/fatigue_tools
# http://vind-redmine.win.dtu.dk/projects/pythontoolbox/repository/show/fatigue_tools
from
wetb.fatigue_tools.rainflowcounting.rainflowcount
import
rainflow_astm
as
rainflow_astm
from
wetb.fatigue_tools.rainflowcounting.rfc_hist
import
rfc_hist
as
rfc_hist
from
wetb.hawc2.Hawc2io
import
ReadHawc2
from
wetb.hawc2.Hawc2io
import
ReadHawc2
from
wetb.fatigue_tools
import
fatigue
from
wetb.fatigue_tools.fatigue
import
eq_load
standard_library
.
install_aliases
()
__author__
=
'
David Verelst
'
__license__
=
'
GPL
'
__version__
=
'
0.5
'
class
LoadResults
(
ReadHawc2
):
class
LoadResults
(
ReadHawc2
):
...
@@ -130,7 +124,7 @@ class LoadResults(ReadHawc2):
...
@@ -130,7 +124,7 @@ class LoadResults(ReadHawc2):
self
.
file_path
=
file_path
self
.
file_path
=
file_path
# remove .log, .dat, .sel extensions who might be accedental left
# remove .log, .dat, .sel extensions who might be accedental left
if
file_name
[
-
4
:]
in
[
'
.htc
'
,
'
.sel
'
,
'
.dat
'
,
'
.log
'
]:
if
file_name
[
-
4
:]
in
[
'
.htc
'
,
'
.sel
'
,
'
.dat
'
,
'
.log
'
]:
file_name
=
file_name
[:
-
4
]
file_name
=
file_name
[:
-
4
]
# FIXME: since HAWC2 will always have lower case output files, convert
# FIXME: since HAWC2 will always have lower case output files, convert
# any wrongly used upper case letters to lower case here
# any wrongly used upper case letters to lower case here
...
@@ -146,7 +140,6 @@ class LoadResults(ReadHawc2):
...
@@ -146,7 +140,6 @@ class LoadResults(ReadHawc2):
stop
=
time
()
-
start
stop
=
time
()
-
start
print
(
'
time to load HAWC2 file:
'
,
stop
,
'
s
'
)
print
(
'
time to load HAWC2 file:
'
,
stop
,
'
s
'
)
def
reformat_sig_details
(
self
):
def
reformat_sig_details
(
self
):
"""
Change HAWC2 output description of the channels short descriptive
"""
Change HAWC2 output description of the channels short descriptive
strings, usable in plots
strings, usable in plots
...
@@ -156,7 +149,7 @@ class LoadResults(ReadHawc2):
...
@@ -156,7 +149,7 @@ class LoadResults(ReadHawc2):
# CONFIGURATION: mappings between HAWC2 and short good output:
# CONFIGURATION: mappings between HAWC2 and short good output:
change_list
=
[]
change_list
=
[]
change_list
.
append
(
[
'
original
'
,
'
new improved
'
]
)
change_list
.
append
(
[
'
original
'
,
'
new improved
'
]
)
# change_list.append( ['Mx coo: hub1','blade1 root bending: flap'] )
# change_list.append( ['Mx coo: hub1','blade1 root bending: flap'] )
# change_list.append( ['My coo: hub1','blade1 root bending: edge'] )
# change_list.append( ['My coo: hub1','blade1 root bending: edge'] )
...
@@ -170,41 +163,41 @@ class LoadResults(ReadHawc2):
...
@@ -170,41 +163,41 @@ class LoadResults(ReadHawc2):
# change_list.append( ['My coo: hub3','blade3 root bending: edge'] )
# change_list.append( ['My coo: hub3','blade3 root bending: edge'] )
# change_list.append( ['Mz coo: hub3','blade3 root bending: torsion'] )
# change_list.append( ['Mz coo: hub3','blade3 root bending: torsion'] )
change_list
.
append
(
[
'
Mx coo: blade1
'
,
'
blade1 flap
'
]
)
change_list
.
append
([
'
Mx coo: blade1
'
,
'
blade1 flap
'
])
change_list
.
append
(
[
'
My coo: blade1
'
,
'
blade1 edge
'
]
)
change_list
.
append
([
'
My coo: blade1
'
,
'
blade1 edge
'
])
change_list
.
append
(
[
'
Mz coo: blade1
'
,
'
blade1 torsion
'
]
)
change_list
.
append
([
'
Mz coo: blade1
'
,
'
blade1 torsion
'
])
change_list
.
append
(
[
'
Mx coo: blade2
'
,
'
blade2 flap
'
]
)
change_list
.
append
([
'
Mx coo: blade2
'
,
'
blade2 flap
'
])
change_list
.
append
(
[
'
My coo: blade2
'
,
'
blade2 edge
'
]
)
change_list
.
append
([
'
My coo: blade2
'
,
'
blade2 edge
'
])
change_list
.
append
(
[
'
Mz coo: blade2
'
,
'
blade2 torsion
'
]
)
change_list
.
append
([
'
Mz coo: blade2
'
,
'
blade2 torsion
'
])
change_list
.
append
(
[
'
Mx coo: blade3
'
,
'
blade3 flap
'
]
)
change_list
.
append
([
'
Mx coo: blade3
'
,
'
blade3 flap
'
])
change_list
.
append
(
[
'
My coo: blade3
'
,
'
blade3 edeg
'
]
)
change_list
.
append
([
'
My coo: blade3
'
,
'
blade3 edeg
'
])
change_list
.
append
(
[
'
Mz coo: blade3
'
,
'
blade3 torsion
'
]
)
change_list
.
append
([
'
Mz coo: blade3
'
,
'
blade3 torsion
'
])
change_list
.
append
(
[
'
Mx coo: hub1
'
,
'
blade1 out-of-plane
'
]
)
change_list
.
append
([
'
Mx coo: hub1
'
,
'
blade1 out-of-plane
'
])
change_list
.
append
(
[
'
My coo: hub1
'
,
'
blade1 in-plane
'
]
)
change_list
.
append
([
'
My coo: hub1
'
,
'
blade1 in-plane
'
])
change_list
.
append
(
[
'
Mz coo: hub1
'
,
'
blade1 torsion
'
]
)
change_list
.
append
([
'
Mz coo: hub1
'
,
'
blade1 torsion
'
])
change_list
.
append
(
[
'
Mx coo: hub2
'
,
'
blade2 out-of-plane
'
]
)
change_list
.
append
([
'
Mx coo: hub2
'
,
'
blade2 out-of-plane
'
])
change_list
.
append
(
[
'
My coo: hub2
'
,
'
blade2 in-plane
'
]
)
change_list
.
append
([
'
My coo: hub2
'
,
'
blade2 in-plane
'
])
change_list
.
append
(
[
'
Mz coo: hub2
'
,
'
blade2 torsion
'
]
)
change_list
.
append
([
'
Mz coo: hub2
'
,
'
blade2 torsion
'
])
change_list
.
append
(
[
'
Mx coo: hub3
'
,
'
blade3 out-of-plane
'
]
)
change_list
.
append
([
'
Mx coo: hub3
'
,
'
blade3 out-of-plane
'
])
change_list
.
append
(
[
'
My coo: hub3
'
,
'
blade3 in-plane
'
]
)
change_list
.
append
([
'
My coo: hub3
'
,
'
blade3 in-plane
'
])
change_list
.
append
(
[
'
Mz coo: hub3
'
,
'
blade3 torsion
'
]
)
change_list
.
append
([
'
Mz coo: hub3
'
,
'
blade3 torsion
'
])
# this one will create a false positive for tower node nr1
# this one will create a false positive for tower node nr1
change_list
.
append
(
[
'
Mx coo: tower
'
,
'
tower top momemt FA
'
]
)
change_list
.
append
([
'
Mx coo: tower
'
,
'
tower top momemt FA
'
])
change_list
.
append
(
[
'
My coo: tower
'
,
'
tower top momemt SS
'
]
)
change_list
.
append
([
'
My coo: tower
'
,
'
tower top momemt SS
'
])
change_list
.
append
(
[
'
Mz coo: tower
'
,
'
yaw-moment
'
]
)
change_list
.
append
([
'
Mz coo: tower
'
,
'
yaw-moment
'
])
change_list
.
append
(
[
'
Mx coo: chasis
'
,
'
chasis momemt FA
'
]
)
change_list
.
append
([
'
Mx coo: chasis
'
,
'
chasis momemt FA
'
])
change_list
.
append
(
[
'
My coo: chasis
'
,
'
yaw-moment chasis
'
]
)
change_list
.
append
([
'
My coo: chasis
'
,
'
yaw-moment chasis
'
])
change_list
.
append
(
[
'
Mz coo: chasis
'
,
'
chasis moment SS
'
]
)
change_list
.
append
([
'
Mz coo: chasis
'
,
'
chasis moment SS
'
])
change_list
.
append
(
[
'
DLL inp 2: 2
'
,
'
tower clearance
'
]
)
change_list
.
append
(
[
'
DLL inp 2: 2
'
,
'
tower clearance
'
])
self
.
ch_details_new
=
np
.
ndarray
(
shape
=
(
self
.
Nch
,
3
),
dtype
=
'
<U100
'
)
self
.
ch_details_new
=
np
.
ndarray
(
shape
=
(
self
.
Nch
,
3
),
dtype
=
'
<U100
'
)
# approach: look for a specific description and change it.
# approach: look for a specific description and change it.
# This approach is slow, but will not fail if the channel numbers change
# This approach is slow, but will not fail if the channel numbers change
...
@@ -839,45 +832,7 @@ class LoadResults(ReadHawc2):
...
@@ -839,45 +832,7 @@ class LoadResults(ReadHawc2):
Damage equivalent loads for each m value.
Damage equivalent loads for each m value.
"""
"""
try
:
return
eq_load
(
signal
,
no_bins
=
no_bins
,
m
=
m
,
neq
=
neq
)[
0
]
sig_rf
=
rainflow_astm
(
signal
)
except
(
TypeError
)
as
e
:
print
(
e
)
return
[]
if
len
(
sig_rf
)
<
1
and
not
sig_rf
:
return
[]
hist_data
,
x
,
bin_avg
=
rfc_hist
(
sig_rf
,
no_bins
)
m
=
np
.
atleast_1d
(
m
)
eq
=
[]
for
i
in
range
(
len
(
m
)):
eq
.
append
(
np
.
power
(
np
.
sum
(
0.5
*
hist_data
*
\
np
.
power
(
bin_avg
,
m
[
i
]))
/
neq
,
1.
/
m
[
i
]))
return
eq
# TODO: general signal method, this is not HAWC2 specific, move out
def
cycle_matrix
(
self
,
signal
,
no_bins
=
46
,
m
=
[
3
,
4
,
6
,
8
,
10
,
12
]):
# import fatigue_tools.fatigue as ft
# cycles, ampl_bin_mean, ampl_bin_edges, mean_bin_mean, mean_edges \
# = ft.cycle_matrix(signal, ampl_bins=no_bins, mean_bins=1,
# rainflow_func=ft.rainflow_windap)
# # in this case eq = sum( n_i*S_i^m )
# return [np.sum(cycles * ampl_bin_mean ** _m) for _m in m]
try
:
sig_rf
=
rainflow_astm
(
signal
)
except
:
return
[]
if
len
(
sig_rf
)
<
1
and
not
sig_rf
:
return
[]
hist_data
,
x
,
bin_avg
=
rfc_hist
(
sig_rf
,
no_bins
)
m
=
np
.
atleast_1d
(
m
)
return
[
np
.
sum
(
0.5
*
hist_data
*
bin_avg
**
_m
)
for
_m
in
m
]
def
blade_deflection
(
self
):
def
blade_deflection
(
self
):
"""
"""
...
@@ -886,7 +841,7 @@ class LoadResults(ReadHawc2):
...
@@ -886,7 +841,7 @@ class LoadResults(ReadHawc2):
# select all the y deflection channels
# select all the y deflection channels
db
=
misc
.
DictDB
(
self
.
ch_dict
)
db
=
misc
.
DictDB
(
self
.
ch_dict
)
db
.
search
({
'
sensortype
'
:
'
state pos
'
,
'
component
'
:
'
z
'
})
db
.
search
({
'
sensortype
'
:
'
state pos
'
,
'
component
'
:
'
z
'
})
# sort the keys and save the mean values to an array/list
# sort the keys and save the mean values to an array/list
chiz
,
zvals
=
[],
[]
chiz
,
zvals
=
[],
[]
for
key
in
sorted
(
db
.
dict_sel
.
keys
()):
for
key
in
sorted
(
db
.
dict_sel
.
keys
()):
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment