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
ec3d77e8
There was a problem fetching the pipeline summary.
Commit
ec3d77e8
authored
8 years ago
by
Mads M. Pedersen
Browse files
Options
Downloads
Patches
Plain Diff
auto_detect_modelpath implemented in HTCFile
parent
e6e099a8
No related branches found
No related tags found
No related merge requests found
Pipeline
#
Changes
3
Pipelines
1
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
wetb/hawc2/htc_file.py
+21
-8
21 additions, 8 deletions
wetb/hawc2/htc_file.py
wetb/hawc2/tests/test_files/htcfiles/sub/test.htc
+783
-0
783 additions, 0 deletions
wetb/hawc2/tests/test_files/htcfiles/sub/test.htc
wetb/hawc2/tests/test_htc_file.py
+50
-41
50 additions, 41 deletions
wetb/hawc2/tests/test_htc_file.py
with
854 additions
and
49 deletions
wetb/hawc2/htc_file.py
+
21
−
8
View file @
ec3d77e8
...
@@ -43,7 +43,7 @@ class HTCFile(HTCContents, HTCDefaults):
...
@@ -43,7 +43,7 @@ class HTCFile(HTCContents, HTCDefaults):
modelpath
=
"
../
"
modelpath
=
"
../
"
initial_comments
=
None
initial_comments
=
None
_contents
=
None
_contents
=
None
def
__init__
(
self
,
filename
=
None
,
modelpath
=
"
../
"
):
def
__init__
(
self
,
filename
=
None
,
modelpath
=
None
):
"""
"""
Parameters
Parameters
---------
---------
...
@@ -54,15 +54,28 @@ class HTCFile(HTCContents, HTCDefaults):
...
@@ -54,15 +54,28 @@ class HTCFile(HTCContents, HTCDefaults):
"""
"""
if
filename
is
not
None
:
if
filename
is
not
None
:
self
.
modelpath
=
os
.
path
.
realpath
(
os
.
path
.
join
(
os
.
path
.
dirname
(
filename
),
modelpath
))
self
.
filename
=
filename
self
.
filename
=
filename
self
.
modelpath
=
modelpath
or
self
.
auto_detect_modelpath
()
else
:
if
filename
and
not
os
.
path
.
isabs
(
self
.
modelpath
):
self
.
modelpath
=
modelpath
self
.
modelpath
=
os
.
path
.
realpath
(
os
.
path
.
join
(
os
.
path
.
dirname
(
self
.
filename
),
self
.
modelpath
))
#assert 'simulation' in self.contents, "%s could not be loaded. 'simulation' section missing" % filename
#assert 'simulation' in self.contents, "%s could not be loaded. 'simulation' section missing" % filename
def
auto_detect_modelpath
(
self
):
if
self
.
filename
is
None
:
return
"
../
"
#print (["../"*i for i in range(3)])
import
numpy
as
np
found
=
([
np
.
sum
([
os
.
path
.
isfile
(
os
.
path
.
join
(
os
.
path
.
dirname
(
self
.
filename
),
"
../
"
*
i
,
f
))
for
f
in
self
.
input_files
()
if
not
os
.
path
.
isabs
(
f
)])
for
i
in
range
(
4
)])
#for f in self.input_files():
# print (os.path.isfile(os.path.join(os.path.dirname(self.filename), "../",f)), f)
if
max
(
found
)
>
0
:
return
"
../
"
*
np
.
argmax
(
found
)
else
:
raise
ValueError
(
"
Modelpath cannot be autodetected for
'
%s
'
.
\n
Input files not found near htc file
"
%
self
.
filename
)
def
_load
(
self
):
def
_load
(
self
):
self
.
reset
()
self
.
reset
()
self
.
initial_comments
=
[]
self
.
initial_comments
=
[]
...
@@ -174,7 +187,7 @@ class HTCFile(HTCContents, HTCDefaults):
...
@@ -174,7 +187,7 @@ class HTCFile(HTCContents, HTCDefaults):
def
input_files
(
self
):
def
input_files
(
self
):
self
.
contents
# load if not loaded
self
.
contents
# load if not loaded
files
=
self
.
htc_inputfiles
files
=
[
os
.
path
.
abspath
(
f
).
replace
(
"
\\
"
,
"
/
"
)
for
f
in
self
.
htc_inputfiles
]
if
'
new_htc_structure
'
in
self
:
if
'
new_htc_structure
'
in
self
:
for
mb
in
[
self
.
new_htc_structure
[
mb
]
for
mb
in
self
.
new_htc_structure
.
keys
()
if
mb
.
startswith
(
'
main_body
'
)]:
for
mb
in
[
self
.
new_htc_structure
[
mb
]
for
mb
in
self
.
new_htc_structure
.
keys
()
if
mb
.
startswith
(
'
main_body
'
)]:
if
"
timoschenko_input
"
in
mb
:
if
"
timoschenko_input
"
in
mb
:
...
...
This diff is collapsed.
Click to expand it.
wetb/hawc2/tests/test_files/htcfiles/sub/test.htc
0 → 100644
+
783
−
0
View file @
ec3d77e8
; DTU_10MW_RWT, cpav, 17th Friday 2015
;
begin simulation;
time_stop 100;
solvertype 1; (newmark)
on_no_convergence continue;
convergence_limits 1E3 1.0 1E-7; ; . to run again, changed 07/11
logfile ./logfiles/dlc12_iec61400-1ed3/dlc12_wsp10_wdir000_s1004.log;
visualization ./visualization/dlc12_wsp10_wdir000_s1004.hdf5;
animation ./animation/structure_aero_control_turb.dat;
begin newmark;
deltat 0.02;
end newmark;
end simulation;
;
;----------------------------------------------------------------------------------------------------------------------------------------------------------------
begin new_htc_structure;
;--------------------------------------------------------------------------------------------------
beam_output_file_name ./res_eigen/dlc12_iec61400-1ed3/dlc12_wsp10_wdir000_s1004/dlc12_iec61400-1ed3/dlc12_wsp10_wdir000_s1004/dlc12_wsp10_wdir000_s1004_beam.dat;
body_output_file_name ./res_eigen/dlc12_iec61400-1ed3/dlc12_wsp10_wdir000_s1004/dlc12_iec61400-1ed3/dlc12_wsp10_wdir000_s1004/dlc12_wsp10_wdir000_s1004_body.dat;
struct_inertia_output_file_name ./res_eigen/dlc12_iec61400-1ed3/dlc12_wsp10_wdir000_s1004/dlc12_iec61400-1ed3/dlc12_wsp10_wdir000_s1004/dlc12_wsp10_wdir000_s1004_struct.dat;
body_eigenanalysis_file_name ./res_eigen/dlc12_iec61400-1ed3/dlc12_wsp10_wdir000_s1004/dlc12_iec61400-1ed3/dlc12_wsp10_wdir000_s1004/dlc12_wsp10_wdir000_s1004_body_eigen.dat;
structure_eigenanalysis_file_name ./res_eigen/dlc12_iec61400-1ed3/dlc12_wsp10_wdir000_s1004/dlc12_iec61400-1ed3/dlc12_wsp10_wdir000_s1004/dlc12_wsp10_wdir000_s1004_strc_eigen.dat;
system_eigenanalysis ./launcher_test/ssystem_eigenanalysis.dat;
;---------------------------------------------------------------------------------------------------
begin main_body; tower 115m
name tower;
type timoschenko;
nbodies 1;
node_distribution c2_def;
damping_posdef 0.0 0.0 0.0 4.12E-03 4.12E-03 4.5E-04; Mx My Mz Kx Ky Kz , M´s raises overall level, K´s raises high freguency level "tuned by Larh"
begin timoschenko_input;
filename ./data/DTU_10MW_RWT_Tower_st.dat;
set 1 2;
end timoschenko_input;
begin c2_def; Definition of centerline (main_body coordinates)
nsec 11;
sec 1 0 0 0.00 0; x,y,z,twist
sec 2 0 0 -11.50 0;
sec 3 0 0 -23.00 0;
sec 4 0 0 -34.50 0;
sec 5 0 0 -46.00 0;
sec 6 0 0 -57.50 0;
sec 7 0 0 -69.00 0;
sec 8 0 0 -80.50 0;
sec 9 0 0 -92.00 0;
sec 10 0 0 -103.50 0;
sec 11 0 0 -115.63 0;
end c2_def;
end main_body;
;
begin main_body;
name towertop;
type timoschenko;
nbodies 1;
node_distribution c2_def;
damping_posdef 0.0 0.0 0.0 7.00E-03 7.00E-03 7.00E-03; "changed by Larh"
concentrated_mass 2.0 0.0 2.6870E+00 3.0061E-01 4.4604E+05 4.1060E+06 4.1060E+05 4.1060E+06; Nacelle mass and inertia "corrected by Anyd 25/4/13"
begin timoschenko_input;
filename ./data/DTU_10MW_RWT_Towertop_st.dat;
set 1 2;
end timoschenko_input;
begin c2_def; Definition of centerline (main_body coordinates)
nsec 2;
sec 1 0.0 0.0 0.0 0.0; x,y,z,twist
sec 2 0.0 0.0 -2.75 0.0;
end c2_def;
end main_body;
;
begin main_body;
name shaft;
type timoschenko;
nbodies 1;
node_distribution c2_def;
damping_posdef 0.0 0.0 0.0 4.65E-04 4.65E-04 3.983E-03; "tuned by Anyd 23/5/13 to 31.45 log decr. damping for free free with stiff rotor and tower"
concentrated_mass 1.0 0.0 0.0 0.0 0.0 0.0 0.0 3.751E+06; generator equivalent slow shaft "re_tuned by Anyd 20/2/13"
concentrated_mass 5.0 0.0 0.0 0.0 1.0552E+05 0.0 0.0 3.257E+05; hub mass and inertia; "re_tuned by Anyd 20/2/13"
begin timoschenko_input;
filename ./data/DTU_10MW_RWT_Shaft_st.dat;
set 1 1;
end timoschenko_input;
begin c2_def; Definition of centerline (main_body coordinates)
nsec 5;
sec 1 0.0 0.0 0.0 0.0; Tower top x,y,z,twist
sec 2 0.0 0.0 -1.5 0.0;
sec 3 0.0 0.0 -3.0 0.0;
sec 4 0.0 0.0 -4.4 0.0; Main bearing
sec 5 0.0 0.0 -7.1 0.0; Rotor centre
end c2_def;
end main_body;
;
begin main_body;
name hub1;
type timoschenko;
nbodies 1;
node_distribution c2_def;
damping_posdef 0.0 0.0 0.0 3.00E-06 3.00E-06 2.00E-05; "changed by Larh"
begin timoschenko_input;
filename ./data/DTU_10MW_RWT_Hub_st.dat;
set 1 2;
end timoschenko_input;
begin c2_def; Definition of centerline (main_body coordinates)
nsec 2;
sec 1 0.0 0.0 0.0 0.0; x,y,z,twist
sec 2 0.0 0.0 2.8 0.0;
end c2_def;
end main_body;
;
begin main_body;
name hub2;
copy_main_body hub1;
end main_body;
;
begin main_body;
name blade1;
type timoschenko;
nbodies 10;
node_distribution c2_def;
damping_posdef 0.0 0.0 0.0 0.00153 0.00255 0.00033;
begin timoschenko_input;
filename ./data/DTU_10MW_RWT_Blade_st.dat;
set 1 1; set subset
end timoschenko_input;
begin c2_def;
nsec 20;
sec 1 -6.48506643395348917053e-16 5.04432273032044074237e-05 2.39808173319033927116e-16 -1.02444066874147825530e+01;
sec 2 -1.77803489746453341307e-03 1.40884010924257948444e-02 4.94005896339658523431e+00 -1.03091808614494873098e+01;
sec 3 -1.29212241029686869531e-01 5.79344574853726257402e-02 1.04152655253544850211e+01 -1.03512581325657002651e+01;
sec 4 -6.50220227984423693179e-01 1.59254321735797399473e-01 1.63759726688984237342e+01 -8.39274960342848785899e+00;
sec 5 -1.10016152136135403339e+00 2.09976513503588618770e-01 2.27401393284814510309e+01 -5.29939281517982863079e+00;
sec 6 -1.27609842156438824112e+00 2.52497605662293733708e-01 2.93954065626978966463e+01 -3.67457815074469085204e+00;
sec 7 -1.26200198053285372879e+00 3.08809307184219228315e-01 3.62056325665537315217e+01 -2.38384593727400062591e+00;
sec 8 -1.12902484623288623666e+00 3.89613109385942235630e-01 4.30213648789366942538e+01 -1.07640254791781408983e+00;
sec 9 -9.75642487443318273677e-01 5.00517978918732286964e-01 4.96926697536713462000e+01 3.99910621631581308932e-01;
sec 10 -8.30703689432845115981e-01 6.43627562673231068402e-01 5.60820487321786202983e+01 1.90120197901677179253e+00;
sec 11 -7.03732321571815977457e-01 8.14873082490295441715e-01 6.20751462106500326854e+01 3.28366369604164543006e+00;
sec 12 -5.97896788566067871606e-01 1.00643157409663430712e+00 6.75876008339258476099e+01 4.46194140922395110493e+00;
sec 13 -5.12851158579595400866e-01 1.20836579160246815334e+00 7.25674388984144798087e+01 5.41647291969291710956e+00;
sec 14 -4.46215476488487916562e-01 1.41156599583795405728e+00 7.69934419594975452128e+01 6.17190016755864956366e+00;
sec 15 -3.94337497995550290142e-01 1.60817569136336380176e+00 8.08706180936091385547e+01 6.77035476874162256422e+00;
sec 16 -3.51792123394631617295e-01 1.79298858887296819198e+00 8.42241469170983663162e+01 7.23511092753480955508e+00;
sec 17 -3.07790697631454057692e-01 1.96360524492743881986e+00 8.70930265569473078813e+01 7.57092772105627531687e+00;
sec 18 -2.56218346285707054832e-01 2.11879327890513113886e+00 8.95242977444024887745e+01 7.76961278403044897090e+00;
sec 19 -1.94041837542441558684e-01 2.25830640717902486614e+00 9.15683243220642566484e+01 7.83441475282797217261e+00;
sec 20 -1.24300073691619730742e-01 2.38167115113771243884e+00 9.32752800000000092950e+01 7.79502842679776009049e+00;
end c2_def;
end main_body;
begin main_body;
name blade2;
copy_main_body blade1;
end main_body;
;-------------------------------------------------------------------------------------------------------------------------------
;
begin orientation;
begin base;
body tower;
inipos 0.0 0.0 0.0; initial position of node 1
body_eulerang 0.0 0.0 0.0;
end base;
;
begin relative;
body1 tower last;
body2 towertop 1;
body2_eulerang 0.0 0.0 0.0;
end relative;
;
begin relative;
body1 towertop last;
body2 shaft 1;
body2_eulerang 90.0 0.0 0.0;
body2_eulerang -5.0 0.0 0.0; 5 deg tilt angle
body2_eulerang 0.0 0.0 0;
mbdy2_ini_rotvec_d1 0.0 0.0 -1.0 0.5; mbdy2_ini_rotvec_d1 0.0 0.0 -1.0 0.5;
end relative;
;
begin relative;
body1 shaft last;
body2 hub1 1;
body2_eulerang -90.000000 0.000000 0.000000;
;body2_eulerang 0.000000 0.000000 0.000000;
; body2_eulerang 2.500000 0.000000 0.000000;
end relative;
begin relative;
body1 shaft last;
body2 hub2 1;
body2_eulerang -90.000000 0.000000 0.000000;
body2_eulerang 0.000000 180.000000 0.000000;
; body2_eulerang 2.500000 0.000000 0.000000;
end relative;
begin relative;
body1 hub1 last;
body2 blade1 1;
body2_eulerang 0.000000 0.000000 0.000000;
end relative;
begin relative;
body1 hub2 last;
body2 blade2 1;
body2_eulerang 0.000000 0.000000 0.000000;
end relative;
end orientation;
;-------------------------------------------------------------------------------------------------------------------------------
begin constraint;
;
begin fix0; fixed to ground in translation and rotation of node 1
body tower;
end fix0;
;
begin fix1; tower towertop
body1 tower last;
body2 towertop 1;
end fix1;
begin fix1; shaft hub
body1 shaft last;
body2 hub1 1;
end fix1;
begin fix1;
body1 shaft last;
body2 hub2 1;
end fix1;
;
begin bearing1; free bearing
name shaft_rot;
body1 towertop last;
body2 shaft 1;
bearing_vector 2 0.0 0.0 -1.0; x=coo (0=global.1=body1.2=body2) vector in body2 coordinates where the free rotation is present
end bearing1;
;
; begin bearing3; free bearing
; name shaft_rot;
; body1 towertop last;
; body2 shaft 1;
; bearing_vector 2 0.0 0.0 -1.0; x=coo (0=global.1=body1.2=body2) vector in body2 coordinates where the free rotation is present
; omegas 0.0;
; end bearing3;
;
begin bearing2;
name pitch1;
body1 hub1 last;
body2 blade1 1;
bearing_vector 2 0.000 0.000 -1.000;
end bearing2;
begin bearing2;
name pitch2;
body1 hub2 last;
body2 blade2 1;
bearing_vector 2 0.000 0.000 -1.000;
end bearing2;
end constraint;
end new_htc_structure;
;----------------------------------------------------------------------------------------------------------------------------------------------------------------
begin wind;
density 1.225;
wsp 10;
tint 0.2096;
horizontal_input 1;
windfield_rotations 0 0.0 0.0; yaw, tilt, rotation
center_pos0 0.0 0.0 -119; hub heigth
shear_format 3 0.2;
turb_format 1; 0=none, 1=mann,2=flex
tower_shadow_method 3; 0=none, 1=potential flow, 2=jet
scale_time_start 0;
wind_ramp_factor 0.0 100 0.8 1.0;
; iec_gust;
;
; wind_ramp_abs 400.0 401.0 0.0 1.0; wsp. after the step: 5.0
; wind_ramp_abs 501.0 502.0 0.0 1.0; wsp. after the step: 6.0
; wind_ramp_abs 602.0 603.0 0.0 1.0; wsp. after the step: 7.0
; wind_ramp_abs 703.0 704.0 0.0 1.0; wsp. after the step: 8.0
; wind_ramp_abs 804.0 805.0 0.0 1.0; wsp. after the step: 9.0
; wind_ramp_abs 905.0 906.0 0.0 1.0; wsp. after the step: 10.0
; wind_ramp_abs 1006.0 1007.0 0.0 1.0; wsp. after the step: 11.0
; wind_ramp_abs 1107.0 1108.0 0.0 1.0; wsp. after the step: 12.0
; wind_ramp_abs 1208.0 1209.0 0.0 1.0; wsp. after the step: 13.0
; wind_ramp_abs 1309.0 1310.0 0.0 1.0; wsp. after the step: 14.0
; wind_ramp_abs 1410.0 1411.0 0.0 1.0; wsp. after the step: 15.0
; wind_ramp_abs 1511.0 1512.0 0.0 1.0; wsp. after the step: 16.0
; wind_ramp_abs 1612.0 1613.0 0.0 1.0; wsp. after the step: 17.0
; wind_ramp_abs 1713.0 1714.0 0.0 1.0; wsp. after the step: 18.0
; wind_ramp_abs 1814.0 1815.0 0.0 1.0; wsp. after the step: 19.0
; wind_ramp_abs 1915.0 1916.0 0.0 1.0; wsp. after the step: 20.0
; wind_ramp_abs 2016.0 2017.0 0.0 1.0; wsp. after the step: 21.0
; wind_ramp_abs 2117.0 2118.0 0.0 1.0; wsp. after the step: 22.0
; wind_ramp_abs 2218.0 2219.0 0.0 1.0; wsp. after the step: 23.0
; wind_ramp_abs 2319.0 2320.0 0.0 1.0; wsp. after the step: 24.0
; wind_ramp_abs 2420.0 2421.0 0.0 1.0; wsp. after the step: 25.0
;
begin mann;
create_turb_parameters 29.4 1.0 3.9 1004 1.0; L, alfaeps, gamma, seed, highfrq compensation
filename_u ./turb/turb_wsp10_s1004u.bin;
filename_v ./turb/turb_wsp10_s1004v.bin;
filename_w ./turb/turb_wsp10_s1004w.bin;
box_dim_u 1024 0.8544921875;
box_dim_v 32 6.5;
box_dim_w 32 6.5;
std_scaling 1.0 0.7 0.5;
end mann;
;
begin tower_shadow_potential_2;
tower_mbdy_link tower;
nsec 2;
radius 0.0 4.15;
radius 115.63 2.75; (radius)
end tower_shadow_potential_2;
end wind;
;
begin aerodrag;
begin aerodrag_element;
mbdy_name tower;
aerodrag_sections uniform 10;
nsec 2;
sec 0.0 0.6 8.3; tower bottom
sec 115.63 0.6 5.5; tower top (diameter)
end aerodrag_element;
;
begin aerodrag_element; Nacelle drag side
mbdy_name shaft;
aerodrag_sections uniform 2;
nsec 2;
sec 0.0 0.8 10.0;
sec 7.01 0.8 10.0;
end aerodrag_element;
end aerodrag;
;
begin aero;
nblades 2;
hub_vec shaft -3; rotor rotation vector (normally shaft composant directed from pressure to sustion side)
link 1 mbdy_c2_def blade1;
link 2 mbdy_c2_def blade2;
link 3 mbdy_c2_def blade3;
ae_filename ./data/DTU_10MW_RWT_ae.dat;
pc_filename ./data/DTU_10MW_RWT_pc.dat;
induction_method 1; 0=none, 1=normal
aerocalc_method 1; 0=ingen aerodynamic, 1=med aerodynamic
aerosections 50; def. 50
ae_sets 1 1 1;
tiploss_method 1; 0=none, 1=prandtl
dynstall_method 2; 0=none, 1=stig øye method,2=mhh method
;
end aero;
;-------------------------------------------------------------------------------------------------
begin dll;
;
begin type2_dll;
name risoe_controller;
filename ./control/risoe_controller.dll;
dll_subroutine_init init_regulation;
dll_subroutine_update update_regulation;
arraysizes_init 52 1;
arraysizes_update 12 100;
begin init;
; Overall parameters
constant 1 10000.0; Rated power [kW]
constant 2 0.628; Minimum rotor speed [rad/s]
constant 3 1.005; Rated rotor speed [rad/s]
constant 4 15.6E+06; Maximum allowable generator torque [Nm]
constant 5 110.0; Minimum pitch angle, theta_min [deg],
; if |theta_min|>90, then a table of <wsp,theta_min> is read;
; from a file named 'wptable.n', where n=int(theta_min)
constant 6 82.0; Maximum pitch angle [deg]
constant 7 10.0; Maximum pitch velocity operation [deg/s]
constant 8 0.4; Frequency of generator speed filter [Hz]
constant 9 0.7; Damping ratio of speed filter [-]
constant 10 2.42; Frequency of free-free DT torsion mode [Hz], if zero no notch filter used
; Partial load control parameters
constant 11 0.108212E+08; Optimal Cp tracking K factor [Nm/(rad/s)^2],;
; Qg=K*Omega^2, K=eta*0.5*rho*A*Cp_opt*R^3/lambda_opt^3
constant 12 3.237E+07; Proportional gain of torque controller [Nm/(rad/s)]
constant 13 7.263E+06; Integral gain of torque controller [Nm/rad]
constant 14 0.0; Differential gain of torque controller [Nm/(rad/s^2)]
; Full load control parameters
constant 15 2; Generator control switch [1=constant power, 2=constant torque]
constant 16 5.525E-01; Proportional gain of pitch controller [rad/(rad/s)]
constant 17 1.817E-01; Integral gain of pitch controller [rad/rad]
constant 18 0.0; Differential gain of pitch controller [rad/(rad/s^2)]
constant 19 0.4e-8; Proportional power error gain [rad/W]
constant 20 0.4e-8; Integral power error gain [rad/(Ws)]
constant 21 1.113E+01; Coefficient of linear term in aerodynamic gain scheduling, KK1 [deg]
constant 22 4.791E+02; Coefficient of quadratic term in aerodynamic gain scheduling, KK2 [deg^2] &
; (if zero, KK1 = pitch angle at double gain)
constant 23 1.3; Relative speed for double nonlinear gain [-]
; Cut-in simulation parameters
constant 24 -1; Cut-in time [s]
constant 25 1.0; Time delay for soft start of torque [1/1P]
; Cut-out simulation parameters
constant 26 -1; Cut-out time [s]
constant 27 5.0; Time constant for linear torque cut-out [s]
constant 28 1; Stop type [1=normal, 2=emergency]
constant 29 1.0; Time delay for pitch stop after shut-down signal [s]
constant 30 3; Maximum pitch velocity during initial period of stop [deg/s]
constant 31 3.0; Time period of initial pitch stop phase [s] (maintains pitch speed specified in constant 30)
constant 32 4; Maximum pitch velocity during final phase of stop [deg/s]
; Expert parameters (keep default values unless otherwise given)
constant 33 2.0; Lower angle above lowest minimum pitch angle for switch [deg]
constant 34 2.0; Upper angle above lowest minimum pitch angle for switch [deg], if equal then hard switch
constant 35 95.0; Ratio between filtered speed and reference speed for fully open torque limits [%]
constant 36 2.0; Time constant of 1st order filter on wind speed used for minimum pitch [1/1P]
constant 37 1.0; Time constant of 1st order filter on pitch angle used for gain scheduling [1/1P]
; Drivetrain damper
constant 38 0.0; Proportional gain of active DT damper [Nm/(rad/s)], requires frequency in input 10
; Over speed
constant 39 250.0; Overspeed percentage before initiating turbine controller alarm (shut-down) [%]
; Additional non-linear pitch control term (not used when all zero)
constant 40 0.0; Err0 [rad/s]
constant 41 0.0; ErrDot0 [rad/s^2]
constant 42 0.0; PitNonLin1 [rad/s]
; Storm control command
constant 43 28.0; Wind speed 'Vstorm' above which derating of rotor speed is used [m/s]
constant 44 28.0; Cut-out wind speed (only used for derating of rotor speed in storm) [m/s]
; Safety system parameters
constant 45 300.0; Overspeed percentage before initiating safety system alarm (shut-down) [%]
constant 46 1.5; Max low-pass filtered tower top acceleration level [m/s^2] - max in DLC 1.3=1.1 m/s^2
; Turbine parameter
constant 47 192.19808; Nominal rotor diameter [m]
; Parameters for rotor inertia reduction in variable speed region
constant 48 0.0; Proportional gain on rotor acceleration in variable speed region [Nm/(rad/s^2)] (not used when zero)
; Parameters for alternative partial load controller with PI regulated TSR tracking
constant 49 0.0; Optimal tip speed ratio [-] (only used when K=constant 11 = 0 otherwise Qg=K*Omega^2 is used)
; Parameters for adding aerodynamic drivetrain damping on gain scheduling
constant 50 0.0; Proportional gain of aerodynamic DT damping [Nm/(rad/s)]
constant 51 0.0; Coefficient of linear term in aerodynamic DT damping scheduling, KK1 [deg]
constant 52 0.0; Coefficient of quadratic term in aerodynamic DT damping scheduling, KK2 [deg^2]
end init;
;
begin output;
general time; [s]
constraint bearing1 shaft_rot 1 only 2; Drivetrain speed [rad/s]
constraint bearing2 pitch1 1 only 1; [rad]
constraint bearing2 pitch2 1 only 1; [rad]
constraint bearing2 pitch2 1 only 1; [rad] ! Changed from pitch 3 - Keep the line for the output order
wind free_wind 1 0.0 0.0 -119; Global coordinates at hub height
dll inpvec 2 2; Elec. power from generator servo .dll
dll inpvec 2 8; Grid state flag from generator servo .dll
mbdy state acc tower 10 1.0 global only 1; Tower top x-acceleration [m/s^2]
mbdy state acc tower 10 1.0 global only 2; Tower top y-acceleration [m/s^2]
end output;
end type2_dll;
;
begin type2_dll;
name generator_servo;
filename ./control/generator_servo.dll;
dll_subroutine_init init_generator_servo;
dll_subroutine_update update_generator_servo;
arraysizes_init 7 1;
arraysizes_update 4 8;
begin init;
constant 1 20.0; Frequency of 2nd order servo model of generator-converter system [Hz]
constant 2 0.9; Damping ratio 2nd order servo model of generator-converter system [-]
constant 3 15.6E+06; Maximum allowable LSS torque (pull-out torque) [Nm]
constant 4 0.94; Generator efficiency [-]
constant 5 1.0; Gearratio [-]
constant 6 0.0; Time for half value in softstart of torque [s]
constant 7 1000; Time for grid loss [s]
end init;
;
begin output;
general time; Time [s]
dll inpvec 1 1; Electrical torque reference [Nm]
constraint bearing1 shaft_rot 1 only 2; Generator LSS speed [rad/s]
mbdy momentvec shaft 1 1 shaft only 3; Shaft moment [kNm] (Qshaft)
end output;
;
begin actions;
mbdy moment_int shaft 1 -3 shaft towertop 2; Generator LSS torque [Nm]
end actions;
end type2_dll;
;
begin type2_dll;
name mech_brake;
filename ./control/mech_brake.dll;
dll_subroutine_init init_mech_brake;
dll_subroutine_update update_mech_brake;
arraysizes_init 7 1;
arraysizes_update 4 6;
begin init;
constant 1 2727252.0; Fully deployed maximum brake torque [Nm]
constant 2 100.0; Parameter alpha used in Q = tanh(omega*alpha), typically 1e2/Omega_nom
constant 3 0.625; Delay time for before brake starts to deploy [s] - from 5MW*1P_5/1P_10
constant 4 0.75; Time for brake to become fully deployed [s]
end init;
;
begin output;
general time; Time [s]
constraint bearing1 shaft_rot 1 only 2; Generator LSS speed [rad/s]
dll inpvec 1 25; Command to deploy mechanical disc brake [0,1]
end output;
;
begin actions;
mbdy moment_int shaft 1 3 shaft towertop 2; Generator LSS torque [Nm]
end actions;
end type2_dll;
;
begin type2_dll;
name servo_with_limits;
filename ./control/servo_with_limits.dll;
dll_subroutine_init init_servo_with_limits;
dll_subroutine_update update_servo_with_limits;
arraysizes_init 10 1;
arraysizes_update 5 9;
begin init;
constant 1 3; Number of blades [-]
constant 2 1.0; Frequency of 2nd order servo model of pitch system [Hz]
constant 3 0.7; Damping ratio 2nd order servo model of pitch system [-]
constant 4 10.0; Max. pitch speed [deg/s]
constant 5 15.0; Max. pitch acceleration [deg/s^2]
constant 6 -5.0; Min. pitch angle [deg]
constant 7 90.0; Max. pitch angle [deg]
constant 8 1000; Time for pitch runaway [s]
constant 9 -1; Time for stuck blade 1 [s]
constant 10 0; Angle of stuck blade 1 [deg]
end init;
begin output;
general time; Time [s]
dll inpvec 1 2; Pitch1 demand angle [rad]
dll inpvec 1 3; Pitch2 demand angle [rad]
dll inpvec 1 4; Pitch3 demand angle [rad]
dll inpvec 1 26; Flag for emergency pitch stop [0=off/1=on]
end output;
;
begin actions;
constraint bearing2 angle pitch1; Angle pitch1 bearing [rad]
constraint bearing2 angle pitch2; Angle pitch2 bearing [rad]
general ignore 1;
end actions;
end type2_dll;
;
; --- DLL for tower-blade tip distance --;
begin type2_dll;
name disttowtip;
filename ./control/towclearsens.dll;
dll_subroutine_init initialize;
dll_subroutine_update update;
arraysizes_init 1 1;
arraysizes_update 12 4;
begin init;
constant 1 3.79; Tower radius close to downward blade tip [m]
end init;
begin output;
mbdy state pos tower 3 0.62 global; [1,2,3]. Tower position: 30.18 m
mbdy state pos blade1 19 1.0 global; [4,5,6]
mbdy state pos blade2 19 1.0 global; [7,8,9]
mbdy state pos blade2 19 1.0 global; [10,11,12]
end output;
end type2_dll;
end dll;
;
;----------------------------------------------------------------------------------------------------------------------------------------------------------------
;
begin output;
filename ./res/dlc12_iec61400-1ed3/dlc12_wsp10_wdir000_s1004;
;time 100 700;
data_format hawc_binary;
buffer 1;
;
general time;
general constant 1.0; constant 1.0 - to mesure activity of flap in terms of displacement
constraint bearing1 shaft_rot 2; angle and angle velocity
constraint bearing2 pitch1 5; angle and angle velocity
constraint bearing2 pitch2 5; angle and angle velocity
; constraint bearing2 pitch3 5; angle and angle velocity
aero omega;
aero torque;
aero power;
aero thrust;
wind free_wind 1 0.0 0.0 -119; local wind at fixed position: coo (1=global,2=non-rotation rotor coo.), pos x, pos y, pos z
; Moments:
mbdy momentvec tower 1 1 tower # tower base;
mbdy momentvec tower 10 2 tower # tower yaw bearing;
mbdy momentvec shaft 4 1 shaft # main bearing;
; Displacements and accellerations
mbdy state pos tower 10 1.0 global only 1 # Tower top FA displ;
mbdy state pos tower 10 1.0 global only 2 # Tower top SS displ;
mbdy state acc tower 10 1.0 global only 1 # Tower top FA acc;
mbdy state acc tower 10 1.0 global only 2 # Tower top SS acc;
;
mbdy state pos blade1 19 1.0 global # gl blade 1 tip pos;
mbdy state pos blade2 19 1.0 global # gl blade 2 tip pos;
; mbdy state pos blade3 26 1.0 global # gl blade 3 tip pos;
mbdy state pos blade1 19 1.0 blade1 # blade 1 tip pos;
;
mbdy state pos tower 3 0.62 global; [1,2,3]. Tower position: 30.18 m
; - Monitor Aerodynamics -;
aero windspeed 3 1 1 72.5;
aero alfa 1 72.5;
aero alfa 2 72.5;
aero alfa 3 72.5;
aero cl 1 72.5;
aero cl 2 72.5;
aero cl 3 72.5;
aero cd 1 72.5;
aero cd 2 72.5;
aero cd 3 72.5;
; - Main Controller -
; Output to controller
; dll outvec 1 1 # time;
; dll outvec 1 2 # slow speed shaft rad/s;
; dll outvec 1 3 # pitch angle 1;
; dll outvec 1 4 # pitch angle 2;
; dll outvec 1 5 # pitch angle 3;
; dll outvec 1 6 # WSP_x_global;
; dll outvec 1 7 # WSP_y_global;
; dll outvec 1 8 # WSP_z_global;
; dll outvec 1 9 # Elec. pwr;
; dll outvec 1 10 # Grid flag;
; Input from controller
dll inpvec 1 1 # Generator torque reference [Nm];
dll inpvec 1 2 # Pitch angle reference of blade 1 [rad];
dll inpvec 1 3 # Pitch angle reference of blade 2 [rad];
; dll inpvec 1 4 # Pitch angle reference of blade 3 [rad];
; dll inpvec 1 5 # Power reference [W];
; dll inpvec 1 6 # Filtered wind speed [m/s];
; dll inpvec 1 7 # Filtered rotor speed [rad/s];
; dll inpvec 1 8 # Filtered rotor speed error for torque [rad/s];
; dll inpvec 1 9 # Bandpass filtered rotor speed [rad/s];
; dll inpvec 1 10 # Proportional term of torque contr. [Nm];
; dll inpvec 1 11 # Integral term of torque controller [Nm];
; dll inpvec 1 12 # Minimum limit of torque [Nm];
; dll inpvec 1 13 # Maximum limit of torque [Nm];
dll inpvec 1 14 # Torque limit switch based on pitch [-];
; dll inpvec 1 15 # Filtered rotor speed error for pitch [rad/s];
; dll inpvec 1 16 # Power error for pitch [W];
; dll inpvec 1 17 # Proportional term of pitch controller [rad];
; dll inpvec 1 18 # Integral term of pitch controller [rad];
; dll inpvec 1 19 # Minimum limit of pitch [rad];
; dll inpvec 1 20 # Maximum limit of pitch [rad];
dll inpvec 1 21 # Torque reference from DT dammper [Nm];
dll inpvec 1 22 # Status signal [-];
; dll inpvec 1 23 # Total added pitch rate [rad/s];
dll inpvec 1 24 # Filtered Mean pitch for gain sch [rad];
dll inpvec 1 25 # Flag for mechnical brake [0=off/1=on];
dll inpvec 1 26 # Flag for emergency pitch stop [0=off/1=on];
dll inpvec 1 27 # LP filtered acceleration level [m/s^2];
;; Output to generator model
; dll outvec 2 1 # time;
; dll outvec 2 2 # Electrical torque reference [Nm];
; dll outvec 2 3 # omega LSS;
; Input from generator model
dll inpvec 2 1 # Mgen LSS [Nm];
dll inpvec 2 2 # Pelec W;
dll inpvec 2 3 # Mframe;
dll inpvec 2 4 # Mgen HSS;
dll inpvec 2 5 # Generator Pmech kW;
dll inpvec 2 6 # Filtered Gen speed;
dll inpvec 2 7 # Resulting Eff;
dll inpvec 2 8 # Grid flag;
; Output to mechanical brake
dll inpvec 3 1 # Brake torque [Nm];
;; Input from mechanical brake
; dll outvec 3 1 # Time [s];
; dll outvec 3 2 # Generator LSS speed [rad/s];
; dll outvec 3 3 # Deploy brake;
;; Output to pitch servo
; dll outvec 4 1 # time;
; dll outvec 4 2 # pitchref 1;
; dll outvec 4 3 # pitchref 2;
; dll outvec 4 4 # pitchref 3;
; dll outvec 4 5 # Emerg. stop;
; Input from pitch servo
dll inpvec 4 1 # pitch 1;
dll inpvec 4 2 # pitch 2;
; dll inpvec 4 3 # pitch 3;
; Check tower clearence
dll inpvec 5 1 # Bltip tow min d [m];
; - Check on flap control:
;; - From flap controller: -
; dll type2_dll cyclic_flap_controller inpvec 1 # Ref flap signal bl 1 [deg];
; dll type2_dll cyclic_flap_controller inpvec 2 # Ref flap signal bl 2 [deg];
; dll type2_dll cyclic_flap_controller inpvec 3 # Ref flap signal bl 3 [deg];
;; - Mbc values
; dll type2_dll cyclic_flap_controller inpvec 4 # momvec mbc cos [kNm];
; dll type2_dll cyclic_flap_controller inpvec 5 # momvec mbc sin [kNm];
; dll type2_dll cyclic_flap_controller inpvec 6 # momvec mbc filt cos [kNm];
; dll type2_dll cyclic_flap_controller inpvec 7 # momvec mbc filt sin [kNm];
; dll type2_dll cyclic_flap_controller inpvec 8 # flap mbc cos [deg];
; dll type2_dll cyclic_flap_controller inpvec 9 # flap mbc sin [deg];
;; - Check Gains -;
; dll type2_dll cyclic_flap_controller inpvec 10 # lead angle [deg];
; dll type2_dll cyclic_flap_controller inpvec 11 # scaling on rat pow [-];
; dll type2_dll cyclic_flap_controller inpvec 12 # actual kp [deg/kNm];
; dll type2_dll cyclic_flap_controller inpvec 13 # actual ki [deg/kNms];
; dll type2_dll cyclic_flap_controller inpvec 14 # actual kd [deg s/kNm];
;; - Actual deflections -
; aero beta 1 1;
; aero beta 2 1;
; aero beta 3 1;
;; - Mbc values
; dll type2_dll cyclic_flap_controller inpvec 4 # momvec mbc cos [kNm];
; dll type2_dll cyclic_flap_controller inpvec 5 # momvec mbc sin [kNm];
; dll type2_dll cyclic_flap_controller inpvec 6 # momvec mbc filt cos [kNm];
; dll type2_dll cyclic_flap_controller inpvec 7 # momvec mbc filt sin [kNm];
; dll type2_dll cyclic_flap_controller inpvec 8 # flap mbc cos [deg];
; dll type2_dll cyclic_flap_controller inpvec 9 # flap mbc sin [deg];
; sectional blade loads
mbdy forcevec blade1 1 1 local # blade 1 local e coo;
mbdy forcevec blade1 2 1 local # blade 1 local e coo;
mbdy forcevec blade1 3 1 local # blade 1 local e coo;
mbdy forcevec blade1 4 1 local # blade 1 local e coo;
mbdy forcevec blade1 5 1 local # blade 1 local e coo;
mbdy forcevec blade1 6 1 local # blade 1 local e coo;
mbdy forcevec blade1 7 1 local # blade 1 local e coo;
mbdy forcevec blade1 8 1 local # blade 1 local e coo;
mbdy forcevec blade1 9 1 local # blade 1 local e coo;
mbdy forcevec blade1 10 1 local # blade 1 local e coo;
mbdy forcevec blade1 11 1 local # blade 1 local e coo;
mbdy forcevec blade1 12 1 local # blade 1 local e coo;
mbdy forcevec blade1 13 1 local # blade 1 local e coo;
mbdy forcevec blade1 14 1 local # blade 1 local e coo;
mbdy forcevec blade1 15 1 local # blade 1 local e coo;
mbdy forcevec blade1 16 1 local # blade 1 local e coo;
mbdy forcevec blade1 17 1 local # blade 1 local e coo;
mbdy forcevec blade1 18 1 local # blade 1 local e coo;
mbdy forcevec blade1 19 1 local # blade 1 local e coo;
mbdy forcevec blade1 19 2 local # blade 1 local e coo;
mbdy momentvec blade1 1 1 local # blade 1 local e coo;
mbdy momentvec blade1 2 1 local # blade 1 local e coo;
mbdy momentvec blade1 3 1 local # blade 1 local e coo;
mbdy momentvec blade1 4 1 local # blade 1 local e coo;
mbdy momentvec blade1 5 1 local # blade 1 local e coo;
mbdy momentvec blade1 6 1 local # blade 1 local e coo;
mbdy momentvec blade1 7 1 local # blade 1 local e coo;
mbdy momentvec blade1 8 1 local # blade 1 local e coo;
mbdy momentvec blade1 9 1 local # blade 1 local e coo;
mbdy momentvec blade1 10 1 local # blade 1 local e coo;
mbdy momentvec blade1 11 1 local # blade 1 local e coo;
mbdy momentvec blade1 12 1 local # blade 1 local e coo;
mbdy momentvec blade1 13 1 local # blade 1 local e coo;
mbdy momentvec blade1 14 1 local # blade 1 local e coo;
mbdy momentvec blade1 15 1 local # blade 1 local e coo;
mbdy momentvec blade1 16 1 local # blade 1 local e coo;
mbdy momentvec blade1 17 1 local # blade 1 local e coo;
mbdy momentvec blade1 18 1 local # blade 1 local e coo;
mbdy momentvec blade1 19 1 local # blade 1 local e coo;
mbdy momentvec blade1 19 2 local # blade 1 local e coo;
mbdy forcevec blade1 1 1 blade1 # blade 1 blade1 e coo;
mbdy forcevec blade1 2 1 blade1 # blade 1 blade1 e coo;
mbdy forcevec blade1 3 1 blade1 # blade 1 blade1 e coo;
mbdy forcevec blade1 4 1 blade1 # blade 1 blade1 e coo;
mbdy forcevec blade1 5 1 blade1 # blade 1 blade1 e coo;
mbdy forcevec blade1 6 1 blade1 # blade 1 blade1 e coo;
mbdy forcevec blade1 7 1 blade1 # blade 1 blade1 e coo;
mbdy forcevec blade1 8 1 blade1 # blade 1 blade1 e coo;
mbdy forcevec blade1 9 1 blade1 # blade 1 blade1 e coo;
mbdy forcevec blade1 10 1 blade1 # blade 1 blade1 e coo;
mbdy forcevec blade1 11 1 blade1 # blade 1 blade1 e coo;
mbdy forcevec blade1 12 1 blade1 # blade 1 blade1 e coo;
mbdy forcevec blade1 13 1 blade1 # blade 1 blade1 e coo;
mbdy forcevec blade1 14 1 blade1 # blade 1 blade1 e coo;
mbdy forcevec blade1 15 1 blade1 # blade 1 blade1 e coo;
mbdy forcevec blade1 16 1 blade1 # blade 1 blade1 e coo;
mbdy forcevec blade1 17 1 blade1 # blade 1 blade1 e coo;
mbdy forcevec blade1 18 1 blade1 # blade 1 blade1 e coo;
mbdy forcevec blade1 19 1 blade1 # blade 1 blade1 e coo;
mbdy forcevec blade1 19 2 blade1 # blade 1 blade1 e coo;
mbdy momentvec blade1 1 1 blade1 # blade 1 blade1 e coo;
mbdy momentvec blade1 2 1 blade1 # blade 1 blade1 e coo;
mbdy momentvec blade1 3 1 blade1 # blade 1 blade1 e coo;
mbdy momentvec blade1 4 1 blade1 # blade 1 blade1 e coo;
mbdy momentvec blade1 5 1 blade1 # blade 1 blade1 e coo;
mbdy momentvec blade1 6 1 blade1 # blade 1 blade1 e coo;
mbdy momentvec blade1 7 1 blade1 # blade 1 blade1 e coo;
mbdy momentvec blade1 8 1 blade1 # blade 1 blade1 e coo;
mbdy momentvec blade1 9 1 blade1 # blade 1 blade1 e coo;
mbdy momentvec blade1 10 1 blade1 # blade 1 blade1 e coo;
mbdy momentvec blade1 11 1 blade1 # blade 1 blade1 e coo;
mbdy momentvec blade1 12 1 blade1 # blade 1 blade1 e coo;
mbdy momentvec blade1 13 1 blade1 # blade 1 blade1 e coo;
mbdy momentvec blade1 14 1 blade1 # blade 1 blade1 e coo;
mbdy momentvec blade1 15 1 blade1 # blade 1 blade1 e coo;
mbdy momentvec blade1 16 1 blade1 # blade 1 blade1 e coo;
mbdy momentvec blade1 17 1 blade1 # blade 1 blade1 e coo;
mbdy momentvec blade1 18 1 blade1 # blade 1 blade1 e coo;
mbdy momentvec blade1 19 1 blade1 # blade 1 blade1 e coo;
mbdy momentvec blade1 19 2 blade1 # blade 1 blade1 e coo;
end output;
begin output_at_time aero 15;
filename ./res/rotor_check_inipos;
alfa 1;
end output_at_time;
begin output_at_time aero 15;
filename ./res/rotor_check_inipos2;
alfa 1;
end output_at_time;
;
exit;
\ No newline at end of file
This diff is collapsed.
Click to expand it.
wetb/hawc2/tests/test_htc_file.py
+
50
−
41
View file @
ec3d77e8
...
@@ -32,16 +32,16 @@ class TestHtcFile(unittest.TestCase):
...
@@ -32,16 +32,16 @@ class TestHtcFile(unittest.TestCase):
def
check_htc_file
(
self
,
f
):
def
check_htc_file
(
self
,
f
):
with
open
(
f
)
as
fid
:
with
open
(
f
)
as
fid
:
orglines
=
fid
.
readlines
()
orglines
=
fid
.
readlines
()
htcfile
=
HTCFile
(
f
)
htcfile
=
HTCFile
(
f
,
"
../
"
)
newlines
=
str
(
htcfile
).
split
(
"
\n
"
)
newlines
=
str
(
htcfile
).
split
(
"
\n
"
)
htcfile
.
save
(
self
.
testfilepath
+
'
tmp.htc
'
)
htcfile
.
save
(
self
.
testfilepath
+
'
tmp.htc
'
)
#with open(self.testfilepath + 'tmp.htc') as fid:
#with open(self.testfilepath + 'tmp.htc') as fid:
# newlines = fid.readlines()
# newlines = fid.readlines()
for
i
,
(
org
,
new
)
in
enumerate
(
zip
(
orglines
,
newlines
),
1
):
for
i
,
(
org
,
new
)
in
enumerate
(
zip
(
orglines
,
newlines
),
1
):
fmt
=
lambda
x
:
x
.
strip
().
replace
(
"
\t
"
,
"
"
).
replace
(
"
"
,
"
"
).
replace
(
"
"
,
"
"
).
replace
(
"
"
,
"
"
).
replace
(
"
"
,
"
"
)
fmt
=
lambda
x
:
x
.
strip
().
replace
(
"
\t
"
,
"
"
).
replace
(
"
"
,
"
"
).
replace
(
"
"
,
"
"
).
replace
(
"
"
,
"
"
).
replace
(
"
"
,
"
"
)
if
fmt
(
org
)
!=
fmt
(
new
):
if
fmt
(
org
)
!=
fmt
(
new
):
...
@@ -52,14 +52,13 @@ class TestHtcFile(unittest.TestCase):
...
@@ -52,14 +52,13 @@ class TestHtcFile(unittest.TestCase):
break
break
print
()
print
()
assert
len
(
orglines
)
==
len
(
newlines
)
assert
len
(
orglines
)
==
len
(
newlines
)
def
test_htc_files
(
self
):
def
test_htc_files
(
self
):
for
f
in
[
'
test3.htc
'
]:
for
f
in
[
'
test3.htc
'
]:
self
.
check_htc_file
(
self
.
testfilepath
+
f
)
self
.
check_htc_file
(
self
.
testfilepath
+
f
)
def
test_htc_file_get
(
self
):
def
test_htc_file_get
(
self
):
htcfile
=
HTCFile
(
self
.
testfilepath
+
"
test3.htc
"
)
htcfile
=
HTCFile
(
self
.
testfilepath
+
"
test3.htc
"
,
'
../
'
)
self
.
assertEqual
(
htcfile
[
'
simulation
'
][
'
time_stop
'
][
0
],
200
)
self
.
assertEqual
(
htcfile
[
'
simulation
'
][
'
time_stop
'
][
0
],
200
)
self
.
assertEqual
(
htcfile
[
'
simulation/time_stop
'
][
0
],
200
)
self
.
assertEqual
(
htcfile
[
'
simulation/time_stop
'
][
0
],
200
)
self
.
assertEqual
(
htcfile
[
'
simulation.time_stop
'
][
0
],
200
)
self
.
assertEqual
(
htcfile
[
'
simulation.time_stop
'
][
0
],
200
)
...
@@ -68,7 +67,7 @@ class TestHtcFile(unittest.TestCase):
...
@@ -68,7 +67,7 @@ class TestHtcFile(unittest.TestCase):
self
.
assertEqual
(
htcfile
.
dll
.
type2_dll__2
.
name
[
0
],
"
risoe_controller2
"
)
self
.
assertEqual
(
htcfile
.
dll
.
type2_dll__2
.
name
[
0
],
"
risoe_controller2
"
)
s
=
"""
begin simulation;
\n
time_stop
\t
200;
"""
s
=
"""
begin simulation;
\n
time_stop
\t
200;
"""
self
.
assertEqual
(
str
(
htcfile
.
simulation
)[:
len
(
s
)],
s
)
self
.
assertEqual
(
str
(
htcfile
.
simulation
)[:
len
(
s
)],
s
)
def
test_htc_file_get2
(
self
):
def
test_htc_file_get2
(
self
):
htcfile
=
HTCFile
(
self
.
testfilepath
+
"
test.htc
"
)
htcfile
=
HTCFile
(
self
.
testfilepath
+
"
test.htc
"
)
self
.
assertEqual
(
htcfile
[
'
simulation
'
][
'
logfile
'
][
0
],
'
./logfiles/dlc12_iec61400-1ed3/dlc12_wsp10_wdir000_s1004.log
'
)
self
.
assertEqual
(
htcfile
[
'
simulation
'
][
'
logfile
'
][
0
],
'
./logfiles/dlc12_iec61400-1ed3/dlc12_wsp10_wdir000_s1004.log
'
)
...
@@ -76,14 +75,14 @@ class TestHtcFile(unittest.TestCase):
...
@@ -76,14 +75,14 @@ class TestHtcFile(unittest.TestCase):
self
.
assertEqual
(
htcfile
[
'
simulation.logfile
'
][
0
],
'
./logfiles/dlc12_iec61400-1ed3/dlc12_wsp10_wdir000_s1004.log
'
)
self
.
assertEqual
(
htcfile
[
'
simulation.logfile
'
][
0
],
'
./logfiles/dlc12_iec61400-1ed3/dlc12_wsp10_wdir000_s1004.log
'
)
self
.
assertEqual
(
htcfile
.
simulation
.
logfile
[
0
],
'
./logfiles/dlc12_iec61400-1ed3/dlc12_wsp10_wdir000_s1004.log
'
)
self
.
assertEqual
(
htcfile
.
simulation
.
logfile
[
0
],
'
./logfiles/dlc12_iec61400-1ed3/dlc12_wsp10_wdir000_s1004.log
'
)
self
.
assertEqual
(
htcfile
.
simulation
.
newmark
.
deltat
[
0
],
0.02
)
self
.
assertEqual
(
htcfile
.
simulation
.
newmark
.
deltat
[
0
],
0.02
)
def
test_htc_file_set
(
self
):
def
test_htc_file_set
(
self
):
htcfile
=
HTCFile
(
self
.
testfilepath
+
"
test.htc
"
)
htcfile
=
HTCFile
(
self
.
testfilepath
+
"
test.htc
"
)
time_stop
=
htcfile
.
simulation
.
time_stop
[
0
]
time_stop
=
htcfile
.
simulation
.
time_stop
[
0
]
htcfile
.
simulation
.
time_stop
=
time_stop
*
2
htcfile
.
simulation
.
time_stop
=
time_stop
*
2
self
.
assertEqual
(
htcfile
.
simulation
.
time_stop
[
0
],
2
*
time_stop
)
self
.
assertEqual
(
htcfile
.
simulation
.
time_stop
[
0
],
2
*
time_stop
)
self
.
assertEqual
(
htcfile
.
simulation
.
time_stop
.
__class__
,
HTCLine
)
self
.
assertEqual
(
htcfile
.
simulation
.
time_stop
.
__class__
,
HTCLine
)
htcfile
.
output
.
time
=
10
,
20
htcfile
.
output
.
time
=
10
,
20
self
.
assertEqual
(
htcfile
.
output
.
time
[:
2
],
[
10
,
20
])
self
.
assertEqual
(
htcfile
.
output
.
time
[:
2
],
[
10
,
20
])
self
.
assertEqual
(
str
(
htcfile
.
output
.
time
),
"
time
\t
10 20;
\n
"
)
self
.
assertEqual
(
str
(
htcfile
.
output
.
time
),
"
time
\t
10 20;
\n
"
)
...
@@ -91,12 +90,12 @@ class TestHtcFile(unittest.TestCase):
...
@@ -91,12 +90,12 @@ class TestHtcFile(unittest.TestCase):
self
.
assertEqual
(
htcfile
.
output
.
time
[:
2
],
[
11
,
21
])
self
.
assertEqual
(
htcfile
.
output
.
time
[:
2
],
[
11
,
21
])
htcfile
.
output
.
time
=
"
12 22
"
htcfile
.
output
.
time
=
"
12 22
"
self
.
assertEqual
(
htcfile
.
output
.
time
[:
2
],
[
12
,
22
])
self
.
assertEqual
(
htcfile
.
output
.
time
[:
2
],
[
12
,
22
])
def
test_htc_file_set_key
(
self
):
def
test_htc_file_set_key
(
self
):
htcfile
=
HTCFile
(
self
.
testfilepath
+
"
test.htc
"
)
htcfile
=
HTCFile
(
self
.
testfilepath
+
"
test.htc
"
)
htcfile
.
simulation
.
name
=
"
value
"
htcfile
.
simulation
.
name
=
"
value
"
self
.
assertEqual
(
htcfile
.
simulation
.
name
[
0
],
"
value
"
)
self
.
assertEqual
(
htcfile
.
simulation
.
name
[
0
],
"
value
"
)
def
test_htc_file_del_key
(
self
):
def
test_htc_file_del_key
(
self
):
htcfile
=
HTCFile
(
self
.
testfilepath
+
"
test.htc
"
)
htcfile
=
HTCFile
(
self
.
testfilepath
+
"
test.htc
"
)
del
htcfile
.
simulation
.
logfile
del
htcfile
.
simulation
.
logfile
...
@@ -105,16 +104,16 @@ class TestHtcFile(unittest.TestCase):
...
@@ -105,16 +104,16 @@ class TestHtcFile(unittest.TestCase):
del
htcfile
.
hydro
.
water_properties
.
water_kinematics_dll
del
htcfile
.
hydro
.
water_properties
.
water_kinematics_dll
except
KeyError
:
except
KeyError
:
pass
pass
def
test_htcfile_setname
(
self
):
def
test_htcfile_setname
(
self
):
htcfile
=
HTCFile
(
self
.
testfilepath
+
"
test.htc
"
)
htcfile
=
HTCFile
(
self
.
testfilepath
+
"
test.htc
"
)
htcfile
.
set_name
(
"
mytest
"
,
htc_folder
=
"
htcfiles
"
)
htcfile
.
set_name
(
"
mytest
"
,
htc_folder
=
"
htcfiles
"
)
self
.
assertEqual
(
os
.
path
.
relpath
(
htcfile
.
filename
,
self
.
testfilepath
),
r
'
mytest.htc
'
)
self
.
assertEqual
(
os
.
path
.
relpath
(
htcfile
.
filename
,
self
.
testfilepath
),
r
'
mytest.htc
'
)
self
.
assertEqual
(
htcfile
.
simulation
.
logfile
[
0
],
'
./log/mytest.log
'
)
self
.
assertEqual
(
htcfile
.
simulation
.
logfile
[
0
],
'
./log/mytest.log
'
)
self
.
assertEqual
(
htcfile
.
output
.
filename
[
0
],
'
./res/mytest
'
)
self
.
assertEqual
(
htcfile
.
output
.
filename
[
0
],
'
./res/mytest
'
)
def
test_set_time
(
self
):
def
test_set_time
(
self
):
htcfile
=
HTCFile
(
self
.
testfilepath
+
"
test.htc
"
)
htcfile
=
HTCFile
(
self
.
testfilepath
+
"
test.htc
"
)
htcfile
.
set_time
(
10
,
20
,
0.2
)
htcfile
.
set_time
(
10
,
20
,
0.2
)
...
@@ -122,9 +121,9 @@ class TestHtcFile(unittest.TestCase):
...
@@ -122,9 +121,9 @@ class TestHtcFile(unittest.TestCase):
self
.
assertEqual
(
htcfile
.
simulation
.
newmark
.
deltat
[
0
],
0.2
)
self
.
assertEqual
(
htcfile
.
simulation
.
newmark
.
deltat
[
0
],
0.2
)
self
.
assertEqual
(
htcfile
.
wind
.
scale_time_start
[
0
],
10
)
self
.
assertEqual
(
htcfile
.
wind
.
scale_time_start
[
0
],
10
)
self
.
assertEqual
(
htcfile
.
output
.
time
[:
2
],
[
10
,
20
])
self
.
assertEqual
(
htcfile
.
output
.
time
[:
2
],
[
10
,
20
])
def
test_add_section
(
self
):
def
test_add_section
(
self
):
htcfile
=
HTCFile
()
htcfile
=
HTCFile
()
htcfile
.
wind
.
add_section
(
'
mann
'
)
htcfile
.
wind
.
add_section
(
'
mann
'
)
...
@@ -132,7 +131,7 @@ class TestHtcFile(unittest.TestCase):
...
@@ -132,7 +131,7 @@ class TestHtcFile(unittest.TestCase):
self
.
assertEqual
(
htcfile
.
wind
.
mann
.
create_turb_parameters
[
0
],
29.4
)
self
.
assertEqual
(
htcfile
.
wind
.
mann
.
create_turb_parameters
[
0
],
29.4
)
self
.
assertEqual
(
htcfile
.
wind
.
mann
.
create_turb_parameters
[
3
],
1004
)
self
.
assertEqual
(
htcfile
.
wind
.
mann
.
create_turb_parameters
[
3
],
1004
)
self
.
assertEqual
(
htcfile
.
wind
.
mann
.
create_turb_parameters
.
comments
,
"
L, alfaeps, gamma, seed, highfrq compensation
"
)
self
.
assertEqual
(
htcfile
.
wind
.
mann
.
create_turb_parameters
.
comments
,
"
L, alfaeps, gamma, seed, highfrq compensation
"
)
def
test_add_mann
(
self
):
def
test_add_mann
(
self
):
htcfile
=
HTCFile
()
htcfile
=
HTCFile
()
htcfile
.
add_mann_turbulence
(
30.1
,
1.1
,
3.3
,
102
,
False
)
htcfile
.
add_mann_turbulence
(
30.1
,
1.1
,
3.3
,
102
,
False
)
...
@@ -149,8 +148,8 @@ class TestHtcFile(unittest.TestCase):
...
@@ -149,8 +148,8 @@ class TestHtcFile(unittest.TestCase):
self
.
assertEqual
(
a
.
strip
(),
b
.
strip
())
self
.
assertEqual
(
a
.
strip
(),
b
.
strip
())
self
.
assertEqual
(
htcfile
.
wind
.
turb_format
[
0
],
1
)
self
.
assertEqual
(
htcfile
.
wind
.
turb_format
[
0
],
1
)
self
.
assertEqual
(
htcfile
.
wind
.
turb_format
.
comments
,
""
)
self
.
assertEqual
(
htcfile
.
wind
.
turb_format
.
comments
,
""
)
def
test_sensors
(
self
):
def
test_sensors
(
self
):
htcfile
=
HTCFile
()
htcfile
=
HTCFile
()
htcfile
.
set_name
(
"
test
"
)
htcfile
.
set_name
(
"
test
"
)
...
@@ -162,13 +161,13 @@ class TestHtcFile(unittest.TestCase):
...
@@ -162,13 +161,13 @@ class TestHtcFile(unittest.TestCase):
for
a
,
b
in
zip
(
s
.
split
(
"
\n
"
),
str
(
htcfile
.
output
).
split
(
"
\n
"
)):
for
a
,
b
in
zip
(
s
.
split
(
"
\n
"
),
str
(
htcfile
.
output
).
split
(
"
\n
"
)):
self
.
assertEqual
(
a
.
strip
(),
b
.
strip
())
self
.
assertEqual
(
a
.
strip
(),
b
.
strip
())
#print (htcfile)
#print (htcfile)
def
test_output_at_time
(
self
):
def
test_output_at_time
(
self
):
htcfile
=
HTCFile
(
self
.
testfilepath
+
"
test2.htc
"
)
htcfile
=
HTCFile
(
self
.
testfilepath
+
"
test2.htc
"
,
'
../
'
)
self
.
assertTrue
(
'
begin output_at_time aero 15.0;
'
in
str
(
htcfile
))
self
.
assertTrue
(
'
begin output_at_time aero 15.0;
'
in
str
(
htcfile
))
def
test_output_files
(
self
):
def
test_output_files
(
self
):
htcfile
=
HTCFile
(
self
.
testfilepath
+
"
test.htc
"
)
htcfile
=
HTCFile
(
self
.
testfilepath
+
"
test.htc
"
)
output_files
=
htcfile
.
output_files
()
output_files
=
htcfile
.
output_files
()
...
@@ -192,11 +191,11 @@ class TestHtcFile(unittest.TestCase):
...
@@ -192,11 +191,11 @@ class TestHtcFile(unittest.TestCase):
except
ValueError
:
except
ValueError
:
raise
ValueError
(
f
+
"
is not in list
"
)
raise
ValueError
(
f
+
"
is not in list
"
)
self
.
assertFalse
(
output_files
)
self
.
assertFalse
(
output_files
)
def
test_turbulence_files
(
self
):
def
test_turbulence_files
(
self
):
htcfile
=
HTCFile
(
self
.
testfilepath
+
"
dlc14_wsp10_wdir000_s0000.htc
"
)
htcfile
=
HTCFile
(
self
.
testfilepath
+
"
dlc14_wsp10_wdir000_s0000.htc
"
,
'
../
'
)
self
.
assertEqual
(
htcfile
.
turbulence_files
(),
[
'
./turb/turb_wsp10_s0000u.bin
'
,
'
./turb/turb_wsp10_s0000v.bin
'
,
'
./turb/turb_wsp10_s0000w.bin
'
])
self
.
assertEqual
(
htcfile
.
turbulence_files
(),
[
'
./turb/turb_wsp10_s0000u.bin
'
,
'
./turb/turb_wsp10_s0000v.bin
'
,
'
./turb/turb_wsp10_s0000w.bin
'
])
def
test_input_files
(
self
):
def
test_input_files
(
self
):
htcfile
=
HTCFile
(
self
.
testfilepath
+
"
test.htc
"
)
htcfile
=
HTCFile
(
self
.
testfilepath
+
"
test.htc
"
)
input_files
=
htcfile
.
input_files
()
input_files
=
htcfile
.
input_files
()
...
@@ -213,20 +212,20 @@ class TestHtcFile(unittest.TestCase):
...
@@ -213,20 +212,20 @@ class TestHtcFile(unittest.TestCase):
'
./control/mech_brake.dll
'
,
'
./control/mech_brake.dll
'
,
'
./control/servo_with_limits.dll
'
,
'
./control/servo_with_limits.dll
'
,
'
./control/towclearsens.dll
'
,
'
./control/towclearsens.dll
'
,
self
.
testfilepath
+
'
test.htc
'
self
.
testfilepath
.
replace
(
"
\\
"
,
"
/
"
)
+
'
test.htc
'
]:
]:
try
:
try
:
input_files
.
remove
(
f
)
input_files
.
remove
(
f
)
except
ValueError
:
except
ValueError
:
raise
ValueError
(
f
+
"
is not in list
"
)
raise
ValueError
(
f
+
"
is not in list
"
)
self
.
assertFalse
(
input_files
)
self
.
assertFalse
(
input_files
)
def
test_input_files2
(
self
):
def
test_input_files2
(
self
):
htcfile
=
HTCFile
(
self
.
testfilepath
+
"
ansi.htc
"
)
htcfile
=
HTCFile
(
self
.
testfilepath
+
"
ansi.htc
"
,
'
../
'
)
input_files
=
htcfile
.
input_files
()
input_files
=
htcfile
.
input_files
()
self
.
assertTrue
(
'
./htc_hydro/ireg_airy_h6_t10.inp
'
in
input_files
)
self
.
assertTrue
(
'
./htc_hydro/ireg_airy_h6_t10.inp
'
in
input_files
)
#
#
def
test_continue_in_files
(
self
):
def
test_continue_in_files
(
self
):
htcfile
=
HTCFile
(
self
.
testfilepath
+
"
continue_in_file.htc
"
,
"
.
"
)
htcfile
=
HTCFile
(
self
.
testfilepath
+
"
continue_in_file.htc
"
,
"
.
"
)
self
.
assertIn
(
'
main_body__31
'
,
htcfile
.
new_htc_structure
.
keys
())
self
.
assertIn
(
'
main_body__31
'
,
htcfile
.
new_htc_structure
.
keys
())
...
@@ -234,22 +233,32 @@ class TestHtcFile(unittest.TestCase):
...
@@ -234,22 +233,32 @@ class TestHtcFile(unittest.TestCase):
self
.
assertIn
(
'
./data/NREL_5MW_st1.txt
'
,
htcfile
.
input_files
())
self
.
assertIn
(
'
./data/NREL_5MW_st1.txt
'
,
htcfile
.
input_files
())
self
.
assertEqual
(
str
(
htcfile
).
count
(
"
exit
"
),
1
)
self
.
assertEqual
(
str
(
htcfile
).
count
(
"
exit
"
),
1
)
self
.
assertIn
(
'
filename
\t
./res/oc4_p2_load_case_eq;
'
,
str
(
htcfile
))
self
.
assertIn
(
'
filename
\t
./res/oc4_p2_load_case_eq;
'
,
str
(
htcfile
))
def
test_tjul_example
(
self
):
def
test_tjul_example
(
self
):
htcfile
=
HTCFile
(
self
.
testfilepath
+
"
./tjul.htc
"
,
"
.
"
)
htcfile
=
HTCFile
(
self
.
testfilepath
+
"
./tjul.htc
"
,
"
.
"
)
htcfile
.
save
(
"
./temp.htc
"
)
htcfile
.
save
(
"
./temp.htc
"
)
def
test_ansi
(
self
):
def
test_ansi
(
self
):
htcfile
=
HTCFile
(
self
.
testfilepath
+
"
./ansi.htc
"
)
htcfile
=
HTCFile
(
self
.
testfilepath
+
"
./ansi.htc
"
,
'
../
'
)
def
test_file_with_BOM
(
self
):
def
test_file_with_BOM
(
self
):
htcfile
=
HTCFile
(
self
.
testfilepath
+
'
DLC15_wsp11_wdir000_s0000_phi000_Free_v2_visual.htc
'
)
htcfile
=
HTCFile
(
self
.
testfilepath
+
'
DLC15_wsp11_wdir000_s0000_phi000_Free_v2_visual.htc
'
)
self
.
assertEqual
(
str
(
htcfile
)[
0
],
"
;
"
)
self
.
assertEqual
(
str
(
htcfile
)[
0
],
"
;
"
)
def
test_htc_reset
(
self
):
def
test_htc_reset
(
self
):
htcfile
=
HTCFile
(
self
.
testfilepath
+
"
test.htc
"
)
htcfile
=
HTCFile
(
self
.
testfilepath
+
"
test.htc
"
)
self
.
assertEqual
(
htcfile
.
wind
.
wsp
[
0
],
10
)
self
.
assertEqual
(
htcfile
.
wind
.
wsp
[
0
],
10
)
def
test_htc_model_autodetect
(
self
):
htcfile
=
HTCFile
(
self
.
testfilepath
+
"
test.htc
"
)
self
.
assertEqual
(
os
.
path
.
relpath
(
htcfile
.
modelpath
,
os
.
path
.
dirname
(
htcfile
.
filename
)),
"
..
"
)
htcfile
=
HTCFile
(
self
.
testfilepath
+
"
sub/test.htc
"
)
self
.
assertEqual
(
os
.
path
.
relpath
(
htcfile
.
modelpath
,
os
.
path
.
dirname
(
htcfile
.
filename
)),
"
..
\\
..
"
)
self
.
assertRaisesRegex
(
ValueError
,
"
Modelpath cannot be autodetected
"
,
HTCFile
,
self
.
testfilepath
+
"
test2.htc
"
)
if
__name__
==
"
__main__
"
:
if
__name__
==
"
__main__
"
:
#import sys;sys.argv = ['', 'Test.testName']
#import sys;sys.argv = ['', 'Test.testName']
...
...
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