Skip to content
Snippets Groups Projects
Commit 00e6196a authored by David Verelst's avatar David Verelst
Browse files

prepost.hawcstab2: load_operation returns result, added test + example

parent 5be81674
No related branches found
No related tags found
No related merge requests found
"""
Created on Wed Oct 10 12:47:10 2018
@author: dave
"""
import os
from wetb.prepost import windIO
from wetb.hawc2 import Hawc2io
from wetb.prepost import hawcstab2
# =============================================================================
# READ HAWC2 RESULT FILE
# =============================================================================
# METHOD A
fname = '../wetb/hawc2/tests/test_files/hawc2io/Hawc2ascii.sel'
res = Hawc2io.ReadHawc2(fname)
sig = res.ReadAll()
# METHOD B
path, file = os.path.dirname(fname), os.path.basename(fname)
res = windIO.LoadResults(path, file)
sig = res.sig
sel = res.ch_details
# result in dataframe with unique channel names (instead of indices)
sig_df = res.sig2df()
ch_df = res.ch_df
# =============================================================================
# READ HAWCStab2 files
# =============================================================================
res = hawcstab2.results()
fname = '../wetb/prepost/tests/data/campbell_diagram.cmb'
df_cmb = res.load_cmb_df(fname)
fname = '../wetb/prepost/tests/data/dtu10mw_v1_defl_u10000.ind'
df_ind = res.load_ind(fname)
fname = '../wetb/prepost/tests/data/dtu10mw.opt'
df_opt = res.load_operation(fname)
fname = '../wetb/prepost/tests/data/dtu10mw_v1.pwr'
df_pwr, units = res.load_pwr_df(fname)
fname = '../wetb/prepost/tests/data/controller_input_quadratic.txt'
tuning = hawcstab2.ReadControlTuning()
tuning.read_parameters(fname)
# tuning parameters are saved as attributes
tuning.pi_gen_reg1.K
tuning.pi_gen_reg2.I
tuning.pi_gen_reg2.Kp
tuning.pi_gen_reg2.Ki
tuning.pi_gen_reg2.Kd
tuning.pi_pitch_reg3.Kp
tuning.pi_pitch_reg3.Ki
tuning.pi_pitch_reg3.Kd
tuning.pi_pitch_reg3.K1
tuning.pi_pitch_reg3.K2
tuning.aero_damp.Kp2
tuning.aero_damp.Ko1
tuning.aero_damp.Ko2
# or you can get them as a dictionary
tune_tags = tuning.parameters2tags()
# -*- coding: utf-8 -*-
"""
Created on Tue Jan 14 14:12:58 2014
......@@ -261,19 +260,19 @@ class results(object):
# when the array is empty, set operation to an empty DataFrame
if len(operation) == 0:
cols = ['windspeed', 'pitch_deg', 'rotorspeed_rpm']
self.operation = pd.DataFrame(columns=cols)
return
return pd.DataFrame(columns=cols)
# when there is only one data point, the array is 1D, we allways need
# a 2D array otherwise the columns become rows in the DataFrame
elif len(operation.shape) == 1:
operation = operation.reshape((1, operation.shape[0]))
try:
cols = ['windspeed', 'pitch_deg', 'rotorspeed_rpm']
self.operation = pd.DataFrame(operation, columns=cols)
operation = pd.DataFrame(operation, columns=cols)
except ValueError:
cols = ['windspeed', 'pitch_deg', 'rotorspeed_rpm', 'P_aero',
'T_aero']
self.operation = pd.DataFrame(operation, columns=cols)
operation = pd.DataFrame(operation, columns=cols)
return operation
def load_matrices(self, fpath, basename, operating_point=1,
control_mat=False, local_wind_mat=False):
......
21 wind speed [m/s] pitch [deg] rot. speed [rpm]
5.0 1.52 6.00
6.0 0.46 6.00
7.0 0.00 6.37
8.0 0.00 7.28
9.0 0.00 8.19
10.0 0.00 9.10
11.0 0.00 9.60
12.0 4.10 9.60
13.0 6.69 9.60
14.0 8.62 9.60
15.0 10.26 9.60
16.0 11.74 9.60
17.0 13.10 9.60
18.0 14.38 9.60
19.0 15.59 9.60
20.0 16.76 9.60
21.0 17.88 9.60
22.0 18.97 9.60
23.0 20.03 9.60
24.0 21.05 9.60
25.0 22.05 9.60
22 wind speed [m/s] pitch [deg] rot. speed [rpm] aero power [kw] aero thrust [kn]
0.4000000000000000E+01 0.5349309632994260E-03 0.3385905837982068E+02 0.7201472127920620E+01 0.3238197412297314E+01
0.5000000000000000E+01 0.5349309755366098E-03 0.4210546666682672E+02 0.1415607774011505E+02 0.5017229492571652E+01
0.6000000000000000E+01 0.5349309755382001E-03 0.5043274240183678E+02 0.2459236895692140E+02 0.7182292864353710E+01
0.7000000000000000E+01 0.5349309755382001E-03 0.5876454811562412E+02 0.3923045950432546E+02 0.9727470498252524E+01
0.8000000000000000E+01 0.5349309755382001E-03 0.6711475958726750E+02 0.5879853446478288E+02 0.1266120196263318E+02
0.9000000000000000E+01 0.5349309755382001E-03 0.7000000000000000E+02 0.8323079728956920E+02 0.1498841355250623E+02
0.1000000000000000E+02 0.1163755866416270E+01 0.7000000000000000E+02 0.1064017983536164E+03 0.1559515367779657E+02
0.1100000000000000E+02 0.5244219122437820E+01 0.7000000000000000E+02 0.1064000990173816E+03 0.1261946763533536E+02
0.1200000000000000E+02 0.7805516131255263E+01 0.7000000000000000E+02 0.1064034294717032E+03 0.1109351229548101E+02
0.1300000000000000E+02 0.9888742159166926E+01 0.7000000000000000E+02 0.1063986284106002E+03 0.1004076469859912E+02
0.1400000000000000E+02 0.1171931406170756E+02 0.7000000000000000E+02 0.1063986146999500E+03 0.9242429622326702E+01
0.1500000000000000E+02 0.1338395969300175E+02 0.7000000000000000E+02 0.1063937200866419E+03 0.8609049584190897E+01
0.1600000000000000E+02 0.1493218874586698E+02 0.7000000000000000E+02 0.1064043646466927E+03 0.8091730136938368E+01
0.1700000000000000E+02 0.1639469013123552E+02 0.7000000000000000E+02 0.1064013899168824E+03 0.7658983927004478E+01
0.1800000000000000E+02 0.1778792307025338E+02 0.7000000000000000E+02 0.1064047949236002E+03 0.7292116562690632E+01
0.1900000000000000E+02 0.1912315185121887E+02 0.7000000000000000E+02 0.1063985234138157E+03 0.6977317857551209E+01
0.2000000000000000E+02 0.2040918213796199E+02 0.7000000000000000E+02 0.1064031491365678E+03 0.6705055846501972E+01
0.2100000000000000E+02 0.2165209915924424E+02 0.7000000000000000E+02 0.1063998138679043E+03 0.6468359027748811E+01
0.2200000000000000E+02 0.2285648140629532E+02 0.7000000000000000E+02 0.1064240428325993E+03 0.6262034347042015E+01
0.2300000000000000E+02 0.2402752818115222E+02 0.7000000000000000E+02 0.1064005848616629E+03 0.6078053602135600E+01
0.2400000000000000E+02 0.2516336964663254E+02 0.7000000000000000E+02 0.1064334951382803E+03 0.5918201578325677E+01
0.2500000000000000E+02 0.2627214012465693E+02 0.7000000000000000E+02 0.1064694335445150E+03 0.5775852683705587E+01
......@@ -157,6 +157,33 @@ class Tests(unittest.TestCase):
self.assertEqual(data.shape, df_data.shape)
np.testing.assert_allclose(data, df_data.values)
def test_opt_file(self):
res = results()
fname = pjoin(pdirname(__file__), 'data', 'dtu10mw.opt')
df = res.load_operation(fname)
tmp = [5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
21, 22, 23, 24, 25]
np.testing.assert_allclose(tmp, df['windspeed'].values)
self.assertEqual(df.values.shape, (21, 3))
fname = pjoin(pdirname(__file__), 'data', 'kb6.opt')
df = res.load_operation(fname)
tmp = [4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
21, 22, 23, 24, 25]
np.testing.assert_allclose(tmp, df['windspeed'].values)
tmp = [7.20147212792062, 14.1560777401151, 24.5923689569214,
39.2304595043255, 58.7985344647829, 83.2307972895692,
106.401798353616, 106.400099017382, 106.403429471703,
106.3986284106, 106.39861469995, 106.393720086642,
106.404364646693, 106.401389916882, 106.4047949236,
106.398523413816, 106.403149136568, 106.399813867904,
106.424042832599, 106.400584861663, 106.43349513828,
106.469433544515]
np.testing.assert_allclose(tmp, df['P_aero'].values)
self.assertEqual(df.values.shape, (22, 5))
if __name__ == "__main__":
unittest.main()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment