diff --git a/docs/howto-make-dlcs.md b/docs/howto-make-dlcs.md index 1d95f83894927012584bd3fb1dd59662f7ad33de..a41d445dbfa084d76b09f07ff3654303e1ef39ed 100644 --- a/docs/howto-make-dlcs.md +++ b/docs/howto-make-dlcs.md @@ -421,12 +421,12 @@ depth is varying for different load cases) it would be convienent to be able to control which init file is used for which case (e.g. water depth). When running a load case for which the mooring lines will run in init mode: -* ```[copyback_f1]``` = 'ESYSMooring_init.dat' -* ```[copyback_f1_rename]``` = 'mooringinits/ESYSMooring_init_vXYZ.dat' +* ```[copyback_f1] = 'ESYSMooring_init.dat'``` +* ```[copyback_f1_rename] = 'mooringinits/ESYSMooring_init_vXYZ.dat'``` When using an a priory cacluated init file for the mooring lines: -* ```[copyto_generic_f1]``` = 'mooringinits/ESYSMooring_init_vXYZ.dat' -* ```[copyto_f1]``` = 'ESYSMooring_init.dat' +* ```[copyto_f1] = 'mooringinits/ESYSMooring_init_vXYZ.dat'``` +* ```[copyto_generic_f1] = 'ESYSMooring_init.dat'``` Replace ```vXYZ``` with an appropriate identifier for your case. @@ -748,25 +748,48 @@ g-000 $ qsub-wrap.py -f ../myturbine.py --years=25 --neq=1e7 --stats --check_log Other options for the original ```dlctemplate.py``` script: ``` -usage: dlctemplate.py [-h] [--prep] [--check_logs] [--stats] [--fatigue] - [--csv] [--years YEARS] [--no_bins NO_BINS] [--neq NEQ] - [--envelopeblade] [--envelopeturbine] +(wetb_py3) [dave@jess]$ python dlctemplate.py --help +usage: dlctemplate.py [-h] [--prep] [--check_logs] + [--pbs_failed_path PBS_FAILED_PATH] [--stats] + [--fatigue] [--AEP] [--csv] [--years YEARS] + [--no_bins NO_BINS] [--neq NEQ] [--rotarea ROTAREA] + [--save_new_sigs] [--dlcplot] [--envelopeblade] + [--envelopeturbine] [--zipchunks] [--pbs_turb] + [--walltime WALLTIME] pre- or post-processes DLC's optional arguments: - -h, --help show this help message and exit - --prep create htc, pbs, files (default=False) - --check_logs check the log files (default=False) - --stats calculate statistics and 1Hz equivalent loads (default=False) - --fatigue calculate Leq for a full DLC (default=False) - --csv Save data also as csv file (default=False) - --years YEARS Total life time in years (default=20) - --no_bins NO_BINS Number of bins for fatigue loads (default=46) - --neq NEQ Equivalent cycles neq, default 1 Hz equivalent load - (neq = simulation duration in seconds) - --envelopeblade calculate the load envelope for sensors on the blades - --envelopeturbine calculate the load envelope for sensors on the turbine + -h, --help show this help message and exit + --prep create htc, pbs, files + --check_logs check the log files + --pbs_failed_path PBS_FAILED_PATH + Copy pbs launch files of the failed cases to a new + directory in order to prepare a re-run. Default value: + pbs_in_failed. + --stats calculate statistics and 1Hz equivalent loads + --fatigue calculate Leq for a full DLC + --AEP calculate AEP, requires htc/DLCs/dlc_config.xlsx + --csv Save data also as csv file + --years YEARS Total life time in years + --no_bins NO_BINS Number of bins for fatigue loads + --neq NEQ Equivalent cycles Neq used for Leq fatigue lifetime + calculations. + --rotarea ROTAREA Rotor area for C_T, C_P + --save_new_sigs Save post-processed sigs + --dlcplot Plot DLC load basis results + --envelopeblade Compute envelopeblade + --envelopeturbine Compute envelopeturbine + --zipchunks Create PBS launch files forrunning in zip-chunk + find+xargs mode. + --pbs_turb Create PBS launch files to create the turbulence boxes + in stand alone mode using the 64-bit Mann turbulence + box generator. This can be usefull if your turbulence + boxes are too big for running in HAWC2 32-bit mode. + Only works on Jess. + --walltime WALLTIME Queue walltime for each case/pbs file, format: + HH:MM:SS Default: 04:00:00 + ``` The load envelopes are computed for sensors specified in the diff --git a/wetb/hawc2/tests/test_files/hawc2io/hawc2ascii_chantest_1.sel b/wetb/hawc2/tests/test_files/hawc2io/hawc2ascii_chantest_1.sel new file mode 100755 index 0000000000000000000000000000000000000000..d308e5fc7fd23d4cb1ee3780c923e37ad34df6c1 --- /dev/null +++ b/wetb/hawc2/tests/test_files/hawc2io/hawc2ascii_chantest_1.sel @@ -0,0 +1,435 @@ +________________________________________________________________________________________________________________________ + Version ID : HAWC2MB 12.4 + Time : 22:41:25 + Date : 02:05.2017 +________________________________________________________________________________________________________________________ + Result file : res/dlc12_wsp07_wdir000_s1004.dat +________________________________________________________________________________________________________________________ + Scans Channels Time [sec] Format + 25000 422 500.000 ASCII + + Channel Variable Description + + 1 Time s Time + 2 bea1 angle deg shaft_rot angle + 3 bea1 angle_speed rpm shaft_rot angle speed + 4 bea2 angle deg pitch1 angle + 5 bea2 angle_speed deg/s pitch1 angle speed + 6 bea2 angle deg pitch2 angle + 7 bea2 angle_speed deg/s pitch2 angle speed + 8 bea2 angle deg pitch3 angle + 9 bea2 angle_speed deg/s pitch3 angle speed + 10 Ae rot. torque kNm Aero rotor torque + 11 Ae rot. power kW Aero rotor power + 12 Ae rot. thrust kN Aero rotor thrust + 13 setbeta deg Flap angle for blade 1 flap number 1 + 14 setbeta deg Flap angle for blade 2 flap number 1 + 15 setbeta deg Flap angle for blade 3 flap number 1 + 16 WSP gl. coo.,Vx m/s Free wind speed Vx, gl. coo, of gl. pos 0.00, 0.00,-119.00 + 17 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos 0.00, 0.00,-119.00 + 18 WSP gl. coo.,Vz m/s Free wind speed Vz, gl. coo, of gl. pos 0.00, 0.00,-119.00 + 19 Fx coo: tower kN Force Fx Mbdy:tower nodenr: 1 coo: tower tower base + 20 Fy coo: tower kN Force Fy Mbdy:tower nodenr: 1 coo: tower tower base + 21 Fz coo: tower kN Force Fz Mbdy:tower nodenr: 1 coo: tower tower base + 22 Fx coo: tower kN Force Fx Mbdy:tower nodenr: 11 coo: tower tower yaw bearing + 23 Fy coo: tower kN Force Fy Mbdy:tower nodenr: 11 coo: tower tower yaw bearing + 24 Fz coo: tower kN Force Fz Mbdy:tower nodenr: 11 coo: tower tower yaw bearing + 25 Mx coo: tower kNm MomentMx Mbdy:tower nodenr: 1 coo: tower tower base + 26 My coo: tower kNm MomentMy Mbdy:tower nodenr: 1 coo: tower tower base + 27 Mz coo: tower kNm MomentMz Mbdy:tower nodenr: 1 coo: tower tower base + 28 Mx coo: tower kNm MomentMx Mbdy:tower nodenr: 11 coo: tower tower yaw bearing + 29 My coo: tower kNm MomentMy Mbdy:tower nodenr: 11 coo: tower tower yaw bearing + 30 Mz coo: tower kNm MomentMz Mbdy:tower nodenr: 11 coo: tower tower yaw bearing + 31 Mx coo: shaft kNm MomentMx Mbdy:shaft nodenr: 4 coo: shaft main bearing + 32 My coo: shaft kNm MomentMy Mbdy:shaft nodenr: 4 coo: shaft main bearing + 33 Mz coo: shaft kNm MomentMz Mbdy:shaft nodenr: 4 coo: shaft main bearing + 34 State pos x coo: global m State pos x Mbdy:blade1 E-nr: 19 Z-rel:1.00 coo: global gl blade 1 tip pos + 35 State pos y coo: global m State pos y Mbdy:blade1 E-nr: 19 Z-rel:1.00 coo: global gl blade 1 tip pos + 36 State pos z coo: global m State pos z Mbdy:blade1 E-nr: 19 Z-rel:1.00 coo: global gl blade 1 tip pos + 37 State pos x coo: global m State pos x Mbdy:blade2 E-nr: 19 Z-rel:1.00 coo: global gl blade 2 tip pos + 38 State pos y coo: global m State pos y Mbdy:blade2 E-nr: 19 Z-rel:1.00 coo: global gl blade 2 tip pos + 39 State pos z coo: global m State pos z Mbdy:blade2 E-nr: 19 Z-rel:1.00 coo: global gl blade 2 tip pos + 40 State pos x coo: global m State pos x Mbdy:blade3 E-nr: 19 Z-rel:1.00 coo: global gl blade 3 tip pos + 41 State pos y coo: global m State pos y Mbdy:blade3 E-nr: 19 Z-rel:1.00 coo: global gl blade 3 tip pos + 42 State pos z coo: global m State pos z Mbdy:blade3 E-nr: 19 Z-rel:1.00 coo: global gl blade 3 tip pos + 43 State pos x coo: blade1 m State pos x Mbdy:blade1 E-nr: 19 Z-rel:1.00 coo: blade1 blade 1 tip pos + 44 State pos y coo: blade1 m State pos y Mbdy:blade1 E-nr: 19 Z-rel:1.00 coo: blade1 blade 1 tip pos + 45 State pos z coo: blade1 m State pos z Mbdy:blade1 E-nr: 19 Z-rel:1.00 coo: blade1 blade 1 tip pos + 46 State pos x coo: blade2 m State pos x Mbdy:blade2 E-nr: 19 Z-rel:1.00 coo: blade2 blade 1 tip pos + 47 State pos y coo: blade2 m State pos y Mbdy:blade2 E-nr: 19 Z-rel:1.00 coo: blade2 blade 1 tip pos + 48 State pos z coo: blade2 m State pos z Mbdy:blade2 E-nr: 19 Z-rel:1.00 coo: blade2 blade 1 tip pos + 49 State pos x coo: blade3 m State pos x Mbdy:blade3 E-nr: 19 Z-rel:1.00 coo: blade3 blade 1 tip pos + 50 State pos y coo: blade3 m State pos y Mbdy:blade3 E-nr: 19 Z-rel:1.00 coo: blade3 blade 1 tip pos + 51 State pos z coo: blade3 m State pos z Mbdy:blade3 E-nr: 19 Z-rel:1.00 coo: blade3 blade 1 tip pos + 52 Mx coo: blade1 kNm MomentMx Mbdy:blade1 nodenr: 1 coo: blade1 blade 1 root + 53 My coo: blade1 kNm MomentMy Mbdy:blade1 nodenr: 1 coo: blade1 blade 1 root + 54 Mz coo: blade1 kNm MomentMz Mbdy:blade1 nodenr: 1 coo: blade1 blade 1 root + 55 Mx coo: blade2 kNm MomentMx Mbdy:blade2 nodenr: 1 coo: blade2 blade 2 root + 56 My coo: blade2 kNm MomentMy Mbdy:blade2 nodenr: 1 coo: blade2 blade 2 root + 57 Mz coo: blade2 kNm MomentMz Mbdy:blade2 nodenr: 1 coo: blade2 blade 2 root + 58 Mx coo: blade3 kNm MomentMx Mbdy:blade3 nodenr: 1 coo: blade3 blade 3 root + 59 My coo: blade3 kNm MomentMy Mbdy:blade3 nodenr: 1 coo: blade3 blade 3 root + 60 Mz coo: blade3 kNm MomentMz Mbdy:blade3 nodenr: 1 coo: blade3 blade 3 root + 61 Mx coo: blade1 kNm MomentMx Mbdy:blade1 nodenr: 2 coo: blade1 blade 1 root + 62 My coo: blade1 kNm MomentMy Mbdy:blade1 nodenr: 2 coo: blade1 blade 1 root + 63 Mz coo: blade1 kNm MomentMz Mbdy:blade1 nodenr: 2 coo: blade1 blade 1 root + 64 Mx coo: blade2 kNm MomentMx Mbdy:blade2 nodenr: 2 coo: blade2 blade 2 root + 65 My coo: blade2 kNm MomentMy Mbdy:blade2 nodenr: 2 coo: blade2 blade 2 root + 66 Mz coo: blade2 kNm MomentMz Mbdy:blade2 nodenr: 2 coo: blade2 blade 2 root + 67 Mx coo: blade3 kNm MomentMx Mbdy:blade3 nodenr: 2 coo: blade3 blade 3 root + 68 My coo: blade3 kNm MomentMy Mbdy:blade3 nodenr: 2 coo: blade3 blade 3 root + 69 Mz coo: blade3 kNm MomentMz Mbdy:blade3 nodenr: 2 coo: blade3 blade 3 root + 70 Mx coo: blade1 kNm MomentMx Mbdy:blade1 nodenr: 3 coo: blade1 blade 1 root + 71 My coo: blade1 kNm MomentMy Mbdy:blade1 nodenr: 3 coo: blade1 blade 1 root + 72 Mz coo: blade1 kNm MomentMz Mbdy:blade1 nodenr: 3 coo: blade1 blade 1 root + 73 Mx coo: blade2 kNm MomentMx Mbdy:blade2 nodenr: 3 coo: blade2 blade 2 root + 74 My coo: blade2 kNm MomentMy Mbdy:blade2 nodenr: 3 coo: blade2 blade 2 root + 75 Mz coo: blade2 kNm MomentMz Mbdy:blade2 nodenr: 3 coo: blade2 blade 2 root + 76 Mx coo: blade3 kNm MomentMx Mbdy:blade3 nodenr: 3 coo: blade3 blade 3 root + 77 My coo: blade3 kNm MomentMy Mbdy:blade3 nodenr: 3 coo: blade3 blade 3 root + 78 Mz coo: blade3 kNm MomentMz Mbdy:blade3 nodenr: 3 coo: blade3 blade 3 root + 79 Mx coo: blade1 kNm MomentMx Mbdy:blade1 nodenr: 4 coo: blade1 blade 1 root + 80 My coo: blade1 kNm MomentMy Mbdy:blade1 nodenr: 4 coo: blade1 blade 1 root + 81 Mz coo: blade1 kNm MomentMz Mbdy:blade1 nodenr: 4 coo: blade1 blade 1 root + 82 Mx coo: blade2 kNm MomentMx Mbdy:blade2 nodenr: 4 coo: blade2 blade 2 root + 83 My coo: blade2 kNm MomentMy Mbdy:blade2 nodenr: 4 coo: blade2 blade 2 root + 84 Mz coo: blade2 kNm MomentMz Mbdy:blade2 nodenr: 4 coo: blade2 blade 2 root + 85 Mx coo: blade3 kNm MomentMx Mbdy:blade3 nodenr: 4 coo: blade3 blade 3 root + 86 My coo: blade3 kNm MomentMy Mbdy:blade3 nodenr: 4 coo: blade3 blade 3 root + 87 Mz coo: blade3 kNm MomentMz Mbdy:blade3 nodenr: 4 coo: blade3 blade 3 root + 88 Mx coo: blade1 kNm MomentMx Mbdy:blade1 nodenr: 5 coo: blade1 blade 1 root + 89 My coo: blade1 kNm MomentMy Mbdy:blade1 nodenr: 5 coo: blade1 blade 1 root + 90 Mz coo: blade1 kNm MomentMz Mbdy:blade1 nodenr: 5 coo: blade1 blade 1 root + 91 Mx coo: blade2 kNm MomentMx Mbdy:blade2 nodenr: 5 coo: blade2 blade 2 root + 92 My coo: blade2 kNm MomentMy Mbdy:blade2 nodenr: 5 coo: blade2 blade 2 root + 93 Mz coo: blade2 kNm MomentMz Mbdy:blade2 nodenr: 5 coo: blade2 blade 2 root + 94 Mx coo: blade3 kNm MomentMx Mbdy:blade3 nodenr: 5 coo: blade3 blade 3 root + 95 My coo: blade3 kNm MomentMy Mbdy:blade3 nodenr: 5 coo: blade3 blade 3 root + 96 Mz coo: blade3 kNm MomentMz Mbdy:blade3 nodenr: 5 coo: blade3 blade 3 root + 97 Mx coo: blade1 kNm MomentMx Mbdy:blade1 nodenr: 6 coo: blade1 blade 1 root + 98 My coo: blade1 kNm MomentMy Mbdy:blade1 nodenr: 6 coo: blade1 blade 1 root + 99 Mz coo: blade1 kNm MomentMz Mbdy:blade1 nodenr: 6 coo: blade1 blade 1 root + 100 Mx coo: blade2 kNm MomentMx Mbdy:blade2 nodenr: 6 coo: blade2 blade 2 root + 101 My coo: blade2 kNm MomentMy Mbdy:blade2 nodenr: 6 coo: blade2 blade 2 root + 102 Mz coo: blade2 kNm MomentMz Mbdy:blade2 nodenr: 6 coo: blade2 blade 2 root + 103 Mx coo: blade3 kNm MomentMx Mbdy:blade3 nodenr: 6 coo: blade3 blade 3 root + 104 My coo: blade3 kNm MomentMy Mbdy:blade3 nodenr: 6 coo: blade3 blade 3 root + 105 Mz coo: blade3 kNm MomentMz Mbdy:blade3 nodenr: 6 coo: blade3 blade 3 root + 106 Mx coo: blade1 kNm MomentMx Mbdy:blade1 nodenr: 7 coo: blade1 blade 1 root + 107 My coo: blade1 kNm MomentMy Mbdy:blade1 nodenr: 7 coo: blade1 blade 1 root + 108 Mz coo: blade1 kNm MomentMz Mbdy:blade1 nodenr: 7 coo: blade1 blade 1 root + 109 Mx coo: blade2 kNm MomentMx Mbdy:blade2 nodenr: 7 coo: blade2 blade 2 root + 110 My coo: blade2 kNm MomentMy Mbdy:blade2 nodenr: 7 coo: blade2 blade 2 root + 111 Mz coo: blade2 kNm MomentMz Mbdy:blade2 nodenr: 7 coo: blade2 blade 2 root + 112 Mx coo: blade3 kNm MomentMx Mbdy:blade3 nodenr: 7 coo: blade3 blade 3 root + 113 My coo: blade3 kNm MomentMy Mbdy:blade3 nodenr: 7 coo: blade3 blade 3 root + 114 Mz coo: blade3 kNm MomentMz Mbdy:blade3 nodenr: 7 coo: blade3 blade 3 root + 115 Mx coo: blade1 kNm MomentMx Mbdy:blade1 nodenr: 8 coo: blade1 blade 1 root + 116 My coo: blade1 kNm MomentMy Mbdy:blade1 nodenr: 8 coo: blade1 blade 1 root + 117 Mz coo: blade1 kNm MomentMz Mbdy:blade1 nodenr: 8 coo: blade1 blade 1 root + 118 Mx coo: blade2 kNm MomentMx Mbdy:blade2 nodenr: 8 coo: blade2 blade 2 root + 119 My coo: blade2 kNm MomentMy Mbdy:blade2 nodenr: 8 coo: blade2 blade 2 root + 120 Mz coo: blade2 kNm MomentMz Mbdy:blade2 nodenr: 8 coo: blade2 blade 2 root + 121 Mx coo: blade3 kNm MomentMx Mbdy:blade3 nodenr: 8 coo: blade3 blade 3 root + 122 My coo: blade3 kNm MomentMy Mbdy:blade3 nodenr: 8 coo: blade3 blade 3 root + 123 Mz coo: blade3 kNm MomentMz Mbdy:blade3 nodenr: 8 coo: blade3 blade 3 root + 124 Mx coo: blade1 kNm MomentMx Mbdy:blade1 nodenr: 9 coo: blade1 blade 1 root + 125 My coo: blade1 kNm MomentMy Mbdy:blade1 nodenr: 9 coo: blade1 blade 1 root + 126 Mz coo: blade1 kNm MomentMz Mbdy:blade1 nodenr: 9 coo: blade1 blade 1 root + 127 Mx coo: blade2 kNm MomentMx Mbdy:blade2 nodenr: 9 coo: blade2 blade 2 root + 128 My coo: blade2 kNm MomentMy Mbdy:blade2 nodenr: 9 coo: blade2 blade 2 root + 129 Mz coo: blade2 kNm MomentMz Mbdy:blade2 nodenr: 9 coo: blade2 blade 2 root + 130 Mx coo: blade3 kNm MomentMx Mbdy:blade3 nodenr: 9 coo: blade3 blade 3 root + 131 My coo: blade3 kNm MomentMy Mbdy:blade3 nodenr: 9 coo: blade3 blade 3 root + 132 Mz coo: blade3 kNm MomentMz Mbdy:blade3 nodenr: 9 coo: blade3 blade 3 root + 133 Mx coo: blade1 kNm MomentMx Mbdy:blade1 nodenr: 10 coo: blade1 blade 1 root + 134 My coo: blade1 kNm MomentMy Mbdy:blade1 nodenr: 10 coo: blade1 blade 1 root + 135 Mz coo: blade1 kNm MomentMz Mbdy:blade1 nodenr: 10 coo: blade1 blade 1 root + 136 Mx coo: blade2 kNm MomentMx Mbdy:blade2 nodenr: 10 coo: blade2 blade 2 root + 137 My coo: blade2 kNm MomentMy Mbdy:blade2 nodenr: 10 coo: blade2 blade 2 root + 138 Mz coo: blade2 kNm MomentMz Mbdy:blade2 nodenr: 10 coo: blade2 blade 2 root + 139 Mx coo: blade3 kNm MomentMx Mbdy:blade3 nodenr: 10 coo: blade3 blade 3 root + 140 My coo: blade3 kNm MomentMy Mbdy:blade3 nodenr: 10 coo: blade3 blade 3 root + 141 Mz coo: blade3 kNm MomentMz Mbdy:blade3 nodenr: 10 coo: blade3 blade 3 root + 142 Mx coo: blade1 kNm MomentMx Mbdy:blade1 nodenr: 11 coo: blade1 blade 1 root + 143 My coo: blade1 kNm MomentMy Mbdy:blade1 nodenr: 11 coo: blade1 blade 1 root + 144 Mz coo: blade1 kNm MomentMz Mbdy:blade1 nodenr: 11 coo: blade1 blade 1 root + 145 Mx coo: blade2 kNm MomentMx Mbdy:blade2 nodenr: 11 coo: blade2 blade 2 root + 146 My coo: blade2 kNm MomentMy Mbdy:blade2 nodenr: 11 coo: blade2 blade 2 root + 147 Mz coo: blade2 kNm MomentMz Mbdy:blade2 nodenr: 11 coo: blade2 blade 2 root + 148 Mx coo: blade3 kNm MomentMx Mbdy:blade3 nodenr: 11 coo: blade3 blade 3 root + 149 My coo: blade3 kNm MomentMy Mbdy:blade3 nodenr: 11 coo: blade3 blade 3 root + 150 Mz coo: blade3 kNm MomentMz Mbdy:blade3 nodenr: 11 coo: blade3 blade 3 root + 151 Mx coo: blade1 kNm MomentMx Mbdy:blade1 nodenr: 12 coo: blade1 blade 1 root + 152 My coo: blade1 kNm MomentMy Mbdy:blade1 nodenr: 12 coo: blade1 blade 1 root + 153 Mz coo: blade1 kNm MomentMz Mbdy:blade1 nodenr: 12 coo: blade1 blade 1 root + 154 Mx coo: blade2 kNm MomentMx Mbdy:blade2 nodenr: 12 coo: blade2 blade 2 root + 155 My coo: blade2 kNm MomentMy Mbdy:blade2 nodenr: 12 coo: blade2 blade 2 root + 156 Mz coo: blade2 kNm MomentMz Mbdy:blade2 nodenr: 12 coo: blade2 blade 2 root + 157 Mx coo: blade3 kNm MomentMx Mbdy:blade3 nodenr: 12 coo: blade3 blade 3 root + 158 My coo: blade3 kNm MomentMy Mbdy:blade3 nodenr: 12 coo: blade3 blade 3 root + 159 Mz coo: blade3 kNm MomentMz Mbdy:blade3 nodenr: 12 coo: blade3 blade 3 root + 160 Mx coo: blade1 kNm MomentMx Mbdy:blade1 nodenr: 13 coo: blade1 blade 1 root + 161 My coo: blade1 kNm MomentMy Mbdy:blade1 nodenr: 13 coo: blade1 blade 1 root + 162 Mz coo: blade1 kNm MomentMz Mbdy:blade1 nodenr: 13 coo: blade1 blade 1 root + 163 Mx coo: blade2 kNm MomentMx Mbdy:blade2 nodenr: 13 coo: blade2 blade 2 root + 164 My coo: blade2 kNm MomentMy Mbdy:blade2 nodenr: 13 coo: blade2 blade 2 root + 165 Mz coo: blade2 kNm MomentMz Mbdy:blade2 nodenr: 13 coo: blade2 blade 2 root + 166 Mx coo: blade3 kNm MomentMx Mbdy:blade3 nodenr: 13 coo: blade3 blade 3 root + 167 My coo: blade3 kNm MomentMy Mbdy:blade3 nodenr: 13 coo: blade3 blade 3 root + 168 Mz coo: blade3 kNm MomentMz Mbdy:blade3 nodenr: 13 coo: blade3 blade 3 root + 169 Mx coo: blade1 kNm MomentMx Mbdy:blade1 nodenr: 14 coo: blade1 blade 1 root + 170 My coo: blade1 kNm MomentMy Mbdy:blade1 nodenr: 14 coo: blade1 blade 1 root + 171 Mz coo: blade1 kNm MomentMz Mbdy:blade1 nodenr: 14 coo: blade1 blade 1 root + 172 Mx coo: blade2 kNm MomentMx Mbdy:blade2 nodenr: 14 coo: blade2 blade 2 root + 173 My coo: blade2 kNm MomentMy Mbdy:blade2 nodenr: 14 coo: blade2 blade 2 root + 174 Mz coo: blade2 kNm MomentMz Mbdy:blade2 nodenr: 14 coo: blade2 blade 2 root + 175 Mx coo: blade3 kNm MomentMx Mbdy:blade3 nodenr: 14 coo: blade3 blade 3 root + 176 My coo: blade3 kNm MomentMy Mbdy:blade3 nodenr: 14 coo: blade3 blade 3 root + 177 Mz coo: blade3 kNm MomentMz Mbdy:blade3 nodenr: 14 coo: blade3 blade 3 root + 178 Mx coo: blade1 kNm MomentMx Mbdy:blade1 nodenr: 15 coo: blade1 blade 1 root + 179 My coo: blade1 kNm MomentMy Mbdy:blade1 nodenr: 15 coo: blade1 blade 1 root + 180 Mz coo: blade1 kNm MomentMz Mbdy:blade1 nodenr: 15 coo: blade1 blade 1 root + 181 Mx coo: blade2 kNm MomentMx Mbdy:blade2 nodenr: 15 coo: blade2 blade 2 root + 182 My coo: blade2 kNm MomentMy Mbdy:blade2 nodenr: 15 coo: blade2 blade 2 root + 183 Mz coo: blade2 kNm MomentMz Mbdy:blade2 nodenr: 15 coo: blade2 blade 2 root + 184 Mx coo: blade3 kNm MomentMx Mbdy:blade3 nodenr: 15 coo: blade3 blade 3 root + 185 My coo: blade3 kNm MomentMy Mbdy:blade3 nodenr: 15 coo: blade3 blade 3 root + 186 Mz coo: blade3 kNm MomentMz Mbdy:blade3 nodenr: 15 coo: blade3 blade 3 root + 187 Mx coo: blade1 kNm MomentMx Mbdy:blade1 nodenr: 16 coo: blade1 blade 1 root + 188 My coo: blade1 kNm MomentMy Mbdy:blade1 nodenr: 16 coo: blade1 blade 1 root + 189 Mz coo: blade1 kNm MomentMz Mbdy:blade1 nodenr: 16 coo: blade1 blade 1 root + 190 Mx coo: blade2 kNm MomentMx Mbdy:blade2 nodenr: 16 coo: blade2 blade 2 root + 191 My coo: blade2 kNm MomentMy Mbdy:blade2 nodenr: 16 coo: blade2 blade 2 root + 192 Mz coo: blade2 kNm MomentMz Mbdy:blade2 nodenr: 16 coo: blade2 blade 2 root + 193 Mx coo: blade3 kNm MomentMx Mbdy:blade3 nodenr: 16 coo: blade3 blade 3 root + 194 My coo: blade3 kNm MomentMy Mbdy:blade3 nodenr: 16 coo: blade3 blade 3 root + 195 Mz coo: blade3 kNm MomentMz Mbdy:blade3 nodenr: 16 coo: blade3 blade 3 root + 196 Mx coo: blade1 kNm MomentMx Mbdy:blade1 nodenr: 17 coo: blade1 blade 1 root + 197 My coo: blade1 kNm MomentMy Mbdy:blade1 nodenr: 17 coo: blade1 blade 1 root + 198 Mz coo: blade1 kNm MomentMz Mbdy:blade1 nodenr: 17 coo: blade1 blade 1 root + 199 Mx coo: blade2 kNm MomentMx Mbdy:blade2 nodenr: 17 coo: blade2 blade 2 root + 200 My coo: blade2 kNm MomentMy Mbdy:blade2 nodenr: 17 coo: blade2 blade 2 root + 201 Mz coo: blade2 kNm MomentMz Mbdy:blade2 nodenr: 17 coo: blade2 blade 2 root + 202 Mx coo: blade3 kNm MomentMx Mbdy:blade3 nodenr: 17 coo: blade3 blade 3 root + 203 My coo: blade3 kNm MomentMy Mbdy:blade3 nodenr: 17 coo: blade3 blade 3 root + 204 Mz coo: blade3 kNm MomentMz Mbdy:blade3 nodenr: 17 coo: blade3 blade 3 root + 205 Mx coo: blade1 kNm MomentMx Mbdy:blade1 nodenr: 18 coo: blade1 blade 1 root + 206 My coo: blade1 kNm MomentMy Mbdy:blade1 nodenr: 18 coo: blade1 blade 1 root + 207 Mz coo: blade1 kNm MomentMz Mbdy:blade1 nodenr: 18 coo: blade1 blade 1 root + 208 Mx coo: blade2 kNm MomentMx Mbdy:blade2 nodenr: 18 coo: blade2 blade 2 root + 209 My coo: blade2 kNm MomentMy Mbdy:blade2 nodenr: 18 coo: blade2 blade 2 root + 210 Mz coo: blade2 kNm MomentMz Mbdy:blade2 nodenr: 18 coo: blade2 blade 2 root + 211 Mx coo: blade3 kNm MomentMx Mbdy:blade3 nodenr: 18 coo: blade3 blade 3 root + 212 My coo: blade3 kNm MomentMy Mbdy:blade3 nodenr: 18 coo: blade3 blade 3 root + 213 Mz coo: blade3 kNm MomentMz Mbdy:blade3 nodenr: 18 coo: blade3 blade 3 root + 214 Mx coo: blade1 kNm MomentMx Mbdy:blade1 nodenr: 19 coo: blade1 blade 1 root + 215 My coo: blade1 kNm MomentMy Mbdy:blade1 nodenr: 19 coo: blade1 blade 1 root + 216 Mz coo: blade1 kNm MomentMz Mbdy:blade1 nodenr: 19 coo: blade1 blade 1 root + 217 Mx coo: blade2 kNm MomentMx Mbdy:blade2 nodenr: 19 coo: blade2 blade 2 root + 218 My coo: blade2 kNm MomentMy Mbdy:blade2 nodenr: 19 coo: blade2 blade 2 root + 219 Mz coo: blade2 kNm MomentMz Mbdy:blade2 nodenr: 19 coo: blade2 blade 2 root + 220 Mx coo: blade3 kNm MomentMx Mbdy:blade3 nodenr: 19 coo: blade3 blade 3 root + 221 My coo: blade3 kNm MomentMy Mbdy:blade3 nodenr: 19 coo: blade3 blade 3 root + 222 Mz coo: blade3 kNm MomentMz Mbdy:blade3 nodenr: 19 coo: blade3 blade 3 root + 223 Mx coo: blade1 kNm MomentMx Mbdy:blade1 nodenr: 20 coo: blade1 blade 1 root + 224 My coo: blade1 kNm MomentMy Mbdy:blade1 nodenr: 20 coo: blade1 blade 1 root + 225 Mz coo: blade1 kNm MomentMz Mbdy:blade1 nodenr: 20 coo: blade1 blade 1 root + 226 Mx coo: blade2 kNm MomentMx Mbdy:blade2 nodenr: 20 coo: blade2 blade 2 root + 227 My coo: blade2 kNm MomentMy Mbdy:blade2 nodenr: 20 coo: blade2 blade 2 root + 228 Mz coo: blade2 kNm MomentMz Mbdy:blade2 nodenr: 20 coo: blade2 blade 2 root + 229 Mx coo: blade3 kNm MomentMx Mbdy:blade3 nodenr: 20 coo: blade3 blade 3 root + 230 My coo: blade3 kNm MomentMy Mbdy:blade3 nodenr: 20 coo: blade3 blade 3 root + 231 Mz coo: blade3 kNm MomentMz Mbdy:blade3 nodenr: 20 coo: blade3 blade 3 root + 232 Fx coo: blade1 kN Force Fx Mbdy:blade1 nodenr: 1 coo: blade1 blade 1 root + 233 Fy coo: blade1 kN Force Fy Mbdy:blade1 nodenr: 1 coo: blade1 blade 1 root + 234 Fz coo: blade1 kN Force Fz Mbdy:blade1 nodenr: 1 coo: blade1 blade 1 root + 235 Fx coo: blade2 kN Force Fx Mbdy:blade2 nodenr: 1 coo: blade2 blade 2 root + 236 Fy coo: blade2 kN Force Fy Mbdy:blade2 nodenr: 1 coo: blade2 blade 2 root + 237 Fz coo: blade2 kN Force Fz Mbdy:blade2 nodenr: 1 coo: blade2 blade 2 root + 238 Fx coo: blade3 kN Force Fx Mbdy:blade3 nodenr: 1 coo: blade3 blade 3 root + 239 Fy coo: blade3 kN Force Fy Mbdy:blade3 nodenr: 1 coo: blade3 blade 3 root + 240 Fz coo: blade3 kN Force Fz Mbdy:blade3 nodenr: 1 coo: blade3 blade 3 root + 241 Fx coo: blade1 kN Force Fx Mbdy:blade1 nodenr: 2 coo: blade1 blade 1 root + 242 Fy coo: blade1 kN Force Fy Mbdy:blade1 nodenr: 2 coo: blade1 blade 1 root + 243 Fz coo: blade1 kN Force Fz Mbdy:blade1 nodenr: 2 coo: blade1 blade 1 root + 244 Fx coo: blade2 kN Force Fx Mbdy:blade2 nodenr: 2 coo: blade2 blade 2 root + 245 Fy coo: blade2 kN Force Fy Mbdy:blade2 nodenr: 2 coo: blade2 blade 2 root + 246 Fz coo: blade2 kN Force Fz Mbdy:blade2 nodenr: 2 coo: blade2 blade 2 root + 247 Fx coo: blade3 kN Force Fx Mbdy:blade3 nodenr: 2 coo: blade3 blade 3 root + 248 Fy coo: blade3 kN Force Fy Mbdy:blade3 nodenr: 2 coo: blade3 blade 3 root + 249 Fz coo: blade3 kN Force Fz Mbdy:blade3 nodenr: 2 coo: blade3 blade 3 root + 250 Fx coo: blade1 kN Force Fx Mbdy:blade1 nodenr: 3 coo: blade1 blade 1 root + 251 Fy coo: blade1 kN Force Fy Mbdy:blade1 nodenr: 3 coo: blade1 blade 1 root + 252 Fz coo: blade1 kN Force Fz Mbdy:blade1 nodenr: 3 coo: blade1 blade 1 root + 253 Fx coo: blade2 kN Force Fx Mbdy:blade2 nodenr: 3 coo: blade2 blade 2 root + 254 Fy coo: blade2 kN Force Fy Mbdy:blade2 nodenr: 3 coo: blade2 blade 2 root + 255 Fz coo: blade2 kN Force Fz Mbdy:blade2 nodenr: 3 coo: blade2 blade 2 root + 256 Fx coo: blade3 kN Force Fx Mbdy:blade3 nodenr: 3 coo: blade3 blade 3 root + 257 Fy coo: blade3 kN Force Fy Mbdy:blade3 nodenr: 3 coo: blade3 blade 3 root + 258 Fz coo: blade3 kN Force Fz Mbdy:blade3 nodenr: 3 coo: blade3 blade 3 root + 259 Fx coo: blade1 kN Force Fx Mbdy:blade1 nodenr: 4 coo: blade1 blade 1 root + 260 Fy coo: blade1 kN Force Fy Mbdy:blade1 nodenr: 4 coo: blade1 blade 1 root + 261 Fz coo: blade1 kN Force Fz Mbdy:blade1 nodenr: 4 coo: blade1 blade 1 root + 262 Fx coo: blade2 kN Force Fx Mbdy:blade2 nodenr: 4 coo: blade2 blade 2 root + 263 Fy coo: blade2 kN Force Fy Mbdy:blade2 nodenr: 4 coo: blade2 blade 2 root + 264 Fz coo: blade2 kN Force Fz Mbdy:blade2 nodenr: 4 coo: blade2 blade 2 root + 265 Fx coo: blade3 kN Force Fx Mbdy:blade3 nodenr: 4 coo: blade3 blade 3 root + 266 Fy coo: blade3 kN Force Fy Mbdy:blade3 nodenr: 4 coo: blade3 blade 3 root + 267 Fz coo: blade3 kN Force Fz Mbdy:blade3 nodenr: 4 coo: blade3 blade 3 root + 268 Fx coo: blade1 kN Force Fx Mbdy:blade1 nodenr: 5 coo: blade1 blade 1 root + 269 Fy coo: blade1 kN Force Fy Mbdy:blade1 nodenr: 5 coo: blade1 blade 1 root + 270 Fz coo: blade1 kN Force Fz Mbdy:blade1 nodenr: 5 coo: blade1 blade 1 root + 271 Fx coo: blade2 kN Force Fx Mbdy:blade2 nodenr: 5 coo: blade2 blade 2 root + 272 Fy coo: blade2 kN Force Fy Mbdy:blade2 nodenr: 5 coo: blade2 blade 2 root + 273 Fz coo: blade2 kN Force Fz Mbdy:blade2 nodenr: 5 coo: blade2 blade 2 root + 274 Fx coo: blade3 kN Force Fx Mbdy:blade3 nodenr: 5 coo: blade3 blade 3 root + 275 Fy coo: blade3 kN Force Fy Mbdy:blade3 nodenr: 5 coo: blade3 blade 3 root + 276 Fz coo: blade3 kN Force Fz Mbdy:blade3 nodenr: 5 coo: blade3 blade 3 root + 277 Fx coo: blade1 kN Force Fx Mbdy:blade1 nodenr: 6 coo: blade1 blade 1 root + 278 Fy coo: blade1 kN Force Fy Mbdy:blade1 nodenr: 6 coo: blade1 blade 1 root + 279 Fz coo: blade1 kN Force Fz Mbdy:blade1 nodenr: 6 coo: blade1 blade 1 root + 280 Fx coo: blade2 kN Force Fx Mbdy:blade2 nodenr: 6 coo: blade2 blade 2 root + 281 Fy coo: blade2 kN Force Fy Mbdy:blade2 nodenr: 6 coo: blade2 blade 2 root + 282 Fz coo: blade2 kN Force Fz Mbdy:blade2 nodenr: 6 coo: blade2 blade 2 root + 283 Fx coo: blade3 kN Force Fx Mbdy:blade3 nodenr: 6 coo: blade3 blade 3 root + 284 Fy coo: blade3 kN Force Fy Mbdy:blade3 nodenr: 6 coo: blade3 blade 3 root + 285 Fz coo: blade3 kN Force Fz Mbdy:blade3 nodenr: 6 coo: blade3 blade 3 root + 286 Fx coo: blade1 kN Force Fx Mbdy:blade1 nodenr: 7 coo: blade1 blade 1 root + 287 Fy coo: blade1 kN Force Fy Mbdy:blade1 nodenr: 7 coo: blade1 blade 1 root + 288 Fz coo: blade1 kN Force Fz Mbdy:blade1 nodenr: 7 coo: blade1 blade 1 root + 289 Fx coo: blade2 kN Force Fx Mbdy:blade2 nodenr: 7 coo: blade2 blade 2 root + 290 Fy coo: blade2 kN Force Fy Mbdy:blade2 nodenr: 7 coo: blade2 blade 2 root + 291 Fz coo: blade2 kN Force Fz Mbdy:blade2 nodenr: 7 coo: blade2 blade 2 root + 292 Fx coo: blade3 kN Force Fx Mbdy:blade3 nodenr: 7 coo: blade3 blade 3 root + 293 Fy coo: blade3 kN Force Fy Mbdy:blade3 nodenr: 7 coo: blade3 blade 3 root + 294 Fz coo: blade3 kN Force Fz Mbdy:blade3 nodenr: 7 coo: blade3 blade 3 root + 295 Fx coo: blade1 kN Force Fx Mbdy:blade1 nodenr: 8 coo: blade1 blade 1 root + 296 Fy coo: blade1 kN Force Fy Mbdy:blade1 nodenr: 8 coo: blade1 blade 1 root + 297 Fz coo: blade1 kN Force Fz Mbdy:blade1 nodenr: 8 coo: blade1 blade 1 root + 298 Fx coo: blade2 kN Force Fx Mbdy:blade2 nodenr: 8 coo: blade2 blade 2 root + 299 Fy coo: blade2 kN Force Fy Mbdy:blade2 nodenr: 8 coo: blade2 blade 2 root + 300 Fz coo: blade2 kN Force Fz Mbdy:blade2 nodenr: 8 coo: blade2 blade 2 root + 301 Fx coo: blade3 kN Force Fx Mbdy:blade3 nodenr: 8 coo: blade3 blade 3 root + 302 Fy coo: blade3 kN Force Fy Mbdy:blade3 nodenr: 8 coo: blade3 blade 3 root + 303 Fz coo: blade3 kN Force Fz Mbdy:blade3 nodenr: 8 coo: blade3 blade 3 root + 304 Fx coo: blade1 kN Force Fx Mbdy:blade1 nodenr: 9 coo: blade1 blade 1 root + 305 Fy coo: blade1 kN Force Fy Mbdy:blade1 nodenr: 9 coo: blade1 blade 1 root + 306 Fz coo: blade1 kN Force Fz Mbdy:blade1 nodenr: 9 coo: blade1 blade 1 root + 307 Fx coo: blade2 kN Force Fx Mbdy:blade2 nodenr: 9 coo: blade2 blade 2 root + 308 Fy coo: blade2 kN Force Fy Mbdy:blade2 nodenr: 9 coo: blade2 blade 2 root + 309 Fz coo: blade2 kN Force Fz Mbdy:blade2 nodenr: 9 coo: blade2 blade 2 root + 310 Fx coo: blade3 kN Force Fx Mbdy:blade3 nodenr: 9 coo: blade3 blade 3 root + 311 Fy coo: blade3 kN Force Fy Mbdy:blade3 nodenr: 9 coo: blade3 blade 3 root + 312 Fz coo: blade3 kN Force Fz Mbdy:blade3 nodenr: 9 coo: blade3 blade 3 root + 313 Fx coo: blade1 kN Force Fx Mbdy:blade1 nodenr: 10 coo: blade1 blade 1 root + 314 Fy coo: blade1 kN Force Fy Mbdy:blade1 nodenr: 10 coo: blade1 blade 1 root + 315 Fz coo: blade1 kN Force Fz Mbdy:blade1 nodenr: 10 coo: blade1 blade 1 root + 316 Fx coo: blade2 kN Force Fx Mbdy:blade2 nodenr: 10 coo: blade2 blade 2 root + 317 Fy coo: blade2 kN Force Fy Mbdy:blade2 nodenr: 10 coo: blade2 blade 2 root + 318 Fz coo: blade2 kN Force Fz Mbdy:blade2 nodenr: 10 coo: blade2 blade 2 root + 319 Fx coo: blade3 kN Force Fx Mbdy:blade3 nodenr: 10 coo: blade3 blade 3 root + 320 Fy coo: blade3 kN Force Fy Mbdy:blade3 nodenr: 10 coo: blade3 blade 3 root + 321 Fz coo: blade3 kN Force Fz Mbdy:blade3 nodenr: 10 coo: blade3 blade 3 root + 322 Fx coo: blade1 kN Force Fx Mbdy:blade1 nodenr: 11 coo: blade1 blade 1 root + 323 Fy coo: blade1 kN Force Fy Mbdy:blade1 nodenr: 11 coo: blade1 blade 1 root + 324 Fz coo: blade1 kN Force Fz Mbdy:blade1 nodenr: 11 coo: blade1 blade 1 root + 325 Fx coo: blade2 kN Force Fx Mbdy:blade2 nodenr: 11 coo: blade2 blade 2 root + 326 Fy coo: blade2 kN Force Fy Mbdy:blade2 nodenr: 11 coo: blade2 blade 2 root + 327 Fz coo: blade2 kN Force Fz Mbdy:blade2 nodenr: 11 coo: blade2 blade 2 root + 328 Fx coo: blade3 kN Force Fx Mbdy:blade3 nodenr: 11 coo: blade3 blade 3 root + 329 Fy coo: blade3 kN Force Fy Mbdy:blade3 nodenr: 11 coo: blade3 blade 3 root + 330 Fz coo: blade3 kN Force Fz Mbdy:blade3 nodenr: 11 coo: blade3 blade 3 root + 331 Fx coo: blade1 kN Force Fx Mbdy:blade1 nodenr: 12 coo: blade1 blade 1 root + 332 Fy coo: blade1 kN Force Fy Mbdy:blade1 nodenr: 12 coo: blade1 blade 1 root + 333 Fz coo: blade1 kN Force Fz Mbdy:blade1 nodenr: 12 coo: blade1 blade 1 root + 334 Fx coo: blade2 kN Force Fx Mbdy:blade2 nodenr: 12 coo: blade2 blade 2 root + 335 Fy coo: blade2 kN Force Fy Mbdy:blade2 nodenr: 12 coo: blade2 blade 2 root + 336 Fz coo: blade2 kN Force Fz Mbdy:blade2 nodenr: 12 coo: blade2 blade 2 root + 337 Fx coo: blade3 kN Force Fx Mbdy:blade3 nodenr: 12 coo: blade3 blade 3 root + 338 Fy coo: blade3 kN Force Fy Mbdy:blade3 nodenr: 12 coo: blade3 blade 3 root + 339 Fz coo: blade3 kN Force Fz Mbdy:blade3 nodenr: 12 coo: blade3 blade 3 root + 340 Fx coo: blade1 kN Force Fx Mbdy:blade1 nodenr: 13 coo: blade1 blade 1 root + 341 Fy coo: blade1 kN Force Fy Mbdy:blade1 nodenr: 13 coo: blade1 blade 1 root + 342 Fz coo: blade1 kN Force Fz Mbdy:blade1 nodenr: 13 coo: blade1 blade 1 root + 343 Fx coo: blade2 kN Force Fx Mbdy:blade2 nodenr: 13 coo: blade2 blade 2 root + 344 Fy coo: blade2 kN Force Fy Mbdy:blade2 nodenr: 13 coo: blade2 blade 2 root + 345 Fz coo: blade2 kN Force Fz Mbdy:blade2 nodenr: 13 coo: blade2 blade 2 root + 346 Fx coo: blade3 kN Force Fx Mbdy:blade3 nodenr: 13 coo: blade3 blade 3 root + 347 Fy coo: blade3 kN Force Fy Mbdy:blade3 nodenr: 13 coo: blade3 blade 3 root + 348 Fz coo: blade3 kN Force Fz Mbdy:blade3 nodenr: 13 coo: blade3 blade 3 root + 349 Fx coo: blade1 kN Force Fx Mbdy:blade1 nodenr: 14 coo: blade1 blade 1 root + 350 Fy coo: blade1 kN Force Fy Mbdy:blade1 nodenr: 14 coo: blade1 blade 1 root + 351 Fz coo: blade1 kN Force Fz Mbdy:blade1 nodenr: 14 coo: blade1 blade 1 root + 352 Fx coo: blade2 kN Force Fx Mbdy:blade2 nodenr: 14 coo: blade2 blade 2 root + 353 Fy coo: blade2 kN Force Fy Mbdy:blade2 nodenr: 14 coo: blade2 blade 2 root + 354 Fz coo: blade2 kN Force Fz Mbdy:blade2 nodenr: 14 coo: blade2 blade 2 root + 355 Fx coo: blade3 kN Force Fx Mbdy:blade3 nodenr: 14 coo: blade3 blade 3 root + 356 Fy coo: blade3 kN Force Fy Mbdy:blade3 nodenr: 14 coo: blade3 blade 3 root + 357 Fz coo: blade3 kN Force Fz Mbdy:blade3 nodenr: 14 coo: blade3 blade 3 root + 358 Fx coo: blade1 kN Force Fx Mbdy:blade1 nodenr: 15 coo: blade1 blade 1 root + 359 Fy coo: blade1 kN Force Fy Mbdy:blade1 nodenr: 15 coo: blade1 blade 1 root + 360 Fz coo: blade1 kN Force Fz Mbdy:blade1 nodenr: 15 coo: blade1 blade 1 root + 361 Fx coo: blade2 kN Force Fx Mbdy:blade2 nodenr: 15 coo: blade2 blade 2 root + 362 Fy coo: blade2 kN Force Fy Mbdy:blade2 nodenr: 15 coo: blade2 blade 2 root + 363 Fz coo: blade2 kN Force Fz Mbdy:blade2 nodenr: 15 coo: blade2 blade 2 root + 364 Fx coo: blade3 kN Force Fx Mbdy:blade3 nodenr: 15 coo: blade3 blade 3 root + 365 Fy coo: blade3 kN Force Fy Mbdy:blade3 nodenr: 15 coo: blade3 blade 3 root + 366 Fz coo: blade3 kN Force Fz Mbdy:blade3 nodenr: 15 coo: blade3 blade 3 root + 367 Fx coo: blade1 kN Force Fx Mbdy:blade1 nodenr: 16 coo: blade1 blade 1 root + 368 Fy coo: blade1 kN Force Fy Mbdy:blade1 nodenr: 16 coo: blade1 blade 1 root + 369 Fz coo: blade1 kN Force Fz Mbdy:blade1 nodenr: 16 coo: blade1 blade 1 root + 370 Fx coo: blade2 kN Force Fx Mbdy:blade2 nodenr: 16 coo: blade2 blade 2 root + 371 Fy coo: blade2 kN Force Fy Mbdy:blade2 nodenr: 16 coo: blade2 blade 2 root + 372 Fz coo: blade2 kN Force Fz Mbdy:blade2 nodenr: 16 coo: blade2 blade 2 root + 373 Fx coo: blade3 kN Force Fx Mbdy:blade3 nodenr: 16 coo: blade3 blade 3 root + 374 Fy coo: blade3 kN Force Fy Mbdy:blade3 nodenr: 16 coo: blade3 blade 3 root + 375 Fz coo: blade3 kN Force Fz Mbdy:blade3 nodenr: 16 coo: blade3 blade 3 root + 376 Fx coo: blade1 kN Force Fx Mbdy:blade1 nodenr: 17 coo: blade1 blade 1 root + 377 Fy coo: blade1 kN Force Fy Mbdy:blade1 nodenr: 17 coo: blade1 blade 1 root + 378 Fz coo: blade1 kN Force Fz Mbdy:blade1 nodenr: 17 coo: blade1 blade 1 root + 379 Fx coo: blade2 kN Force Fx Mbdy:blade2 nodenr: 17 coo: blade2 blade 2 root + 380 Fy coo: blade2 kN Force Fy Mbdy:blade2 nodenr: 17 coo: blade2 blade 2 root + 381 Fz coo: blade2 kN Force Fz Mbdy:blade2 nodenr: 17 coo: blade2 blade 2 root + 382 Fx coo: blade3 kN Force Fx Mbdy:blade3 nodenr: 17 coo: blade3 blade 3 root + 383 Fy coo: blade3 kN Force Fy Mbdy:blade3 nodenr: 17 coo: blade3 blade 3 root + 384 Fz coo: blade3 kN Force Fz Mbdy:blade3 nodenr: 17 coo: blade3 blade 3 root + 385 Fx coo: blade1 kN Force Fx Mbdy:blade1 nodenr: 18 coo: blade1 blade 1 root + 386 Fy coo: blade1 kN Force Fy Mbdy:blade1 nodenr: 18 coo: blade1 blade 1 root + 387 Fz coo: blade1 kN Force Fz Mbdy:blade1 nodenr: 18 coo: blade1 blade 1 root + 388 Fx coo: blade2 kN Force Fx Mbdy:blade2 nodenr: 18 coo: blade2 blade 2 root + 389 Fy coo: blade2 kN Force Fy Mbdy:blade2 nodenr: 18 coo: blade2 blade 2 root + 390 Fz coo: blade2 kN Force Fz Mbdy:blade2 nodenr: 18 coo: blade2 blade 2 root + 391 Fx coo: blade3 kN Force Fx Mbdy:blade3 nodenr: 18 coo: blade3 blade 3 root + 392 Fy coo: blade3 kN Force Fy Mbdy:blade3 nodenr: 18 coo: blade3 blade 3 root + 393 Fz coo: blade3 kN Force Fz Mbdy:blade3 nodenr: 18 coo: blade3 blade 3 root + 394 Fx coo: blade1 kN Force Fx Mbdy:blade1 nodenr: 19 coo: blade1 blade 1 root + 395 Fy coo: blade1 kN Force Fy Mbdy:blade1 nodenr: 19 coo: blade1 blade 1 root + 396 Fz coo: blade1 kN Force Fz Mbdy:blade1 nodenr: 19 coo: blade1 blade 1 root + 397 Fx coo: blade2 kN Force Fx Mbdy:blade2 nodenr: 19 coo: blade2 blade 2 root + 398 Fy coo: blade2 kN Force Fy Mbdy:blade2 nodenr: 19 coo: blade2 blade 2 root + 399 Fz coo: blade2 kN Force Fz Mbdy:blade2 nodenr: 19 coo: blade2 blade 2 root + 400 Fx coo: blade3 kN Force Fx Mbdy:blade3 nodenr: 19 coo: blade3 blade 3 root + 401 Fy coo: blade3 kN Force Fy Mbdy:blade3 nodenr: 19 coo: blade3 blade 3 root + 402 Fz coo: blade3 kN Force Fz Mbdy:blade3 nodenr: 19 coo: blade3 blade 3 root + 403 Fx coo: blade1 kN Force Fx Mbdy:blade1 nodenr: 20 coo: blade1 blade 1 root + 404 Fy coo: blade1 kN Force Fy Mbdy:blade1 nodenr: 20 coo: blade1 blade 1 root + 405 Fz coo: blade1 kN Force Fz Mbdy:blade1 nodenr: 20 coo: blade1 blade 1 root + 406 Fx coo: blade2 kN Force Fx Mbdy:blade2 nodenr: 20 coo: blade2 blade 2 root + 407 Fy coo: blade2 kN Force Fy Mbdy:blade2 nodenr: 20 coo: blade2 blade 2 root + 408 Fz coo: blade2 kN Force Fz Mbdy:blade2 nodenr: 20 coo: blade2 blade 2 root + 409 Fx coo: blade3 kN Force Fx Mbdy:blade3 nodenr: 20 coo: blade3 blade 3 root + 410 Fy coo: blade3 kN Force Fy Mbdy:blade3 nodenr: 20 coo: blade3 blade 3 root + 411 Fz coo: blade3 kN Force Fz Mbdy:blade3 nodenr: 20 coo: blade3 blade 3 root + 412 Cl, R= 35.9 deg Cl of blade 1 at radius 36.25 + 413 Cl, R= 40.8 deg Cl of blade 1 at radius 40.91 + 414 Cl, R= 45.8 deg Cl of blade 1 at radius 45.59 + 415 Cl, R= 50.7 deg Cl of blade 1 at radius 50.24 + 416 Cl, R= 55.7 deg Cl of blade 1 at radius 54.82 + 417 Cl, R= 60.6 deg Cl of blade 1 at radius 59.25 + 418 Cl, R= 65.6 deg Cl of blade 1 at radius 67.52 + 419 Cl, R= 70.5 deg Cl of blade 1 at radius 71.24 + 420 Cl, R= 75.5 deg Cl of blade 1 at radius 74.64 + 421 Cl, R= 80.4 deg Cl of blade 1 at radius 80.30 + 422 qwerty is azerty +________________________________________________________________________________________________________________________ diff --git a/wetb/hawc2/tests/test_files/hawc2io/hawc2bin_chantest_2.sel b/wetb/hawc2/tests/test_files/hawc2io/hawc2bin_chantest_2.sel new file mode 100644 index 0000000000000000000000000000000000000000..9d293bc1ed4164d8118873debd70706c6ce14044 --- /dev/null +++ b/wetb/hawc2/tests/test_files/hawc2io/hawc2bin_chantest_2.sel @@ -0,0 +1,448 @@ +________________________________________________________________________________________________________________________ + Version ID : HAWC2MB 12.4 + Time : 14:45:39 + Date : 28:04.2017 +________________________________________________________________________________________________________________________ + Result file : ./res/dlc12_iec61400-1ed3/dlc12_wsp04_wdir000_s1001_test.dat +________________________________________________________________________________________________________________________ + Scans Channels Time [sec] Format + 120000 217 600.000 BINARY + + Channel Variable Description + + 1 Time s Time + 2 bea1 angle deg shaft_rot angle + 3 bea1 angle_speed rpm shaft_rot angle speed + 4 bea2 angle deg pitch1 angle + 5 bea2 angle_speed deg/s pitch1 angle speed + 6 bea2 angle deg pitch2 angle + 7 bea2 angle_speed deg/s pitch2 angle speed + 8 bea2 angle deg pitch3 angle + 9 bea2 angle_speed deg/s pitch3 angle speed + 10 Omega rad/s Rotor speed + 11 Ae rot. torque kNm Aero rotor torque + 12 Ae rot. power kW Aero rotor power + 13 Ae rot. thrust kN Aero rotor thrust + 14 WSP gl. coo.,Vx m/s Free wind speed Vx, gl. coo, of gl. pos 0.00, 0.00, -31.60 + 15 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos 0.00, 0.00, -31.60 + 16 WSP gl. coo.,Vz m/s Free wind speed Vz, gl. coo, of gl. pos 0.00, 0.00, -31.60 + 17 WSP nonr. rot coo.,Vx m/s Free wind speed Vx, nonr. rotor coo, of gl. pos 0.00, 0.00, -31.60 + 18 WSP nonr. rot coo.,Vy m/s Free wind speed Vy, nonr. rotor coo, of gl. pos 0.00, 0.00, -31.60 + 19 WSP nonr. rot coo.,Vz m/s Free wind speed Vz, nonr. rotor coo, of gl. pos 0.00, 0.00, -31.60 + 20 WSP nonr. rot coo.,Vx m/s Free wind speed Vx, nonr. rotor coo, of gl. pos 0.00, 0.00, -45.00 + 21 WSP nonr. rot coo.,Vy m/s Free wind speed Vy, nonr. rotor coo, of gl. pos 0.00, 0.00, -45.00 + 22 WSP nonr. rot coo.,Vz m/s Free wind speed Vz, nonr. rotor coo, of gl. pos 0.00, 0.00, -45.00 + 23 WSP nonr. rot coo.,Vx m/s Free wind speed Vx, nonr. rotor coo, of gl. pos 0.00, 0.00, -15.00 + 24 WSP nonr. rot coo.,Vy m/s Free wind speed Vy, nonr. rotor coo, of gl. pos 0.00, 0.00, -15.00 + 25 WSP nonr. rot coo.,Vz m/s Free wind speed Vz, nonr. rotor coo, of gl. pos 0.00, 0.00, -15.00 + 26 WSP gl. coo.,Abs_vhor m/s Free wind speed Abs_vhor, gl. coo, of gl. pos 0.00, 0.00, -31.60 + 27 Mx coo: tower kNm MomentMx Mbdy:tower nodenr: 1 coo: tower m tower base + 28 My coo: tower kNm MomentMy Mbdy:tower nodenr: 1 coo: tower m tower base + 29 Mz coo: tower kNm MomentMz Mbdy:tower nodenr: 1 coo: tower m tower base + 30 Mx coo: tower kNm MomentMx Mbdy:tower nodenr: 13 coo: tower m yaw bearing + 31 My coo: tower kNm MomentMy Mbdy:tower nodenr: 13 coo: tower m yaw bearing + 32 Mz coo: tower kNm MomentMz Mbdy:tower nodenr: 13 coo: tower m yaw bearing + 33 Mx coo: shaft kNm MomentMx Mbdy:shaft nodenr: 3 coo: shaft m main bearing + 34 My coo: shaft kNm MomentMy Mbdy:shaft nodenr: 3 coo: shaft m main bearing + 35 Mz coo: shaft kNm MomentMz Mbdy:shaft nodenr: 3 coo: shaft m main bearing + 36 Mx coo: hub1 kNm MomentMx Mbdy:hub1 nodenr: 2 coo: hub1 m blade 1 root non rotat + 37 My coo: hub1 kNm MomentMy Mbdy:hub1 nodenr: 2 coo: hub1 m blade 1 root non rotat + 38 Mz coo: hub1 kNm MomentMz Mbdy:hub1 nodenr: 2 coo: hub1 m blade 1 root non rotat + 39 Mx coo: hub2 kNm MomentMx Mbdy:hub2 nodenr: 2 coo: hub2 m blade 2 root non rotat + 40 My coo: hub2 kNm MomentMy Mbdy:hub2 nodenr: 2 coo: hub2 m blade 2 root non rotat + 41 Mz coo: hub2 kNm MomentMz Mbdy:hub2 nodenr: 2 coo: hub2 m blade 2 root non rotat + 42 Mx coo: hub3 kNm MomentMx Mbdy:hub3 nodenr: 2 coo: hub3 m blade 3 root non rotat + 43 My coo: hub3 kNm MomentMy Mbdy:hub3 nodenr: 2 coo: hub3 m blade 3 root non rotat + 44 Mz coo: hub3 kNm MomentMz Mbdy:hub3 nodenr: 2 coo: hub3 m blade 3 root non rotat + 45 State pos x coo: global m State pos x Mbdy:tower E-nr: 12 Z-rel:1.00 coo: global tower top flange global pos + 46 State pos y coo: global m State pos y Mbdy:tower E-nr: 12 Z-rel:1.00 coo: global tower top flange global pos + 47 State pos z coo: global m State pos z Mbdy:tower E-nr: 12 Z-rel:1.00 coo: global tower top flange global pos + 48 State acc x coo: global m/s^2 State acc x Mbdy:tower E-nr: 12 Z-rel:1.00 coo: global tower top flange acceleration + 49 State acc y coo: global m/s^2 State acc y Mbdy:tower E-nr: 12 Z-rel:1.00 coo: global tower top flange acceleration + 50 State acc z coo: global m/s^2 State acc z Mbdy:tower E-nr: 12 Z-rel:1.00 coo: global tower top flange acceleration + 51 State pos x coo: global m State pos x Mbdy:tower E-nr: 6 Z-rel:1.00 coo: global tower approx tip height + 52 State pos y coo: global m State pos y Mbdy:tower E-nr: 6 Z-rel:1.00 coo: global tower approx tip height + 53 State pos z coo: global m State pos z Mbdy:tower E-nr: 6 Z-rel:1.00 coo: global tower approx tip height + 54 State pos x coo: blade1 m State pos x Mbdy:blade1 E-nr: 19 Z-rel:1.00 coo: blade1 blade 1 tip pos + 55 State pos y coo: blade1 m State pos y Mbdy:blade1 E-nr: 19 Z-rel:1.00 coo: blade1 blade 1 tip pos + 56 State pos z coo: blade1 m State pos z Mbdy:blade1 E-nr: 19 Z-rel:1.00 coo: blade1 blade 1 tip pos + 57 State pos x coo: blade2 m State pos x Mbdy:blade2 E-nr: 19 Z-rel:1.00 coo: blade2 blade 2 tip pos + 58 State pos y coo: blade2 m State pos y Mbdy:blade2 E-nr: 19 Z-rel:1.00 coo: blade2 blade 2 tip pos + 59 State pos z coo: blade2 m State pos z Mbdy:blade2 E-nr: 19 Z-rel:1.00 coo: blade2 blade 2 tip pos + 60 State pos x coo: blade3 m State pos x Mbdy:blade3 E-nr: 19 Z-rel:1.00 coo: blade3 blade 3 tip pos + 61 State pos y coo: blade3 m State pos y Mbdy:blade3 E-nr: 19 Z-rel:1.00 coo: blade3 blade 3 tip pos + 62 State pos z coo: blade3 m State pos z Mbdy:blade3 E-nr: 19 Z-rel:1.00 coo: blade3 blade 3 tip pos + 63 State pos x coo: global m State pos x Mbdy:blade1 E-nr: 19 Z-rel:1.00 coo: global blade 1 tip pos + 64 State pos y coo: global m State pos y Mbdy:blade1 E-nr: 19 Z-rel:1.00 coo: global blade 1 tip pos + 65 State pos z coo: global m State pos z Mbdy:blade1 E-nr: 19 Z-rel:1.00 coo: global blade 1 tip pos + 66 State pos x coo: global m State pos x Mbdy:blade2 E-nr: 19 Z-rel:1.00 coo: global blade 2 tip pos + 67 State pos y coo: global m State pos y Mbdy:blade2 E-nr: 19 Z-rel:1.00 coo: global blade 2 tip pos + 68 State pos z coo: global m State pos z Mbdy:blade2 E-nr: 19 Z-rel:1.00 coo: global blade 2 tip pos + 69 State pos x coo: global m State pos x Mbdy:blade3 E-nr: 19 Z-rel:1.00 coo: global blade 3 tip pos + 70 State pos y coo: global m State pos y Mbdy:blade3 E-nr: 19 Z-rel:1.00 coo: global blade 3 tip pos + 71 State pos z coo: global m State pos z Mbdy:blade3 E-nr: 19 Z-rel:1.00 coo: global blade 3 tip pos + 72 State pos x coo: global m State pos x Mbdy:blade1 E-nr: 19 Z-rel:1.00 coo: global blade 1 tip_pos_global + 73 State pos y coo: global m State pos y Mbdy:blade1 E-nr: 19 Z-rel:1.00 coo: global blade 1 tip_pos_global + 74 State pos z coo: global m State pos z Mbdy:blade1 E-nr: 19 Z-rel:1.00 coo: global blade 1 tip_pos_global + 75 proj_ang tz coo: blade1 deg State_rot proj_ang tz Mbdy:blade1 E-nr: 19 Z-rel:1.00 coo: blade1 blade 1 tip twist + 76 State pos x coo: global m State pos x Mbdy:hub1 E-nr: 1 Z-rel:0.00 coo: global hub1 global pos (end of mainshaft) + 77 State pos y coo: global m State pos y Mbdy:hub1 E-nr: 1 Z-rel:0.00 coo: global hub1 global pos (end of mainshaft) + 78 State pos z coo: global m State pos z Mbdy:hub1 E-nr: 1 Z-rel:0.00 coo: global hub1 global pos (end of mainshaft) + 79 WSP Vx, glco, R= 14.0 m/s Wind speed Vx of blade 1 at radius 13.95, global coo. + 80 WSP Vy, glco, R= 14.0 m/s Wind speed Vy of blade 1 at radius 13.95, global coo. + 81 WSP Vz, glco, R= 14.0 m/s Wind speed Vz of blade 1 at radius 13.95, global coo. + 82 Alfa, R= 12.9 deg Angle of attack of blade 1 at radius 12.90 + 83 Alfa, R= 12.9 deg Angle of attack of blade 2 at radius 12.90 + 84 Alfa, R= 12.9 deg Angle of attack of blade 3 at radius 12.90 + 85 Cl, R= 13.0 deg Cl of blade 1 at radius 12.90 + 86 Cl, R= 13.0 deg Cl of blade 2 at radius 12.90 + 87 Cl, R= 13.0 deg Cl of blade 3 at radius 12.90 + 88 Vrel, R= 12.9 m/s Relative velocity of blade 1 at radius 12.90 + 89 Azi 1 deg Azimuth of blade 1 + 90 DLL inp 1: 1 - DLL : 1 inpvec : 1 generator torque reference [nm] + 91 DLL inp 1: 2 - DLL : 1 inpvec : 2 pitch angle reference of blade 1 [rad] + 92 DLL inp 1: 3 - DLL : 1 inpvec : 3 pitch angle reference of blade 2 [rad] + 93 DLL inp 1: 4 - DLL : 1 inpvec : 4 pitch angle reference of blade 3 [rad] + 94 DLL inp 1: 14 - DLL : 1 inpvec : 14 torque limit switch based on pitch [-] + 95 DLL inp 1: 22 - DLL : 1 inpvec : 22 status signal [-] + 96 DLL inp 1: 25 - DLL : 1 inpvec : 25 flag for mechnical brake [0=off/1=on] + 97 DLL inp 1: 26 - DLL : 1 inpvec : 26 flag for emergency pitch stop [0=off/1=on] + 98 DLL inp 1: 27 - DLL : 1 inpvec : 27 lp filtered acceleration level [m/s^2] + 99 DLL inp 2: 1 - DLL : 2 inpvec : 1 mgen lss [nm] + 100 DLL inp 2: 2 - DLL : 2 inpvec : 2 pelec w + 101 DLL inp 2: 3 - DLL : 2 inpvec : 3 mframe + 102 DLL inp 2: 4 - DLL : 2 inpvec : 4 mgen hss + 103 DLL inp 2: 5 - DLL : 2 inpvec : 5 generator pmech kw + 104 DLL inp 2: 6 - DLL : 2 inpvec : 6 filtered gen speed + 105 DLL inp 2: 7 - DLL : 2 inpvec : 7 elec. pwr + 106 DLL inp 2: 8 - DLL : 2 inpvec : 8 grid flag + 107 DLL inp 3: 1 - DLL : 3 inpvec : 1 brake torque [nm] + 108 DLL inp 4: 1 - DLL : 4 inpvec : 1 pitch 1 + 109 DLL inp 4: 2 - DLL : 4 inpvec : 2 pitch 2 + 110 DLL inp 4: 3 - DLL : 4 inpvec : 3 pitch 3 + 111 DLL inp 5: 1 - DLL : 5 inpvec : 1 bltip tow min d [m] + 112 Constant - Constant value + 113 Mx coo: blade1 kNm MomentMx Mbdy:blade1 nodenr: 1 coo: blade1 m blade1 root + 114 My coo: blade1 kNm MomentMy Mbdy:blade1 nodenr: 1 coo: blade1 m blade1 root + 115 Mz coo: blade1 kNm MomentMz Mbdy:blade1 nodenr: 1 coo: blade1 m blade1 root + 116 Mx coo: blade1 kNm MomentMx Mbdy:blade1 nodenr: 3 coo: blade1 m blade1 1.596m + 117 My coo: blade1 kNm MomentMy Mbdy:blade1 nodenr: 3 coo: blade1 m blade1 1.596m + 118 Mz coo: blade1 kNm MomentMz Mbdy:blade1 nodenr: 3 coo: blade1 m blade1 1.596m + 119 Mx coo: blade1 kNm MomentMx Mbdy:blade1 nodenr: 5 coo: blade1 m blade1 3.486m + 120 My coo: blade1 kNm MomentMy Mbdy:blade1 nodenr: 5 coo: blade1 m blade1 3.486m + 121 Mz coo: blade1 kNm MomentMz Mbdy:blade1 nodenr: 5 coo: blade1 m blade1 3.486m + 122 Mx coo: blade1 kNm MomentMx Mbdy:blade1 nodenr: 9 coo: blade1 m blade1 7.618m + 123 My coo: blade1 kNm MomentMy Mbdy:blade1 nodenr: 9 coo: blade1 m blade1 7.618m + 124 Mz coo: blade1 kNm MomentMz Mbdy:blade1 nodenr: 9 coo: blade1 m blade1 7.618m + 125 Mx coo: blade1 kNm MomentMx Mbdy:blade1 nodenr: 10 coo: blade1 m blade1 8.598m + 126 My coo: blade1 kNm MomentMy Mbdy:blade1 nodenr: 10 coo: blade1 m blade1 8.598m + 127 Mz coo: blade1 kNm MomentMz Mbdy:blade1 nodenr: 10 coo: blade1 m blade1 8.598m + 128 Mx coo: blade1 kNm MomentMx Mbdy:blade1 nodenr: 13 coo: blade1 m blade1 11.125m + 129 My coo: blade1 kNm MomentMy Mbdy:blade1 nodenr: 13 coo: blade1 m blade1 11.125m + 130 Mz coo: blade1 kNm MomentMz Mbdy:blade1 nodenr: 13 coo: blade1 m blade1 11.125m + 131 Mx coo: blade1 kNm MomentMx Mbdy:blade1 nodenr: 17 coo: blade1 m blade1 13.352m + 132 My coo: blade1 kNm MomentMy Mbdy:blade1 nodenr: 17 coo: blade1 m blade1 13.352m + 133 Mz coo: blade1 kNm MomentMz Mbdy:blade1 nodenr: 17 coo: blade1 m blade1 13.352m + 134 Mx coo: local kNm MomentMx Mbdy:blade1 nodenr: 1 coo: local m blade1_local root + 135 My coo: local kNm MomentMy Mbdy:blade1 nodenr: 1 coo: local m blade1_local root + 136 Mz coo: local kNm MomentMz Mbdy:blade1 nodenr: 1 coo: local m blade1_local root + 137 Mx coo: local kNm MomentMx Mbdy:blade1 nodenr: 3 coo: local m blade1_local 1.596m + 138 My coo: local kNm MomentMy Mbdy:blade1 nodenr: 3 coo: local m blade1_local 1.596m + 139 Mz coo: local kNm MomentMz Mbdy:blade1 nodenr: 3 coo: local m blade1_local 1.596m + 140 Mx coo: local kNm MomentMx Mbdy:blade1 nodenr: 5 coo: local m blade1_local 3.486m + 141 My coo: local kNm MomentMy Mbdy:blade1 nodenr: 5 coo: local m blade1_local 3.486m + 142 Mz coo: local kNm MomentMz Mbdy:blade1 nodenr: 5 coo: local m blade1_local 3.486m + 143 Mx coo: local kNm MomentMx Mbdy:blade1 nodenr: 9 coo: local m blade1_local 7.618m + 144 My coo: local kNm MomentMy Mbdy:blade1 nodenr: 9 coo: local m blade1_local 7.618m + 145 Mz coo: local kNm MomentMz Mbdy:blade1 nodenr: 9 coo: local m blade1_local 7.618m + 146 Mx coo: local kNm MomentMx Mbdy:blade1 nodenr: 10 coo: local m blade1_local 8.598m + 147 My coo: local kNm MomentMy Mbdy:blade1 nodenr: 10 coo: local m blade1_local 8.598m + 148 Mz coo: local kNm MomentMz Mbdy:blade1 nodenr: 10 coo: local m blade1_local 8.598m + 149 Mx coo: local kNm MomentMx Mbdy:blade1 nodenr: 13 coo: local m blade1_local 11.125m + 150 My coo: local kNm MomentMy Mbdy:blade1 nodenr: 13 coo: local m blade1_local 11.125m + 151 Mz coo: local kNm MomentMz Mbdy:blade1 nodenr: 13 coo: local m blade1_local 11.125m + 152 Mx coo: local kNm MomentMx Mbdy:blade1 nodenr: 17 coo: local m blade1_local 13.352m + 153 My coo: local kNm MomentMy Mbdy:blade1 nodenr: 17 coo: local m blade1_local 13.352m + 154 Mz coo: local kNm MomentMz Mbdy:blade1 nodenr: 17 coo: local m blade1_local 13.352m + 155 Fx coo: blade1 kN Force Fx Mbdy:blade1 nodenr: 1 coo: blade1 f blade 1 root + 156 Fy coo: blade1 kN Force Fy Mbdy:blade1 nodenr: 1 coo: blade1 f blade 1 root + 157 Fz coo: blade1 kN Force Fz Mbdy:blade1 nodenr: 1 coo: blade1 f blade 1 root + 158 Fx coo: blade1 kN Force Fx Mbdy:blade1 nodenr: 3 coo: blade1 f blade 1 1.596m + 159 Fy coo: blade1 kN Force Fy Mbdy:blade1 nodenr: 3 coo: blade1 f blade 1 1.596m + 160 Fz coo: blade1 kN Force Fz Mbdy:blade1 nodenr: 3 coo: blade1 f blade 1 1.596m + 161 Fx coo: blade1 kN Force Fx Mbdy:blade1 nodenr: 5 coo: blade1 f blade 1 3.486m + 162 Fy coo: blade1 kN Force Fy Mbdy:blade1 nodenr: 5 coo: blade1 f blade 1 3.486m + 163 Fz coo: blade1 kN Force Fz Mbdy:blade1 nodenr: 5 coo: blade1 f blade 1 3.486m + 164 Fx coo: blade1 kN Force Fx Mbdy:blade1 nodenr: 9 coo: blade1 f blade 1 7.618m + 165 Fy coo: blade1 kN Force Fy Mbdy:blade1 nodenr: 9 coo: blade1 f blade 1 7.618m + 166 Fz coo: blade1 kN Force Fz Mbdy:blade1 nodenr: 9 coo: blade1 f blade 1 7.618m + 167 Fx coo: blade1 kN Force Fx Mbdy:blade1 nodenr: 10 coo: blade1 f blade 1 8.598m + 168 Fy coo: blade1 kN Force Fy Mbdy:blade1 nodenr: 10 coo: blade1 f blade 1 8.598m + 169 Fz coo: blade1 kN Force Fz Mbdy:blade1 nodenr: 10 coo: blade1 f blade 1 8.598m + 170 Fx coo: blade1 kN Force Fx Mbdy:blade1 nodenr: 13 coo: blade1 f blade 1 11.125m + 171 Fy coo: blade1 kN Force Fy Mbdy:blade1 nodenr: 13 coo: blade1 f blade 1 11.125m + 172 Fz coo: blade1 kN Force Fz Mbdy:blade1 nodenr: 13 coo: blade1 f blade 1 11.125m + 173 Fx coo: blade1 kN Force Fx Mbdy:blade1 nodenr: 17 coo: blade1 f blade 1 13.352m + 174 Fy coo: blade1 kN Force Fy Mbdy:blade1 nodenr: 17 coo: blade1 f blade 1 13.352m + 175 Fz coo: blade1 kN Force Fz Mbdy:blade1 nodenr: 17 coo: blade1 f blade 1 13.352m + 176 Fx coo: local kN Force Fx Mbdy:blade1 nodenr: 1 coo: local f blade1_local root + 177 Fy coo: local kN Force Fy Mbdy:blade1 nodenr: 1 coo: local f blade1_local root + 178 Fz coo: local kN Force Fz Mbdy:blade1 nodenr: 1 coo: local f blade1_local root + 179 Fx coo: local kN Force Fx Mbdy:blade1 nodenr: 3 coo: local f blade1_local 1.596m + 180 Fy coo: local kN Force Fy Mbdy:blade1 nodenr: 3 coo: local f blade1_local 1.596m + 181 Fz coo: local kN Force Fz Mbdy:blade1 nodenr: 3 coo: local f blade1_local 1.596m + 182 Fx coo: local kN Force Fx Mbdy:blade1 nodenr: 5 coo: local f blade1_local 3.486m + 183 Fy coo: local kN Force Fy Mbdy:blade1 nodenr: 5 coo: local f blade1_local 3.486m + 184 Fz coo: local kN Force Fz Mbdy:blade1 nodenr: 5 coo: local f blade1_local 3.486m + 185 Fx coo: local kN Force Fx Mbdy:blade1 nodenr: 9 coo: local f blade1_local 7.618m + 186 Fy coo: local kN Force Fy Mbdy:blade1 nodenr: 9 coo: local f blade1_local 7.618m + 187 Fz coo: local kN Force Fz Mbdy:blade1 nodenr: 9 coo: local f blade1_local 7.618m + 188 Fx coo: local kN Force Fx Mbdy:blade1 nodenr: 10 coo: local f blade1_local 8.598m + 189 Fy coo: local kN Force Fy Mbdy:blade1 nodenr: 10 coo: local f blade1_local 8.598m + 190 Fz coo: local kN Force Fz Mbdy:blade1 nodenr: 10 coo: local f blade1_local 8.598m + 191 Fx coo: local kN Force Fx Mbdy:blade1 nodenr: 13 coo: local f blade1_local 11.125m + 192 Fy coo: local kN Force Fy Mbdy:blade1 nodenr: 13 coo: local f blade1_local 11.125m + 193 Fz coo: local kN Force Fz Mbdy:blade1 nodenr: 13 coo: local f blade1_local 11.125m + 194 Fx coo: local kN Force Fx Mbdy:blade1 nodenr: 17 coo: local f blade1_local 13.352m + 195 Fy coo: local kN Force Fy Mbdy:blade1 nodenr: 17 coo: local f blade1_local 13.352m + 196 Fz coo: local kN Force Fz Mbdy:blade1 nodenr: 17 coo: local f blade1_local 13.352m + 197 Fx coo: blade2 kN Force Fx Mbdy:blade2 nodenr: 1 coo: blade2 f blade 2 root + 198 Fy coo: blade2 kN Force Fy Mbdy:blade2 nodenr: 1 coo: blade2 f blade 2 root + 199 Fz coo: blade2 kN Force Fz Mbdy:blade2 nodenr: 1 coo: blade2 f blade 2 root + 200 Fx coo: blade3 kN Force Fx Mbdy:blade3 nodenr: 1 coo: blade3 f blade 3 root + 201 Fy coo: blade3 kN Force Fy Mbdy:blade3 nodenr: 1 coo: blade3 f blade 3 root + 202 Fz coo: blade3 kN Force Fz Mbdy:blade3 nodenr: 1 coo: blade3 f blade 3 root + 203 Mx coo: blade2 kNm MomentMx Mbdy:blade2 nodenr: 1 coo: blade2 m blade 2 root + 204 My coo: blade2 kNm MomentMy Mbdy:blade2 nodenr: 1 coo: blade2 m blade 2 root + 205 Mz coo: blade2 kNm MomentMz Mbdy:blade2 nodenr: 1 coo: blade2 m blade 2 root + 206 Mx coo: blade2 kNm MomentMx Mbdy:blade2 nodenr: 10 coo: blade2 m blade 2 8.598m + 207 My coo: blade2 kNm MomentMy Mbdy:blade2 nodenr: 10 coo: blade2 m blade 2 8.598m + 208 Mz coo: blade2 kNm MomentMz Mbdy:blade2 nodenr: 10 coo: blade2 m blade 2 8.598m + 209 Mx coo: blade3 kNm MomentMx Mbdy:blade3 nodenr: 1 coo: blade3 m blade 3 root + 210 My coo: blade3 kNm MomentMy Mbdy:blade3 nodenr: 1 coo: blade3 m blade 3 root + 211 Mz coo: blade3 kNm MomentMz Mbdy:blade3 nodenr: 1 coo: blade3 m blade 3 root + 212 Mx coo: blade3 kNm MomentMx Mbdy:blade3 nodenr: 10 coo: blade3 m blade 3 8.598m + 213 My coo: blade3 kNm MomentMy Mbdy:blade3 nodenr: 10 coo: blade3 m blade 3 8.598m + 214 Mz coo: blade3 kNm MomentMz Mbdy:blade3 nodenr: 10 coo: blade3 m blade 3 8.598m + 215 Harmonic - Harmonic sinus function + 216 Harmonic - Harmonic sinus function + 217 Constant - Constant value +________________________________________________________________________________________________________________________ +Scale factors: + 2.18750E-02 + 1.12499E-02 + 1.11694E-03 + 1.00000E+00 + 1.00000E+00 + 1.00000E+00 + 1.00000E+00 + 1.00000E+00 + 1.00000E+00 + 1.16962E-04 + 7.20270E-04 + 2.67446E-03 + 5.49637E-04 + 8.62044E-05 + 2.52680E-04 + 7.90440E-05 + 8.62188E-05 + 2.53421E-04 + 8.20404E-05 + 9.27272E-05 + 2.71635E-04 + 9.33155E-05 + 1.16371E-04 + 2.12015E-04 + 8.17627E-05 + 2.53947E-04 + 1.62670E-02 + 1.47929E-03 + 9.89036E-04 + 2.26919E-03 + 5.71132E-04 + 9.18130E-04 + 1.05471E-03 + 1.17262E-03 + 6.02277E-04 + 2.09855E-03 + 1.06715E-03 + 1.24011E-05 + 2.05293E-03 + 1.01794E-03 + 1.24568E-05 + 2.04933E-03 + 1.01820E-03 + 1.30831E-05 + 1.12572E-07 + 1.04733E-06 + 9.83107E-04 + 5.91110E-06 + 1.36850E-05 + 2.81030E-06 + 3.48182E-08 + 3.75528E-07 + 5.19992E-04 + 2.28345E-06 + 1.60841E-05 + 4.46886E-04 + 2.20456E-06 + 1.58416E-05 + 4.46885E-04 + 2.32338E-06 + 1.61758E-05 + 4.46885E-04 + 4.68802E-04 + 9.47721E-05 + 1.45499E-03 + 4.68795E-04 + 9.46092E-05 + 1.45497E-03 + 4.68791E-04 + 9.45865E-05 + 1.45496E-03 + 4.68802E-04 + 9.47721E-05 + 1.45499E-03 + 1.60892E-03 + 1.50335E-07 + 6.25610E-05 + 9.87555E-04 + 1.38322E-04 + 2.94064E-04 + 9.35080E-05 + 2.79788E-04 + 2.98136E-04 + 2.79592E-04 + 4.02508E-05 + 4.17197E-05 + 4.03574E-05 + 1.65434E-03 + 5.62494E-03 + 4.96182E-01 + 1.00000E+00 + 1.00000E+00 + 1.00000E+00 + 1.00000E+00 + 1.00000E+00 + 1.00000E+00 + 1.00000E+00 + 5.78555E-06 + 5.25617E-01 + 1.85698E+00 + 5.03154E-01 + 2.24623E-02 + 1.96714E-03 + 6.02235E-01 + 2.95000E-05 + 1.00000E+00 + 1.00000E+00 + 1.00000E+00 + 1.00000E+00 + 1.00000E+00 + 4.39323E-04 + 3.12500E-05 + 2.09646E-03 + 1.08758E-03 + 8.82805E-06 + 1.70852E-03 + 7.82533E-04 + 1.08908E-05 + 1.26920E-03 + 5.22462E-04 + 7.48640E-06 + 4.76656E-04 + 1.46344E-04 + 5.11887E-06 + 3.35911E-04 + 9.66411E-05 + 4.33265E-06 + 9.17069E-05 + 2.14074E-05 + 1.96457E-06 + 5.13476E-06 + 9.76989E-07 + 3.68726E-07 + 2.12883E-03 + 9.15892E-04 + 2.84789E-05 + 1.52509E-03 + 1.25324E-03 + 1.00141E-05 + 1.27769E-03 + 5.15806E-04 + 8.49035E-06 + 4.79445E-04 + 1.29987E-04 + 4.88325E-06 + 3.37635E-04 + 8.74365E-05 + 3.92248E-06 + 9.19368E-05 + 1.99250E-05 + 1.82094E-06 + 5.07849E-06 + 1.28714E-06 + 3.99788E-07 + 1.97016E-04 + 2.55105E-04 + 1.36558E-03 + 1.60239E-04 + 2.50353E-04 + 1.23084E-03 + 1.25299E-04 + 2.35173E-04 + 1.06113E-03 + 5.79355E-05 + 1.64112E-04 + 5.51456E-04 + 4.48024E-05 + 1.40202E-04 + 4.26721E-04 + 1.76842E-05 + 7.35757E-05 + 1.73270E-04 + 2.56166E-06 + 1.49293E-05 + 2.19204E-05 + 1.79881E-04 + 2.41006E-04 + 1.36778E-03 + 2.22201E-04 + 2.51740E-04 + 1.23030E-03 + 1.20893E-04 + 2.33446E-04 + 1.06164E-03 + 5.10718E-05 + 1.55743E-04 + 5.52344E-04 + 3.97026E-05 + 1.33467E-04 + 4.27522E-04 + 1.55107E-05 + 6.48742E-05 + 1.74571E-04 + 3.27825E-06 + 1.33897E-05 + 2.22372E-05 + 1.93884E-04 + 2.50887E-04 + 1.36085E-03 + 1.93945E-04 + 2.52347E-04 + 1.36496E-03 + 2.05070E-03 + 1.03849E-03 + 8.47828E-06 + 3.35416E-04 + 9.16257E-05 + 4.48243E-06 + 2.04719E-03 + 1.03837E-03 + 9.19478E-06 + 3.43366E-04 + 9.45280E-05 + 4.68222E-06 + 6.25000E-05 + 6.25000E-05 + 1.56250E-04 diff --git a/wetb/hawc2/tests/test_files/hawc2io/hawc2bin_chantest_3.sel b/wetb/hawc2/tests/test_files/hawc2io/hawc2bin_chantest_3.sel new file mode 100644 index 0000000000000000000000000000000000000000..fed018b2da96a9e7fbb1503737200482ac841ee3 --- /dev/null +++ b/wetb/hawc2/tests/test_files/hawc2io/hawc2bin_chantest_3.sel @@ -0,0 +1,602 @@ +________________________________________________________________________________________________________________________ + Version ID : HAWC2MB 12.4 + Time : 18:10:14 + Date : 29:06.2017 +________________________________________________________________________________________________________________________ + Result file : ./res/dlc12_iec61400-1ed3/dlc12_wsp04_wdir000_s1001.dat +________________________________________________________________________________________________________________________ + Scans Channels Time [sec] Format + 30000 294 600.000 BINARY + + Channel Variable Description + + 1 Time s Time + 2 bea1 angle deg shaft_rot angle + 3 bea1 angle_speed rpm shaft_rot angle speed + 4 bea2 angle deg pitch1 angle + 5 bea2 angle_speed deg/s pitch1 angle speed + 6 bea2 angle deg pitch2 angle + 7 bea2 angle_speed deg/s pitch2 angle speed + 8 bea2 angle deg pitch3 angle + 9 bea2 angle_speed deg/s pitch3 angle speed + 10 Omega rad/s Rotor speed + 11 Ae rot. torque kNm Aero rotor torque + 12 Ae rot. power kW Aero rotor power + 13 Ae rot. thrust kN Aero rotor thrust + 14 WSP gl. coo.,Vx m/s Free wind speed Vx, gl. coo, of gl. pos 0.00, 0.00,-119.00 + 15 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos 0.00, 0.00,-119.00 + 16 WSP gl. coo.,Vz m/s Free wind speed Vz, gl. coo, of gl. pos 0.00, 0.00,-119.00 + 17 Mx coo: shaft_nonrotate kNm MomentMx Mbdy:shaft nodenr: 4 coo: shaft_nonrotate non rotating shaft tip + 18 My coo: shaft_nonrotate kNm MomentMy Mbdy:shaft nodenr: 4 coo: shaft_nonrotate non rotating shaft tip + 19 Mz coo: shaft_nonrotate kNm MomentMz Mbdy:shaft nodenr: 4 coo: shaft_nonrotate non rotating shaft tip + 20 Fx coo: shaft_nonrotate kN Force Fx Mbdy:shaft nodenr: 4 coo: shaft_nonrotate non rotating shaft tip + 21 Fy coo: shaft_nonrotate kN Force Fy Mbdy:shaft nodenr: 4 coo: shaft_nonrotate non rotating shaft tip + 22 Fz coo: shaft_nonrotate kN Force Fz Mbdy:shaft nodenr: 4 coo: shaft_nonrotate non rotating shaft tip + 23 Mx coo: tower kNm MomentMx Mbdy:tower nodenr: 1 coo: tower tower base + 24 My coo: tower kNm MomentMy Mbdy:tower nodenr: 1 coo: tower tower base + 25 Mz coo: tower kNm MomentMz Mbdy:tower nodenr: 1 coo: tower tower base + 26 Mx coo: tower kNm MomentMx Mbdy:tower nodenr: 20 coo: tower tower yaw bearing + 27 My coo: tower kNm MomentMy Mbdy:tower nodenr: 20 coo: tower tower yaw bearing + 28 Mz coo: tower kNm MomentMz Mbdy:tower nodenr: 20 coo: tower tower yaw bearing + 29 Mx coo: shaft kNm MomentMx Mbdy:shaft nodenr: 4 coo: shaft main bearing + 30 My coo: shaft kNm MomentMy Mbdy:shaft nodenr: 4 coo: shaft main bearing + 31 Mz coo: shaft kNm MomentMz Mbdy:shaft nodenr: 4 coo: shaft main bearing + 32 Mx coo: blade1 kNm MomentMx Mbdy:blade1 nodenr: 1 coo: blade1 blade 1 root + 33 My coo: blade1 kNm MomentMy Mbdy:blade1 nodenr: 1 coo: blade1 blade 1 root + 34 Mz coo: blade1 kNm MomentMz Mbdy:blade1 nodenr: 1 coo: blade1 blade 1 root + 35 Mx coo: blade2 kNm MomentMx Mbdy:blade2 nodenr: 1 coo: blade2 blade 2 root + 36 My coo: blade2 kNm MomentMy Mbdy:blade2 nodenr: 1 coo: blade2 blade 2 root + 37 Mz coo: blade2 kNm MomentMz Mbdy:blade2 nodenr: 1 coo: blade2 blade 2 root + 38 Mx coo: blade3 kNm MomentMx Mbdy:blade3 nodenr: 1 coo: blade3 blade 3 root + 39 My coo: blade3 kNm MomentMy Mbdy:blade3 nodenr: 1 coo: blade3 blade 3 root + 40 Mz coo: blade3 kNm MomentMz Mbdy:blade3 nodenr: 1 coo: blade3 blade 3 root + 41 Mx coo: local kNm MomentMx Mbdy:blade1 nodenr: 3 coo: local + 42 My coo: local kNm MomentMy Mbdy:blade1 nodenr: 3 coo: local + 43 Mz coo: local kNm MomentMz Mbdy:blade1 nodenr: 3 coo: local + 44 Mx coo: local kNm MomentMx Mbdy:blade1 nodenr: 4 coo: local + 45 My coo: local kNm MomentMy Mbdy:blade1 nodenr: 4 coo: local + 46 Mz coo: local kNm MomentMz Mbdy:blade1 nodenr: 4 coo: local + 47 Mx coo: local kNm MomentMx Mbdy:blade1 nodenr: 5 coo: local + 48 My coo: local kNm MomentMy Mbdy:blade1 nodenr: 5 coo: local + 49 Mz coo: local kNm MomentMz Mbdy:blade1 nodenr: 5 coo: local + 50 Mx coo: local kNm MomentMx Mbdy:blade1 nodenr: 6 coo: local + 51 My coo: local kNm MomentMy Mbdy:blade1 nodenr: 6 coo: local + 52 Mz coo: local kNm MomentMz Mbdy:blade1 nodenr: 6 coo: local + 53 Mx coo: local kNm MomentMx Mbdy:blade1 nodenr: 7 coo: local + 54 My coo: local kNm MomentMy Mbdy:blade1 nodenr: 7 coo: local + 55 Mz coo: local kNm MomentMz Mbdy:blade1 nodenr: 7 coo: local + 56 Mx coo: local kNm MomentMx Mbdy:blade1 nodenr: 8 coo: local + 57 My coo: local kNm MomentMy Mbdy:blade1 nodenr: 8 coo: local + 58 Mz coo: local kNm MomentMz Mbdy:blade1 nodenr: 8 coo: local + 59 Mx coo: local kNm MomentMx Mbdy:blade1 nodenr: 9 coo: local + 60 My coo: local kNm MomentMy Mbdy:blade1 nodenr: 9 coo: local + 61 Mz coo: local kNm MomentMz Mbdy:blade1 nodenr: 9 coo: local + 62 Mx coo: local kNm MomentMx Mbdy:blade1 nodenr: 10 coo: local + 63 My coo: local kNm MomentMy Mbdy:blade1 nodenr: 10 coo: local + 64 Mz coo: local kNm MomentMz Mbdy:blade1 nodenr: 10 coo: local + 65 Mx coo: local kNm MomentMx Mbdy:blade1 nodenr: 11 coo: local + 66 My coo: local kNm MomentMy Mbdy:blade1 nodenr: 11 coo: local + 67 Mz coo: local kNm MomentMz Mbdy:blade1 nodenr: 11 coo: local + 68 Mx coo: local kNm MomentMx Mbdy:blade1 nodenr: 12 coo: local + 69 My coo: local kNm MomentMy Mbdy:blade1 nodenr: 12 coo: local + 70 Mz coo: local kNm MomentMz Mbdy:blade1 nodenr: 12 coo: local + 71 Mx coo: local kNm MomentMx Mbdy:blade1 nodenr: 13 coo: local + 72 My coo: local kNm MomentMy Mbdy:blade1 nodenr: 13 coo: local + 73 Mz coo: local kNm MomentMz Mbdy:blade1 nodenr: 13 coo: local + 74 Mx coo: local kNm MomentMx Mbdy:blade1 nodenr: 14 coo: local + 75 My coo: local kNm MomentMy Mbdy:blade1 nodenr: 14 coo: local + 76 Mz coo: local kNm MomentMz Mbdy:blade1 nodenr: 14 coo: local + 77 Mx coo: local kNm MomentMx Mbdy:blade1 nodenr: 15 coo: local + 78 My coo: local kNm MomentMy Mbdy:blade1 nodenr: 15 coo: local + 79 Mz coo: local kNm MomentMz Mbdy:blade1 nodenr: 15 coo: local + 80 Mx coo: local kNm MomentMx Mbdy:blade1 nodenr: 16 coo: local + 81 My coo: local kNm MomentMy Mbdy:blade1 nodenr: 16 coo: local + 82 Mz coo: local kNm MomentMz Mbdy:blade1 nodenr: 16 coo: local + 83 Mx coo: local kNm MomentMx Mbdy:blade1 nodenr: 17 coo: local + 84 My coo: local kNm MomentMy Mbdy:blade1 nodenr: 17 coo: local + 85 Mz coo: local kNm MomentMz Mbdy:blade1 nodenr: 17 coo: local + 86 Mx coo: local kNm MomentMx Mbdy:blade1 nodenr: 18 coo: local + 87 My coo: local kNm MomentMy Mbdy:blade1 nodenr: 18 coo: local + 88 Mz coo: local kNm MomentMz Mbdy:blade1 nodenr: 18 coo: local + 89 Mx coo: local kNm MomentMx Mbdy:blade1 nodenr: 19 coo: local + 90 My coo: local kNm MomentMy Mbdy:blade1 nodenr: 19 coo: local + 91 Mz coo: local kNm MomentMz Mbdy:blade1 nodenr: 19 coo: local + 92 Mx coo: local kNm MomentMx Mbdy:blade1 nodenr: 20 coo: local + 93 My coo: local kNm MomentMy Mbdy:blade1 nodenr: 20 coo: local + 94 Mz coo: local kNm MomentMz Mbdy:blade1 nodenr: 20 coo: local + 95 Mx coo: local kNm MomentMx Mbdy:blade1 nodenr: 21 coo: local + 96 My coo: local kNm MomentMy Mbdy:blade1 nodenr: 21 coo: local + 97 Mz coo: local kNm MomentMz Mbdy:blade1 nodenr: 21 coo: local + 98 Mx coo: local kNm MomentMx Mbdy:blade1 nodenr: 22 coo: local + 99 My coo: local kNm MomentMy Mbdy:blade1 nodenr: 22 coo: local + 100 Mz coo: local kNm MomentMz Mbdy:blade1 nodenr: 22 coo: local + 101 Mx coo: local kNm MomentMx Mbdy:blade1 nodenr: 23 coo: local + 102 My coo: local kNm MomentMy Mbdy:blade1 nodenr: 23 coo: local + 103 Mz coo: local kNm MomentMz Mbdy:blade1 nodenr: 23 coo: local + 104 Mx coo: local kNm MomentMx Mbdy:blade1 nodenr: 24 coo: local + 105 My coo: local kNm MomentMy Mbdy:blade1 nodenr: 24 coo: local + 106 Mz coo: local kNm MomentMz Mbdy:blade1 nodenr: 24 coo: local + 107 Mx coo: local kNm MomentMx Mbdy:blade1 nodenr: 25 coo: local + 108 My coo: local kNm MomentMy Mbdy:blade1 nodenr: 25 coo: local + 109 Mz coo: local kNm MomentMz Mbdy:blade1 nodenr: 25 coo: local + 110 Mx coo: local kNm MomentMx Mbdy:blade1 nodenr: 26 coo: local + 111 My coo: local kNm MomentMy Mbdy:blade1 nodenr: 26 coo: local + 112 Mz coo: local kNm MomentMz Mbdy:blade1 nodenr: 26 coo: local + 113 Mx coo: local kNm MomentMx Mbdy:blade1 nodenr: 27 coo: local + 114 My coo: local kNm MomentMy Mbdy:blade1 nodenr: 27 coo: local + 115 Mz coo: local kNm MomentMz Mbdy:blade1 nodenr: 27 coo: local + 116 State pos x coo: global m State pos x Mbdy:tower E-nr: 19 Z-rel:1.00 coo: global tower top fa displ + 117 State pos y coo: global m State pos y Mbdy:tower E-nr: 19 Z-rel:1.00 coo: global tower top ss displ + 118 State acc x coo: global m/s^2 State acc x Mbdy:tower E-nr: 19 Z-rel:1.00 coo: global tower top fa acc + 119 State acc y coo: global m/s^2 State acc y Mbdy:tower E-nr: 19 Z-rel:1.00 coo: global tower top ss acc + 120 State pos x coo: global m State pos x Mbdy:blade1 E-nr: 26 Z-rel:1.00 coo: global gl blade 1 tip pos + 121 State pos y coo: global m State pos y Mbdy:blade1 E-nr: 26 Z-rel:1.00 coo: global gl blade 1 tip pos + 122 State pos z coo: global m State pos z Mbdy:blade1 E-nr: 26 Z-rel:1.00 coo: global gl blade 1 tip pos + 123 State pos x coo: global m State pos x Mbdy:blade2 E-nr: 26 Z-rel:1.00 coo: global gl blade 2 tip pos + 124 State pos y coo: global m State pos y Mbdy:blade2 E-nr: 26 Z-rel:1.00 coo: global gl blade 2 tip pos + 125 State pos z coo: global m State pos z Mbdy:blade2 E-nr: 26 Z-rel:1.00 coo: global gl blade 2 tip pos + 126 State pos x coo: global m State pos x Mbdy:blade3 E-nr: 26 Z-rel:1.00 coo: global gl blade 3 tip pos + 127 State pos y coo: global m State pos y Mbdy:blade3 E-nr: 26 Z-rel:1.00 coo: global gl blade 3 tip pos + 128 State pos z coo: global m State pos z Mbdy:blade3 E-nr: 26 Z-rel:1.00 coo: global gl blade 3 tip pos + 129 State pos x coo: blade1 m State pos x Mbdy:blade1 E-nr: 26 Z-rel:1.00 coo: blade1 blade 1 tip pos + 130 State pos y coo: blade1 m State pos y Mbdy:blade1 E-nr: 26 Z-rel:1.00 coo: blade1 blade 1 tip pos + 131 State pos z coo: blade1 m State pos z Mbdy:blade1 E-nr: 26 Z-rel:1.00 coo: blade1 blade 1 tip pos + 132 State pos x coo: blade2 m State pos x Mbdy:blade2 E-nr: 26 Z-rel:1.00 coo: blade2 blade 2 tip pos + 133 State pos y coo: blade2 m State pos y Mbdy:blade2 E-nr: 26 Z-rel:1.00 coo: blade2 blade 2 tip pos + 134 State pos z coo: blade2 m State pos z Mbdy:blade2 E-nr: 26 Z-rel:1.00 coo: blade2 blade 2 tip pos + 135 State pos x coo: blade3 m State pos x Mbdy:blade3 E-nr: 26 Z-rel:1.00 coo: blade3 blade 3 tip pos + 136 State pos y coo: blade3 m State pos y Mbdy:blade3 E-nr: 26 Z-rel:1.00 coo: blade3 blade 3 tip pos + 137 State pos z coo: blade3 m State pos z Mbdy:blade3 E-nr: 26 Z-rel:1.00 coo: blade3 blade 3 tip pos + 138 State pos x coo: global m State pos x Mbdy:tower E-nr: 5 Z-rel:0.00 coo: global + 139 State pos y coo: global m State pos y Mbdy:tower E-nr: 5 Z-rel:0.00 coo: global + 140 State pos z coo: global m State pos z Mbdy:tower E-nr: 5 Z-rel:0.00 coo: global + 141 Tors_e, R= 45.2 deg Aero elastic torsion of blade 1 at radius 45.25 + 142 Tors_e, R= 58.0 deg Aero elastic torsion of blade 1 at radius 58.04 + 143 Tors_e, R= 70.3 deg Aero elastic torsion of blade 1 at radius 70.32 + 144 Tors_e, R= 81.3 deg Aero elastic torsion of blade 1 at radius 81.26 + 145 Tors_e, R= 83.7 deg Aero elastic torsion of blade 1 at radius 83.71 + 146 Tors_e, R= 88.2 deg Aero elastic torsion of blade 1 at radius 88.17 + 147 Tors_e, R= 92.0 deg Aero elastic torsion of blade 1 at radius 92.01 + 148 Tors_e, R= 96.5 deg Aero elastic torsion of blade 1 at radius 96.45 + 149 Tors_e, R= 98.5 deg Aero elastic torsion of blade 1 at radius 98.47 + 150 Tors_e, R=100.1 deg Aero elastic torsion of blade 1 at radius 100.11 + 151 WSP Vx, glco, R= 73.2 m/s Wind speed Vx of blade 1 at radius 73.21, global coo. + 152 WSP Vy, glco, R= 73.2 m/s Wind speed Vy of blade 1 at radius 73.21, global coo. + 153 WSP Vz, glco, R= 73.2 m/s Wind speed Vz of blade 1 at radius 73.21, global coo. + 154 Alfa, R= 73.2 deg Angle of attack of blade 1 at radius 73.21 + 155 Alfa, R= 73.2 deg Angle of attack of blade 2 at radius 73.21 + 156 Alfa, R= 73.2 deg Angle of attack of blade 3 at radius 73.21 + 157 Cl, R= 72.5 deg Cl of blade 1 at radius 73.21 + 158 Cl, R= 72.5 deg Cl of blade 2 at radius 73.21 + 159 Cl, R= 72.5 deg Cl of blade 3 at radius 73.21 + 160 Cd, R= 72.5 deg Cd of blade 1 at radius 73.21 + 161 Cd, R= 72.5 deg Cd of blade 2 at radius 73.21 + 162 Cd, R= 72.5 deg Cd of blade 3 at radius 73.21 + 163 DLL inp 1: 1 - DLL : 1 inpvec : 1 generator torque reference [nm] + 164 DLL inp 1: 2 - DLL : 1 inpvec : 2 pitch angle reference of blade 1 [rad] + 165 DLL inp 1: 3 - DLL : 1 inpvec : 3 pitch angle reference of blade 2 [rad] + 166 DLL inp 1: 4 - DLL : 1 inpvec : 4 pitch angle reference of blade 3 [rad] + 167 DLL inp 1: 14 - DLL : 1 inpvec : 14 torque limit switch based on pitch [-] + 168 DLL inp 2: 1 - DLL : 2 inpvec : 1 mgen lss [nm] + 169 DLL inp 2: 2 - DLL : 2 inpvec : 2 pelec w + 170 DLL inp 2: 3 - DLL : 2 inpvec : 3 mframe + 171 DLL inp 2: 4 - DLL : 2 inpvec : 4 mgen hss + 172 DLL inp 2: 5 - DLL : 2 inpvec : 5 generator pmech kw + 173 DLL inp 2: 6 - DLL : 2 inpvec : 6 filtered gen speed + 174 DLL inp 2: 7 - DLL : 2 inpvec : 7 resulting eff + 175 DLL inp 2: 8 - DLL : 2 inpvec : 8 grid flag + 176 DLL inp 5: 1 - DLL : 5 inpvec : 1 bltip tow min d [m] + 177 WSP Vx, glco, R= 64.3 m/s Wind speed Vx of blade 1 at radius 64.30, global coo. + 178 WSP Vy, glco, R= 64.3 m/s Wind speed Vy of blade 1 at radius 64.30, global coo. + 179 WSP Vz, glco, R= 64.3 m/s Wind speed Vz of blade 1 at radius 64.30, global coo. + 180 Ae intfrc Fx, rpco, R= 0.0 kN Aero int. force Fx of blade 1 at radius 0.00, RP coo. + 181 Ae intfrc Fy, rpco, R= 0.0 kN Aero int. force Fy of blade 1 at radius 0.00, RP coo. + 182 Ae intmom Mx, rpco, R= 0.0 kNm Aero int. moment Mx of blade 1 at radius 0.00, RP coo. + 183 Ae intmom My, rpco, R= 0.0 kNm Aero int. moment My of blade 1 at radius 0.00, RP coo. + 184 Ae secfrc Fy, R= 25.0 kN/m Aero force Fy of blade 1 at radius 24.11 + 185 Alfa, R= 81.3 deg Angle of attack of blade 1 at radius 81.26 + 186 Alfa, R= 67.3 deg Angle of attack of blade 1 at radius 67.34 + 187 Alfa, R= 32.8 deg Angle of attack of blade 1 at radius 32.77 + 188 Alfa, R= 24.1 deg Angle of attack of blade 1 at radius 24.11 + 189 Cl, R= 82.2 deg Cl of blade 1 at radius 81.26 + 190 Cd, R= 82.2 deg Cd of blade 1 at radius 81.26 + 191 Cl, R= 67.8 deg Cl of blade 1 at radius 67.34 + 192 Cd, R= 67.8 deg Cd of blade 1 at radius 67.34 + 193 Cl, R= 33.0 deg Cl of blade 1 at radius 32.77 + 194 Cd, R= 33.0 deg Cd of blade 1 at radius 32.77 + 195 Cl, R= 24.0 deg Cl of blade 1 at radius 24.11 + 196 Cd, R= 24.0 deg Cd of blade 1 at radius 24.11 + 197 Ae secfrc Fx, R= 88.0 kN/m Aero force Fx of blade 1 at radius 88.17 + 198 Ae secfrc Fy, R= 88.0 kN/m Aero force Fy of blade 1 at radius 88.17 + 199 Ae secfrc Fx, R= 64.0 kN/m Aero force Fx of blade 1 at radius 64.30 + 200 Ae secfrc Fy, R= 64.0 kN/m Aero force Fy of blade 1 at radius 64.30 + 201 Ae secfrc Fx, R= 43.0 kN/m Aero force Fx of blade 1 at radius 42.07 + 202 Ae secfrc Fy, R= 43.0 kN/m Aero force Fy of blade 1 at radius 42.07 + 203 Ae secfrc Fx, R= 30.0 kN/m Aero force Fx of blade 1 at radius 29.79 + 204 Ae secfrc Fy, R= 30.0 kN/m Aero force Fy of blade 1 at radius 29.79 + 205 Induc. Vx, rpco, R= 88.2 m/s Induced wsp Vx of blade 1 at radius 88.17, RP. coo. + 206 Induc. Vy, rpco, R= 88.2 m/s Induced wsp Vy of blade 1 at radius 88.17, RP. coo. + 207 Induc. Vx, rpco, R= 64.3 m/s Induced wsp Vx of blade 1 at radius 64.30, RP. coo. + 208 Induc. Vy, rpco, R= 64.3 m/s Induced wsp Vy of blade 1 at radius 64.30, RP. coo. + 209 Induc. Vx, rpco, R= 42.1 m/s Induced wsp Vx of blade 1 at radius 42.07, RP. coo. + 210 Induc. Vy, rpco, R= 42.1 m/s Induced wsp Vy of blade 1 at radius 42.07, RP. coo. + 211 Induc. Vx, rpco, R= 29.8 m/s Induced wsp Vx of blade 1 at radius 29.79, RP. coo. + 212 Induc. Vy, rpco, R= 29.8 m/s Induced wsp Vy of blade 1 at radius 29.79, RP. coo. + 213 WSP Vy, rpco, R= 88.2 m/s Wind speed Vy of blade 1 at radius 88.17, RP coo. + 214 WSP Vy, rpco, R= 64.3 m/s Wind speed Vy of blade 1 at radius 64.30, RP coo. + 215 WSP Vy, rpco, R= 42.1 m/s Wind speed Vy of blade 1 at radius 42.07, RP coo. + 216 WSP Vy, rpco, R= 29.8 m/s Wind speed Vy of blade 1 at radius 29.79, RP coo. + 217 WSP Vy, rpco, R= 0.9 m/s Wind speed Vy of blade 1 at radius 0.92, RP coo. + 218 WSP Vy, rpco, R= 0.1 m/s Wind speed Vy of blade 1 at radius 0.10, RP coo. + 219 Ae pos x, glco, R= 88.2 m Aero position x of blade 1 at radius 88.17, global coo. + 220 Ae pos y, glco, R= 88.2 m Aero position y of blade 1 at radius 88.17, global coo. + 221 Ae pos z, glco, R= 88.2 m Aero position z of blade 1 at radius 88.17, global coo. + 222 Ae pos x, glco, R= 0.1 m Aero position x of blade 1 at radius 0.10, global coo. + 223 Ae pos y, glco, R= 0.1 m Aero position y of blade 1 at radius 0.10, global coo. + 224 Ae pos z, glco, R= 0.1 m Aero position z of blade 1 at radius 0.10, global coo. + 225 Lift, R= 55.0 kN/m Lift force of blade 1 at radius 54.86 + 226 Lift, R= 35.0 kN/m Lift force of blade 1 at radius 35.81 + 227 Ae pos x, rpco, R= 64.3 m Aero position x of blade 1 at radius 64.30, RP coo. + 228 Ae pos y, rpco, R= 64.3 m Aero position y of blade 1 at radius 64.30, RP coo. + 229 Ae pos z, rpco, R= 64.3 m Aero position z of blade 1 at radius 64.30, RP coo. + 230 Ae pos x, rpco, R= 64.3 m Aero position x of blade 2 at radius 64.30, RP coo. + 231 Ae pos y, rpco, R= 64.3 m Aero position y of blade 2 at radius 64.30, RP coo. + 232 Ae pos z, rpco, R= 64.3 m Aero position z of blade 2 at radius 64.30, RP coo. + 233 Ae pos x, rpco, R= 64.3 m Aero position x of blade 3 at radius 64.30, RP coo. + 234 Ae pos y, rpco, R= 64.3 m Aero position y of blade 3 at radius 64.30, RP coo. + 235 Ae pos z, rpco, R= 64.3 m Aero position z of blade 3 at radius 64.30, RP coo. + 236 Ae vel Vx, rpco, R= 64.3 m/s Aero velocity Vx of blade 1 at radius 64.30, RP coo. + 237 Ae vel Vy, rpco, R= 64.3 m/s Aero velocity Vy of blade 1 at radius 64.30, RP coo. + 238 Ae vel Vz, rpco, R= 64.3 m/s Aero velocity Vz of blade 1 at radius 64.30, RP coo. + 239 Ae pos x, glco, R= 64.3 m Aero position x of blade 1 at radius 64.30, global coo. + 240 Ae pos y, glco, R= 64.3 m Aero position y of blade 1 at radius 64.30, global coo. + 241 Ae pos z, glco, R= 64.3 m Aero position z of blade 1 at radius 64.30, global coo. + 242 Ae vel Vx, glco, R= 64.3 m/s Aero velocity Vx of blade 1 at radius 64.30, global coo. + 243 Ae vel Vy, glco, R= 64.3 m/s Aero velocity Vy of blade 1 at radius 64.30, global coo. + 244 Ae vel Vz, glco, R= 64.3 m/s Aero velocity Vz of blade 1 at radius 64.30, global coo. + 245 Ae rot tx, Bl.co, R= 64.3 deg Aero rotation tx of blade 1 at radius 64.30, Bl.co + 246 Ae rot ty, Bl.co, R= 64.3 deg Aero rotation ty of blade 1 at radius 64.30, Bl.co + 247 Ae rot tz, Bl.co, R= 64.3 deg Aero rotation tz of blade 1 at radius 64.30, Bl.co + 248 WSP gl. coo.,Vx m/s Free wind speed Vx, gl. coo, of gl. pos 0.00, 0.00, -90.00 tower top + 249 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos 0.00, 0.00, -90.00 tower top + 250 WSP gl. coo.,Vz m/s Free wind speed Vz, gl. coo, of gl. pos 0.00, 0.00, -90.00 tower top + 251 WSP gl. coo.,Vx m/s Free wind speed Vx, gl. coo, of gl. pos 44.54, 0.00,-134.54 1 radius at 45 deg + 252 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos 44.54, 0.00,-134.54 1 radius at 45 deg + 253 WSP gl. coo.,Vz m/s Free wind speed Vz, gl. coo, of gl. pos 44.54, 0.00,-134.54 1 radius at 45 deg + 254 WSP gl. coo.,Vx m/s Free wind speed Vx, gl. coo, of gl. pos 22.27, 0.00,-112.27 0.5 radius at 45 deg + 255 WSP gl. coo.,Vy m/s Free wind speed Vy, gl. coo, of gl. pos 22.27, 0.00,-112.27 0.5 radius at 45 deg + 256 WSP gl. coo.,Vz m/s Free wind speed Vz, gl. coo, of gl. pos 22.27, 0.00,-112.27 0.5 radius at 45 deg + 257 CT, azi 0.00 r 44.90 - CT in induction grid at azi 0.00 at radius 44.90 + 258 CT, azi 22.50 r 44.90 - CT in induction grid at azi 22.50 at radius 44.90 + 259 CT, azi 45.00 r 44.90 - CT in induction grid at azi 45.00 at radius 44.90 + 260 CT, azi 90.00 r 44.90 - CT in induction grid at azi 90.00 at radius 44.90 + 261 CQ, azi 0.00 r 44.90 - CQ in induction grid at azi 0.00 at radius 44.90 + 262 CQ, azi 22.50 r 44.90 - CQ in induction grid at azi 22.50 at radius 44.90 + 263 CQ, azi 45.00 r 44.90 - CQ in induction grid at azi 45.00 at radius 44.90 + 264 CQ, azi 90.00 r 44.90 - CQ in induction grid at azi 90.00 at radius 44.90 + 265 a_grid, azi 0.00 r 44.90 - a in induction grid at azi 0.00 at radius 44.90 + 266 a_grid, azi 22.50 r 44.90 - a in induction grid at azi 22.50 at radius 44.90 + 267 a_grid, azi 45.00 r 44.90 - a in induction grid at azi 45.00 at radius 44.90 + 268 a_grid, azi 90.00 r 44.90 - a in induction grid at azi 90.00 at radius 44.90 + 269 am_grid, azi 0.00 r 44.90 - am in induction grid at azi 0.00 at radius 44.90 + 270 am_grid, azi 22.50 r 44.90 - am in induction grid at azi 22.50 at radius 44.90 + 271 am_grid, azi 45.00 r 44.90 - am in induction grid at azi 45.00 at radius 44.90 + 272 am_grid, azi 90.00 r 44.90 - am in induction grid at azi 90.00 at radius 44.90 + 273 CT, azi 0.00 r 24.32 - CT in induction grid at azi 0.00 at radius 24.32 + 274 CT, azi 22.50 r 24.32 - CT in induction grid at azi 22.50 at radius 24.32 + 275 CT, azi 45.00 r 24.32 - CT in induction grid at azi 45.00 at radius 24.32 + 276 CT, azi 90.00 r 24.32 - CT in induction grid at azi 90.00 at radius 24.32 + 277 CQ, azi 0.00 r 24.32 - CQ in induction grid at azi 0.00 at radius 24.32 + 278 CQ, azi 22.50 r 24.32 - CQ in induction grid at azi 22.50 at radius 24.32 + 279 CQ, azi 45.00 r 24.32 - CQ in induction grid at azi 45.00 at radius 24.32 + 280 CQ, azi 90.00 r 24.32 - CQ in induction grid at azi 90.00 at radius 24.32 + 281 a_grid, azi 0.00 r 24.32 - a in induction grid at azi 0.00 at radius 24.32 + 282 a_grid, azi 22.50 r 24.32 - a in induction grid at azi 22.50 at radius 24.32 + 283 a_grid, azi 45.00 r 24.32 - a in induction grid at azi 45.00 at radius 24.32 + 284 a_grid, azi 90.00 r 24.32 - a in induction grid at azi 90.00 at radius 24.32 + 285 am_grid, azi 0.00 r 24.32 - am in induction grid at azi 0.00 at radius 24.32 + 286 am_grid, azi 22.50 r 24.32 - am in induction grid at azi 22.50 at radius 24.32 + 287 am_grid, azi 45.00 r 24.32 - am in induction grid at azi 45.00 at radius 24.32 + 288 am_grid, azi 90.00 r 24.32 - am in induction grid at azi 90.00 at radius 24.32 + 289 WSP Vy, rpco, R= 24.1 m/s Wind speed Vy of blade 1 at radius 24.11, RP coo. + 290 a_norm m/s Normalization wind speed used in induction calc. + 291 Ae rot tz, RP.co, R= 90.2 deg Aero rotation tz of blade 1 at radius 90.17, RP.co + 292 Ae rot tz, RP.co, R= 90.2 deg Aero rotation tz of blade 2 at radius 90.17, RP.co + 293 Ae rot tz, Bl.co, R= 90.2 deg Aero rotation tz of blade 1 at radius 90.17, Bl.co + 294 Ae rot tz, Bl.co, R= 90.2 deg Aero rotation tz of blade 2 at radius 90.17, Bl.co +________________________________________________________________________________________________________________________ +Scale factors: + 2.18750E-02 + 1.12499E-02 + 2.71853E-04 + 1.00000E+00 + 1.00000E+00 + 1.00000E+00 + 1.00000E+00 + 1.00000E+00 + 1.00000E+00 + 2.84270E-05 + 3.99176E-01 + 3.53586E-01 + 4.11653E-02 + 2.06988E-04 + 4.89200E-04 + 1.60638E-04 + 1.02484E+00 + 1.12410E+00 + 2.50829E-01 + 1.16072E-02 + 8.72528E-02 + 4.91553E-02 + 5.44435E+00 + 1.17831E+00 + 1.20572E+00 + 1.11705E+00 + 2.83151E-01 + 1.19425E+00 + 1.02967E+00 + 1.04673E+00 + 2.50829E-01 + 1.37203E+00 + 6.60891E-01 + 9.22515E-03 + 1.35958E+00 + 6.83885E-01 + 9.41925E-03 + 1.40906E+00 + 6.92096E-01 + 9.46023E-03 + 1.22737E+00 + 5.98125E-01 + 8.94469E-03 + 1.17627E+00 + 5.61856E-01 + 8.42235E-03 + 1.07545E+00 + 4.94665E-01 + 9.87587E-03 + 9.76616E-01 + 4.32861E-01 + 7.60375E-03 + 8.82190E-01 + 3.68686E-01 + 8.47236E-03 + 7.91015E-01 + 3.10092E-01 + 7.92105E-03 + 6.99934E-01 + 2.59426E-01 + 1.08214E-02 + 6.12714E-01 + 2.16669E-01 + 7.05244E-03 + 5.29677E-01 + 1.78546E-01 + 9.40261E-03 + 4.50956E-01 + 1.45976E-01 + 8.42918E-03 + 3.88310E-01 + 1.18485E-01 + 7.25200E-03 + 3.28203E-01 + 9.39857E-02 + 6.75869E-03 + 2.72197E-01 + 7.28563E-02 + 6.15898E-03 + 2.22741E-01 + 5.56034E-02 + 5.39568E-03 + 1.74366E-01 + 4.11705E-02 + 4.67535E-03 + 1.35395E-01 + 3.04139E-02 + 3.96776E-03 + 1.02184E-01 + 2.15621E-02 + 3.33401E-03 + 7.11179E-02 + 1.42365E-02 + 2.72158E-03 + 4.51104E-02 + 8.52503E-03 + 2.17028E-03 + 2.60886E-02 + 4.83839E-03 + 1.62362E-03 + 1.21233E-02 + 2.33404E-03 + 1.04325E-03 + 3.58973E-03 + 6.79107E-04 + 4.77289E-04 + 1.44598E-03 + 2.63131E-04 + 2.68907E-04 + 2.88379E-04 + 5.48510E-05 + 8.88923E-05 + 2.98782E-07 + 1.36776E-07 + 4.68802E-08 + 5.72535E-06 + 2.21606E-05 + 1.34159E-05 + 4.98379E-05 + 3.21879E-03 + 6.71763E-04 + 7.18107E-03 + 3.21956E-03 + 6.65493E-04 + 7.18105E-03 + 3.21922E-03 + 6.72274E-04 + 7.18111E-03 + 5.05378E-05 + 2.26617E-04 + 3.12717E-03 + 5.16381E-05 + 2.32461E-04 + 3.12717E-03 + 4.87942E-05 + 2.31319E-04 + 3.12717E-03 + 2.12362E-07 + 9.66345E-07 + 7.68264E-04 + 1.23049E-05 + 2.86799E-05 + 4.88016E-05 + 6.55143E-05 + 6.86874E-05 + 7.35628E-05 + 7.82111E-05 + 8.51271E-05 + 9.69564E-05 + 1.14934E-04 + 2.92072E-04 + 5.81228E-04 + 2.52352E-04 + 3.73585E-04 + 4.25715E-04 + 4.14409E-04 + 5.13659E-05 + 5.67194E-05 + 5.55884E-05 + 2.78370E-06 + 2.93712E-06 + 2.92569E-06 + 2.27202E+02 + 1.00000E+00 + 1.00000E+00 + 1.00000E+00 + 9.94950E-10 + 2.41705E+02 + 2.06145E+02 + 1.00000E+00 + 2.41705E+02 + 2.19303E-01 + 2.50829E+02 + 2.93750E-05 + 1.00000E+00 + 3.73253E-03 + 2.88357E-04 + 6.66711E-04 + 2.32533E-04 + 3.67843E-03 + 1.90629E-02 + 1.19630E+00 + 2.15457E-01 + 1.33930E-04 + 3.62370E-04 + 4.39427E-04 + 8.18577E-04 + 1.10891E-03 + 4.58951E-05 + 2.23564E-06 + 5.65016E-05 + 3.77297E-06 + 7.64309E-05 + 1.06931E-05 + 5.04857E-05 + 1.49699E-05 + 3.53849E-05 + 3.38883E-04 + 7.73491E-05 + 3.82047E-04 + 6.08103E-05 + 3.17025E-04 + 5.59194E-05 + 2.35224E-04 + 1.32118E-05 + 6.47207E-05 + 1.34644E-05 + 8.42781E-05 + 2.24756E-05 + 9.50453E-05 + 3.75138E-05 + 8.44199E-05 + 5.77781E-04 + 6.73456E-04 + 5.51980E-04 + 5.44735E-04 + 5.03224E-04 + 4.96123E-04 + 2.84621E-03 + 6.05738E-04 + 6.80814E-03 + 1.00573E-04 + 2.09373E-04 + 4.06212E-03 + 3.59124E-04 + 2.64112E-04 + 5.95269E-05 + 1.00402E-04 + 2.09596E-03 + 5.96135E-05 + 9.85346E-05 + 2.09597E-03 + 5.91479E-05 + 9.82798E-05 + 2.09595E-03 + 1.91534E-03 + 1.00125E-04 + 5.31147E-05 + 2.10137E-03 + 4.87899E-04 + 6.06280E-03 + 1.89394E-03 + 2.58041E-04 + 1.87810E-03 + 1.61167E-04 + 5.37263E-05 + 2.05411E-04 + 2.80744E-04 + 5.45956E-04 + 1.86560E-04 + 2.60632E-04 + 5.04107E-04 + 2.10883E-04 + 2.39931E-04 + 3.69065E-04 + 1.72027E-04 + 1.25000E-04 + 1.25000E-04 + 1.25000E-04 + 1.25000E-04 + 3.41207E-04 + 3.33005E-05 + 1.58740E-04 + 1.34684E-04 + 1.76872E-04 + 1.76865E-04 + 1.76882E-04 + 1.76876E-04 + 8.93102E-06 + 4.98615E-06 + 5.12094E-06 + 5.05450E-06 + 1.25000E-04 + 1.25000E-04 + 1.25000E-04 + 1.25000E-04 + 1.52272E-02 + 7.43620E-03 + 3.39572E-04 + 1.03710E-03 + 1.76880E-04 + 1.76872E-04 + 1.76865E-04 + 1.76783E-04 + 1.90109E-04 + 1.37697E-04 + 3.02042E-05 + 5.13045E-05 + 5.79473E-04 + 2.70120E-04 + 1.88273E-04 + 1.87797E-04 + 1.90542E-04 + 1.89871E-04 diff --git a/wetb/prepost/GenerateDLCs.py b/wetb/prepost/GenerateDLCs.py index fa997d9898ed08d31f32857b10c09347e3ddf26d..f1cf530d20b06626d155cfcec8dc6c777d53e5a1 100644 --- a/wetb/prepost/GenerateDLCs.py +++ b/wetb/prepost/GenerateDLCs.py @@ -11,7 +11,8 @@ from __future__ import absolute_import # arctan and pi are required because they are in the formulas that are # evaluated -from numpy import floor, arctan, pi +from numpy import (floor, arctan, pi, log, log10, sin, cos, tan, e, arcsin, + arccos) import pandas as pd import xlrd from argparse import ArgumentParser @@ -244,6 +245,8 @@ class GenerateDLCCases(GeneralDLC): if sheet.cell_value(1, i) is not None: tag = str(sheet.cell_value(1, i)) if tag is not '': + # FIXME: only works if [wsp] is defined as variable + # and [seed] tags are present if sheet.cell_value(0, i) == 'C': constants[tag] = sheet.cell_value(2, i) if sheet.cell_value(0, i) == 'V': diff --git a/wetb/prepost/dlcdefs.py b/wetb/prepost/dlcdefs.py index 8cad56b23bae54b85eeaafc508a66aadb3a0aad2..6938cb5dc4c7d6638ddc4eba6d80b6bc511d1a71 100644 --- a/wetb/prepost/dlcdefs.py +++ b/wetb/prepost/dlcdefs.py @@ -334,7 +334,7 @@ def tags_defaults(master): def excel_stabcon(proot, fext='xlsx', pignore=None, pinclude=None, sheet=0, - silent=False): + silent=False, p_source=False): """ Read all MS Excel files that hold load case definitions according to the team STABCON definitions. Save each case in a list according to the @@ -368,6 +368,9 @@ def excel_stabcon(proot, fext='xlsx', pignore=None, pinclude=None, sheet=0, Name or index of the Excel sheet to be considered. By default, the first sheet (index=0) is taken. + p_source : string, default=False + + Returns ------- @@ -472,7 +475,11 @@ def excel_stabcon(proot, fext='xlsx', pignore=None, pinclude=None, sheet=0, # in case there is a controller input file defined if '[controller_tuning_file]' in tags_dict: hs2 = hawcstab2.ReadControlTuning() - hs2.read_parameters(tags_dict['[controller_tuning_file]']) + # absolute path of the model root containing the tuning file + fpath = tags_dict['[controller_tuning_file]'] + if p_source: + fpath = os.path.join(p_source, fpath) + hs2.read_parameters(fpath) tags_dict['[pi_gen_reg1.K]'] = hs2.pi_gen_reg1.K tags_dict['[pi_gen_reg2.Kp]'] = hs2.pi_gen_reg2.Kp tags_dict['[pi_gen_reg2.Ki]'] = hs2.pi_gen_reg2.Ki @@ -481,6 +488,9 @@ def excel_stabcon(proot, fext='xlsx', pignore=None, pinclude=None, sheet=0, tags_dict['[pi_pitch_reg3.Ki]'] = hs2.pi_pitch_reg3.Ki tags_dict['[pi_pitch_reg3.K1]'] = hs2.pi_pitch_reg3.K1 tags_dict['[pi_pitch_reg3.K2]'] = hs2.pi_pitch_reg3.K2 + tags_dict['[aero_damp.Kp2]'] = hs2.aero_damp.Kp2 + tags_dict['[aero_damp.Ko1]'] = hs2.aero_damp.Ko1 + tags_dict['[aero_damp.Ko2]'] = hs2.aero_damp.Ko2 # save a copy of the current case an one opt_tags entry opt_tags.append(tags_dict.copy()) diff --git a/wetb/prepost/dlcplots.py b/wetb/prepost/dlcplots.py index 2e8351c90f64feb5515e8b83d726e573b2957379..7074cdda41a059ad55bd6675549cc31a973f1db1 100644 --- a/wetb/prepost/dlcplots.py +++ b/wetb/prepost/dlcplots.py @@ -57,6 +57,9 @@ def merge_sim_ids(sim_ids, post_dirs, post_dir_save=False): """ # map the run_dir to the same order as the post_dirs, labels run_dirs = [] + # avoid saving merged cases if there is only one! + if type(sim_ids).__name__ == 'list' and len(sim_ids) == 1: + sim_ids = sim_ids[0] # if sim_id is a list, combine the two dataframes into one df_stats = pd.DataFrame() @@ -99,15 +102,16 @@ def merge_sim_ids(sim_ids, post_dirs, post_dir_save=False): pass else: fpath = os.path.join(post_dir, '-'.join(sim_ids) + '.h5') + fmerged = fpath.replace('.h5', '_statistics.h5') if ii == 0: # and save somewhere so we can add the second data frame on # disc - df_stats.to_hdf(fpath, 'table', mode='w', format='table', + df_stats.to_hdf(fmerged, 'table', mode='w', format='table', complevel=9, complib='blosc') print('%s merged stats written to: %s' % (sim_id, fpath)) else: # instead of doing a concat in memory, add to the hdf store - df_stats.to_hdf(fpath, 'table', mode='r+', format='table', + df_stats.to_hdf(fmerged, 'table', mode='r+', format='table', complevel=9, complib='blosc', append=True) print('%s merging stats into: %s' % (sim_id, fpath)) # df_stats = pd.concat([df_stats, df_stats2], ignore_index=True) @@ -146,242 +150,10 @@ def merge_sim_ids(sim_ids, post_dirs, post_dir_save=False): return run_dirs, df_stats - # ============================================================================= ### STAT PLOTS # ============================================================================= -def plot_stats(sim_ids, post_dirs, fig_dir_base=None): - """ - For each wind speed, take the max of the max. - - Only one or two sim_ids are supported. When they are from different - models/projects, specify for each sim_id a different post_dir - - Parameters - ---------- - - sim_ids : list - list of sim_id's, 1 or 2 - - post_dirs - list of post_dir's, 1 or 2. If 2, should correspond to sim_ids - - fig_dir_base : str, default=None - - """ - - # if sim_id is a list, combine the two dataframes into one - df_stats = pd.DataFrame() - if type(sim_ids).__name__ == 'list': - for ii, sim_id in enumerate(sim_ids): - if isinstance(post_dirs, list): - post_dir = post_dirs[ii] - else: - post_dir = post_dirs - cc = sim.Cases(post_dir, sim_id, rem_failed=True) - if ii == 0: - df_stats, _, _ = cc.load_stats() - else: - # because there is no unique index, we will ignore it - df_stats, _, _ = pd.concat([df_stats, cc.load_stats()], - ignore_index=True) - else: - sim_id = sim_ids - sim_ids = False - post_dir = post_dirs - cc = sim.Cases(post_dir, sim_id, rem_failed=True) - df_stats, _, _ = cc.load_stats() - -# if force_dir: -# cc.change_results_dir(resdir=force_dir) -# for case in cc.cases: -# sim_id = cc.cases[case]['[post_dir]'] -# cc.cases[case]['[post_dir]'] = post_dir - -# # add DLC category -# f = lambda x: x.split('_')[0] -# df_stats['DLC'] = df_stats['[Case id.]'].map(f) - -# fig, axes = plt.subplots(nrows=1, ncols=1, figsize=(12,8), num=1) - - # define the number of positions you want to have the color for - N = 22 - # select a color map - cmap = mpl.cm.get_cmap('jet', N) - # convert to array - cmap_arr = cmap(np.arange(N)) - # color=cmap_arr[icol][0:3] - - # make a stastics plot for each channel - gb_ch = df_stats.groupby(df_stats.channel) - - # channel selection - plot_chans = {} - plot_chans['DLL-2-inpvec-2'] = 'P_e' - plot_chans['bearing-shaft_rot-angle_speed-rpm'] = 'RPM' - - plot_chans['tower-tower-node-001-momentvec-x'] = 'M_x T_B' - plot_chans['tower-tower-node-001-momentvec-y'] = 'M_y T_B' - plot_chans['tower-tower-node-001-momentvec-z'] = 'M_z T_B' - - plot_chans['tower-tower-node-008-momentvec-z'] = 'M_x T_T' - plot_chans['tower-tower-node-008-momentvec-z'] = 'M_y T_T' - plot_chans['tower-tower-node-008-momentvec-z'] = 'M_z T_T' - - plot_chans['shaft-shaft-node-004-momentvec-x'] = 'M_x Shaft_{MB}' - plot_chans['shaft-shaft-node-004-momentvec-y'] = 'M_y Shaft_{MB}' - plot_chans['shaft-shaft-node-004-momentvec-z'] = 'M_z Shaft_{MB}' - - plot_chans['blade1-blade1-node-003-momentvec-x'] = 'M_x B1_{root}' - plot_chans['blade1-blade1-node-003-momentvec-y'] = 'M_y B1_{root}' - plot_chans['blade1-blade1-node-003-momentvec-z'] = 'M_z B1_{root}' - plot_chans['blade2-blade2-node-003-momentvec-x'] = 'M_x B2_{root}' - plot_chans['blade2-blade2-node-003-momentvec-y'] = 'M_y B2_{root}' - plot_chans['blade2-blade2-node-003-momentvec-z'] = 'M_z B2_{root}' - plot_chans['blade3-blade3-node-003-momentvec-x'] = 'M_x B3_{root}' - plot_chans['blade3-blade3-node-003-momentvec-y'] = 'M_y B3_{root}' - plot_chans['blade3-blade3-node-003-momentvec-z'] = 'M_z B3_{root}' - - plot_chans['DLL-5-inpvec-1'] = 'Min tower clearance' - - plot_chans['bearing-pitch1-angle-deg'] = 'B1_{pitch}' - plot_chans['bearing-pitch2-angle-deg'] = 'B2_{pitch}' - plot_chans['bearing-pitch3-angle-deg'] = 'B3_{pitch}' - - plot_chans['setbeta-bladenr-1-flapnr-1'] = 'B1_{flap}' - plot_chans['setbeta-bladenr-2-flapnr-1'] = 'B2_{flap}' - plot_chans['setbeta-bladenr-3-flapnr-1'] = 'B3_{flap}' - - mfcs1 = ['k', 'w'] - mfcs2 = ['b', 'w'] - mfcs3 = ['r', 'w'] - stds = ['r', 'b'] - - for nr, (ch_name, gr_ch) in enumerate(gb_ch): - if ch_name not in plot_chans: - continue - for dlc_name, gr_ch_dlc in gr_ch.groupby(df_stats['[DLC]']): - print('start plotting: %s %s' % (str(dlc_name).ljust(7), ch_name)) - - fig, axes = mplutils.make_fig(nrows=1, ncols=1, figsize=(7,5)) - ax = axes[0,0] - # seperate figure for the standard deviations - fig2, axes2 = mplutils.make_fig(nrows=1, ncols=1, figsize=(7,5)) - ax2 = axes2[0,0] - - if fig_dir_base is None and not sim_ids: - res_dir = gr_ch_dlc['[res_dir]'][:1].values[0] - run_dir = gr_ch_dlc['[run_dir]'][:1].values[0] - fig_dir = os.path.join(fig_dir_base, res_dir) - elif fig_dir_base is None and isinstance(sim_ids, list): - fig_dir = os.path.join(fig_dir_base, '-'.join(sim_ids)) - elif fig_dir_base and not sim_ids: - res_dir = gr_ch_dlc['[res_dir]'][:1].values[0] - fig_dir = os.path.join(fig_dir_base, res_dir) - elif sim_ids and fig_dir_base is not None: - # create the compare directory if not defined - fig_dir = fig_dir_base - - # if we have a list of different cases, we also need to group those - # because the sim_id wasn't saved before in the data frame, - # we need to derive that from the run dir - # if there is only one run dir nothing changes - ii = 0 - sid_names = [] - for run_dir, gr_ch_dlc_sid in gr_ch_dlc.groupby(df_stats['[run_dir]']): - sid_name = run_dir.split('/')[-2] - sid_names.append(sid_name) - print(sid_name) - wind = gr_ch_dlc_sid['[Windspeed]'].values - dmin = gr_ch_dlc_sid['min'].values - dmean = gr_ch_dlc_sid['mean'].values - dmax = gr_ch_dlc_sid['max'].values - dstd = gr_ch_dlc_sid['std'].values - if not sim_ids: - lab1 = 'mean' - lab2 = 'min' - lab3 = 'max' - lab4 = 'std' - else: - lab1 = 'mean %s' % sid_name - lab2 = 'min %s' % sid_name - lab3 = 'max %s' % sid_name - lab4 = 'std %s' % sid_name - mfc1 = mfcs1[ii] - mfc2 = mfcs2[ii] - mfc3 = mfcs3[ii] - ax.plot(wind, dmean, mec='k', marker='o', mfc=mfc1, ls='', - label=lab1, alpha=0.7) - ax.plot(wind, dmin, mec='b', marker='^', mfc=mfc2, ls='', - label=lab2, alpha=0.7) - ax.plot(wind, dmax, mec='r', marker='v', mfc=mfc3, ls='', - label=lab3, alpha=0.7) - - ax2.plot(wind, dstd, mec=stds[ii], marker='s', mfc=stds[ii], ls='', - label=lab4, alpha=0.7) - - ii += 1 - -# for wind, gr_wind in gr_ch_dlc.groupby(df_stats['[Windspeed]']): -# wind = gr_wind['[Windspeed]'].values -# dmin = gr_wind['min'].values#.mean() -# dmean = gr_wind['mean'].values#.mean() -# dmax = gr_wind['max'].values#.mean() -## dstd = gr_wind['std'].mean() -# ax.plot(wind, dmean, 'ko', label='mean', alpha=0.7) -# ax.plot(wind, dmin, 'b^', label='min', alpha=0.7) -# ax.plot(wind, dmax, 'rv', label='max', alpha=0.7) -## ax.errorbar(wind, dmean, c='k', ls='', marker='s', mfc='w', -## label='mean and std', yerr=dstd) - ax.grid() - ax.set_xlim([3, 27]) - leg = ax.legend(loc='best', ncol=2) - leg.get_frame().set_alpha(0.7) - ax.set_title(r'{DLC%s} $%s$' % (dlc_name, plot_chans[ch_name])) - ax.set_xlabel('Wind speed [m/s]') - fig.tight_layout() - fig.subplots_adjust(top=0.92) - if not sim_ids: - fig_path = os.path.join(fig_dir, - ch_name.replace(' ', '_') + '.png') - else: - sids = '_'.join(sid_names) -# fig_dir = run_dir.split('/')[:-1] + 'figures/' - fname = '%s_%s.png' % (ch_name.replace(' ', '_'), sids) - fig_path = os.path.join(fig_dir, 'dlc%s/' % dlc_name) - if not os.path.exists(fig_path): - os.makedirs(fig_path) - fig_path = fig_path + fname - fig.savefig(fig_path)#.encode('latin-1') -# canvas.close() - fig.clear() - print('saved: %s' % fig_path) - - ax2.grid() - ax2.set_xlim([3, 27]) - leg = ax2.legend(loc='best', ncol=2) - leg.get_frame().set_alpha(0.7) - ax2.set_title(r'{DLC%s} $%s$' % (dlc_name, plot_chans[ch_name])) - ax2.set_xlabel('Wind speed [m/s]') - fig2.tight_layout() - fig2.subplots_adjust(top=0.92) - if not sim_ids: - fig_path = os.path.join(fig_dir, - ch_name.replace(' ', '_') + '_std.png') - else: - sids = '_'.join(sid_names) - fname = '%s_std_%s.png' % (ch_name.replace(' ', '_'), sids) - fig_path = os.path.join(fig_dir, 'dlc%s/' % dlc_name) - if not os.path.exists(fig_path): - os.makedirs(fig_path) - fig_path = fig_path + fname - fig2.savefig(fig_path)#.encode('latin-1') -# canvas.close() - fig2.clear() - print('saved: %s' % fig_path) - - def plot_stats2(sim_ids, post_dirs, plot_chans, fig_dir_base=None, labels=None, post_dir_save=False, dlc_ignore=['00'], figsize=(8,6)): """ @@ -453,7 +225,7 @@ def plot_dlc_stats(df_stats, plot_chans, fig_dir_base, labels=None, mfcs3 = ['r', 'w'] stds = ['r', 'b'] - required = ['[DLC]', '[run_dir]', '[wdir]', '[Windspeed]'] + required = ['[DLC]', '[run_dir]', '[wdir]', '[Windspeed]', '[res_dir]'] cols = df_stats.columns for col in required: if col not in cols: @@ -548,6 +320,9 @@ def plot_dlc_stats(df_stats, plot_chans, fig_dir_base, labels=None, windoffset = [-0.2, 0.2] else: windoffset = [0] + # in case of a fully empty plot xlims will remain None and there + # is no need to save the plot + xlims = None # instead of groupby, select the run_dir in the same order as # occuring in the labels, post_dirs lists for ii, run_dir in enumerate(run_dirs): @@ -612,6 +387,10 @@ def plot_dlc_stats(df_stats, plot_chans, fig_dir_base, labels=None, # if str(dlc_name) not in ['61', '62']: # ax.set_xticks(gr_ch_dlc_sid['[Windspeed]'].values) + # don't save empyt plots + if xlims is None: + continue + ax.grid() ax.set_xlim(xlims) leg = ax.legend(loc='best', ncol=3) @@ -1185,7 +964,7 @@ if __name__ == '__main__': # PLOT STATS, when comparing cases sim_ids = [sim_id] run_dirs = [P_RUN] - figdir = os.path.join(P_RUN, '..', 'figures/%s' % sim_id) + figdir = os.path.join(P_RUN, '..', 'dlcplots/%s' % sim_id) print('='*79) print(' P_RUN: %s' % P_RUN) diff --git a/wetb/prepost/dlctemplate.py b/wetb/prepost/dlctemplate.py index a989bd8d8ed2ecdb5616a07832d63725a6d6703e..1a12702e72efc1140452df42bf7c3e0de06e50f3 100644 --- a/wetb/prepost/dlctemplate.py +++ b/wetb/prepost/dlctemplate.py @@ -28,6 +28,7 @@ from wetb.prepost import Simulations as sim from wetb.prepost import dlcdefs from wetb.prepost import dlcplots from wetb.prepost.simchunks import create_chunks_htc_pbs +from wetb.prepost.GenerateDLCs import GenerateDLCCases plt.rc('font', family='serif') plt.rc('xtick', labelsize=10) @@ -265,7 +266,7 @@ def variable_tag_func_mod1(master, case_id_short=False): def launch_dlcs_excel(sim_id, silent=False, verbose=False, pbs_turb=False, runmethod=None, write_htc=True, zipchunks=False, - walltime='04:00:00'): + walltime='04:00:00', postpro_node=False): """ Launch load cases defined in Excel files """ @@ -273,15 +274,21 @@ def launch_dlcs_excel(sim_id, silent=False, verbose=False, pbs_turb=False, iter_dict = dict() iter_dict['[empty]'] = [False] + if postpro_node: + pyenv = 'wetb_py3' + else: + pyenv = None + # see if a htc/DLCs dir exists dlcs_dir = os.path.join(P_SOURCE, 'htc', 'DLCs') # Load all DLC definitions and make some assumptions on tags that are not # defined if os.path.exists(dlcs_dir): - opt_tags = dlcdefs.excel_stabcon(dlcs_dir, silent=silent) + opt_tags = dlcdefs.excel_stabcon(dlcs_dir, silent=silent, + p_source=P_SOURCE) else: opt_tags = dlcdefs.excel_stabcon(os.path.join(P_SOURCE, 'htc'), - silent=silent) + silent=silent, p_source=P_SOURCE) if len(opt_tags) < 1: raise ValueError('There are is not a single case defined. Make sure ' @@ -322,7 +329,7 @@ def launch_dlcs_excel(sim_id, silent=False, verbose=False, pbs_turb=False, copyback_turb=True, update_cases=False, msg='', ignore_non_unique=False, run_only_new=False, pbs_fname_appendix=False, short_job_names=False, - silent=silent, verbose=verbose, pyenv=None) + silent=silent, verbose=verbose, pyenv=pyenv) if pbs_turb: # to avoid confusing HAWC2 simulations and Mann64 generator PBS files, @@ -337,10 +344,10 @@ def launch_dlcs_excel(sim_id, silent=False, verbose=False, pbs_turb=False, # respective nodes. It is not walltime per case. sorts_on = ['[DLC]', '[Windspeed]'] create_chunks_htc_pbs(cases, sort_by_values=sorts_on, ppn=20, - nr_procs_series=9, walltime='20:00:00', + nr_procs_series=3, walltime='20:00:00', chunks_dir='zip-chunks-jess') create_chunks_htc_pbs(cases, sort_by_values=sorts_on, ppn=12, - nr_procs_series=15, walltime='20:00:00', + nr_procs_series=3, walltime='20:00:00', chunks_dir='zip-chunks-gorm') df = sim.Cases(cases).cases2df() @@ -393,7 +400,8 @@ def post_launch(sim_id, statistics=True, rem_failed=True, check_logs=True, # add_sigs = {name:expr} # in addition, sim_id and case_id are always added by default - tags = ['[Case folder]'] + tags = ['[Case folder]', '[run_dir]', '[res_dir]', '[DLC]', + '[wsp]', '[Windspeed]', '[wdir]'] add = None # general statistics for all channels channel # set neq=None here to calculate 1Hz equivalent loads @@ -504,11 +512,21 @@ if __name__ == '__main__': action='store', dest='walltime', help='Queue walltime ' 'for each case/pbs file, format: HH:MM:SS ' 'Default: 04:00:00') + parser.add_argument('--postpro_node', default=False, action='store_true', + dest='postpro_node', help='Perform the log analysis ' + 'and stats calculation on the node right after the ' + 'simulation has finished.') + parser.add_argument('--gendlcs', default=False, action='store_true', + help='Generate DLC exchange files based on master DLC ' + 'spreadsheet.') + parser.add_argument('--dlcmaster', type=str, default='htc/DLCs.xlsx', + action='store', dest='dlcmaster', + help='Master spreadsheet file location') + parser.add_argument('--dlcfolder', type=str, default='htc/DLCs/', + action='store', dest='dlcfolder', help='Destination ' + 'folder location of the generated DLC exchange files') opt = parser.parse_args() - # TODO: use arguments to determine the scenario: - # --plots, --report, --... - # ------------------------------------------------------------------------- # # manually configure paths, HAWC2 model root path is then constructed as # # p_root_remote/PROJECT/sim_id, and p_root_local/PROJECT/sim_id @@ -538,12 +556,17 @@ if __name__ == '__main__': P_RUN, P_SOURCE, PROJECT, sim_id, P_MASTERFILE, MASTERFILE, POST_DIR \ = dlcdefs.configure_dirs(verbose=True) + if opt.gendlcs: + DLB = GenerateDLCCases() + DLB.execute(filename=os.path.join(P_SOURCE, opt.dlcmaster), + folder=os.path.join(P_RUN, opt.dlcfolder)) # create HTC files and PBS launch scripts (*.p) if opt.prep: print('Start creating all the htc files and pbs_in files...') launch_dlcs_excel(sim_id, silent=False, zipchunks=opt.zipchunks, - pbs_turb=opt.pbs_turb, walltime=opt.walltime) + pbs_turb=opt.pbs_turb, walltime=opt.walltime, + postpro_node=opt.postpro_node, runmethod=RUNMETHOD) # post processing: check log files, calculate statistics if opt.check_logs or opt.stats or opt.fatigue or opt.envelopeblade \ or opt.envelopeturbine or opt.AEP: @@ -569,12 +592,11 @@ if __name__ == '__main__': for nr in [1, 2, 3]: rpl = (nr, nr, node_nr, comp) chans.append('blade%i-blade%i-node-%03i-momentvec-%s' % rpl) - plot_chans['$M_%s B123_{%i}$' % (comp, node_lab)] = chans + plot_chans['$M_%s B123_{%s}$' % (comp, node_lab)] = chans chans = [] # combine blade 1,2,3 pitch angle stats into a single plot for nr in [1, 2, 3]: - rpl = (nr, nr, node_nr, comp) chans.append('bearing-pitch%i-angle-deg' % nr) plot_chans['$B123_{pitch}$'] = chans @@ -593,6 +615,6 @@ if __name__ == '__main__': plot_chans['$M_z Shaft_{MB}$'] = ['shaft-shaft-node-004-momentvec-z'] sim_ids = [sim_id] - figdir = os.path.join(POST_DIR, 'figures/%s' % '-'.join(sim_ids)) + figdir = os.path.join(POST_DIR, 'dlcplots/') dlcplots.plot_stats2(sim_ids, [POST_DIR], plot_chans, fig_dir_base=figdir) diff --git a/wetb/prepost/tests/test_windIO.py b/wetb/prepost/tests/test_windIO.py index 84c5a9d551830903ac8b52fb1be0791954e5bea2..afb9c7385c9ee40556b6cb24aaca3bb615590891 100644 --- a/wetb/prepost/tests/test_windIO.py +++ b/wetb/prepost/tests/test_windIO.py @@ -11,6 +11,7 @@ from future import standard_library standard_library.install_aliases() import unittest +import io import os import tempfile @@ -19,6 +20,132 @@ import numpy as np from wetb.prepost import windIO +class TestsLogFile(unittest.TestCase): + + def setUp(self): + self.logpath = os.path.join(os.path.dirname(__file__), + '../../hawc2/tests/test_files/logfiles/') + + def readlog(self, fname): + log = windIO.LogFile() + log.readlog(os.path.join(self.logpath, fname)) + return log + + def test_reading(self): + fname = 'simulating.log' + log = self.readlog(fname) + self.assertTrue(hasattr(log, 'MsgListLog')) + self.assertTrue(hasattr(log, 'MsgListLog2')) + fpath = os.path.join(self.logpath, fname) + self.assertEqual(len(log.MsgListLog), 1) + self.assertEqual(len(log.MsgListLog2), 1) + self.assertEqual(log.MsgListLog[0][0], fpath) + self.assertTrue(fpath in log.MsgListLog2) + # the current log file doesn't contain any errors but didn't complete + # [found_error, exit_correct] + self.assertEqual(log.MsgListLog2[fpath], [False, False]) + + def test_loganalysis_file(self): + fname = 'simulating.log' + log = self.readlog(fname) + csv = log._header() + csv = log._msglistlog2csv(csv) + # because our API is really crappy, we emulate writing to StringIO + # instead of to a file + fcsv = io.StringIO(csv) + df = log.csv2df(fcsv) + self.assertEqual(df.loc[0,'nr_time_steps'], 25) + self.assertEqual(df.loc[0,'total_iterations'], 49) + self.assertEqual(df.loc[0,'file_name'], log.MsgListLog[0][0]) + self.assertAlmostEqual(df.loc[0,'last_time_step'], 0.5, places=5) + self.assertAlmostEqual(df.loc[0,'dt'], 0.02) + self.assertAlmostEqual(df.loc[0,'max_iters_p_time_step'], 2.0) + self.assertAlmostEqual(df.loc[0,'mean_iters_p_time_step'], 1.96) + self.assertTrue(np.isnan(df.loc[0,'seconds_p_iteration'])) + + def test_read_and_analysis_simulation_error2(self): + + fname = 'simulation_error2.log' + fpath = os.path.join(self.logpath, fname) + + log = self.readlog(fname) + # finish correctly, but with errors, [found_error, exit_correct] + self.assertEqual(log.MsgListLog2[fpath], [True, True]) + + csv = log._header() + csv = log._msglistlog2csv(csv) + # because our API is really crappy, we emulate writing to StringIO + # instead of to a file + fcsv = io.StringIO(csv) + df = log.csv2df(fcsv) + self.assertEqual(df.loc[0,'nr_time_steps'], 1388) + self.assertEqual(df.loc[0,'total_iterations'], 0) + self.assertEqual(df.loc[0,'file_name'], log.MsgListLog[0][0]) + self.assertAlmostEqual(df.loc[0,'dt'], 0.02) + self.assertAlmostEqual(df.loc[0,'max_iters_p_time_step'], 0.0) + self.assertAlmostEqual(df.loc[0,'mean_iters_p_time_step'], 0.0) + self.assertAlmostEqual(df.loc[0,'elapsted_time'], 0.3656563) + self.assertAlmostEqual(df.loc[0,'last_time_step'], 27.76, places=5) + self.assertAlmostEqual(df.loc[0,'real_sim_time'], 75.9183, places=4) + self.assertTrue(np.isnan(df.loc[0,'seconds_p_iteration'])) + + self.assertEqual(df.loc[0,'first_tstep_104'], 1386) + self.assertEqual(df.loc[0,'last_step_104'], 1388) + self.assertEqual(df.loc[0,'nr_104'], 30) + msg = ' *** ERROR *** Out of limits in user defined shear field - ' + msg += 'limit value used' + self.assertEqual(df.loc[0,'msg_104'], msg) + + def test_read_and_analysis_init_error(self): + + fname = 'init_error.log' + fpath = os.path.join(self.logpath, fname) + + log = self.readlog(fname) + # errors, but no sim time or finish message [found_error, exit_correct] + self.assertEqual(log.MsgListLog2[fpath], [True, True]) + + csv = log._header() + csv = log._msglistlog2csv(csv) + # because our API is really crappy, we emulate writing to StringIO + # instead of to a file + fcsv = io.StringIO(csv) + df = log.csv2df(fcsv) + + msg = ' *** ERROR *** No line termination in command line 8' + self.assertEqual(df.loc[0,'msg_5'], msg) + + def test_read_and_analysis_init(self): + + fname = 'init.log' + fpath = os.path.join(self.logpath, fname) + + log = self.readlog(fname) + # errors, but no sim time or finish message [found_error, exit_correct] + self.assertEqual(log.MsgListLog2[fpath], [False, False]) + + csv = log._header() + csv = log._msglistlog2csv(csv) + # because our API is really crappy, we emulate writing to StringIO + # instead of to a file + fcsv = io.StringIO(csv) + df = log.csv2df(fcsv) + + def test_read_and_analysis_tmp(self): + + fname = 'tmp.log' + fpath = os.path.join(self.logpath, fname) + + log = self.readlog(fname) + csv = log._header() + csv = log._msglistlog2csv(csv) + fcsv = io.StringIO(csv) + df = log.csv2df(fcsv) + # finish correctly, but with errors + self.assertAlmostEqual(df.loc[0,'elapsted_time'], 291.6350, places=5) + self.assertEqual(log.MsgListLog2[fpath], [True, True]) + + class TestsLoadResults(unittest.TestCase): def setUp(self): @@ -26,6 +153,9 @@ class TestsLoadResults(unittest.TestCase): '../../hawc2/tests/test_files/hawc2io/') self.fascii = 'Hawc2ascii' self.fbin = 'Hawc2bin' + self.f1_chant = 'hawc2ascii_chantest_1.sel' + self.f2_chant = 'hawc2bin_chantest_2.sel' + self.f3_chant = 'hawc2bin_chantest_3.sel' def loadresfile(self, resfile): res = windIO.LoadResults(self.respath, resfile) @@ -62,6 +192,49 @@ class TestsLoadResults(unittest.TestCase): self.assertEqual(res.ch_df.unique_ch_name.values[27], 'windspeed-global-Vy--2.50-1.00--52.50') + def test_unified_chan_names_extensive(self): + + # --------------------------------------------------------------------- + res = windIO.LoadResults(self.respath, self.f1_chant, readdata=False) + self.assertFalse(hasattr(res, 'sig')) + np.testing.assert_array_equal(res.ch_df.index.values, np.arange(0,422)) + self.assertEqual(res.ch_df.unique_ch_name.values[0], 'Time') + df = res.ch_df + self.assertEqual(2, len(df[df['bearing_name']=='shaft_rot'])) + self.assertEqual(18, len(df[df['sensortype']=='State pos'])) + self.assertEqual(11, len(df[df['blade_nr']==1])) + + exp = [[38, 'global-blade2-elem-019-zrel-1.00-State pos-z', 'm'], + [200, 'blade2-blade2-node-017-momentvec-z', 'kNm'], + [296, 'blade1-blade1-node-008-forcevec-z', 'kN'], + [415, 'Cl-1-55.7', 'deg'], + [421, 'qwerty-is-azerty', 'is'] + ] + for k in exp: + self.assertEqual(df.loc[k[0], 'unique_ch_name'], k[1]) + self.assertEqual(df.loc[k[0], 'units'], k[2]) + self.assertEqual(res.ch_dict[k[1]]['chi'], k[0]) + self.assertEqual(res.ch_dict[k[1]]['units'], k[2]) + + # --------------------------------------------------------------------- + res = windIO.LoadResults(self.respath, self.f2_chant, readdata=False) + self.assertFalse(hasattr(res, 'sig')) + np.testing.assert_array_equal(res.ch_df.index.values, np.arange(0,217)) + df = res.ch_df + self.assertEqual(4, len(df[df['sensortype']=='wsp-global'])) + self.assertEqual(2, len(df[df['sensortype']=='harmonic'])) + self.assertEqual(2, len(df[df['blade_nr']==3])) + + # --------------------------------------------------------------------- + res = windIO.LoadResults(self.respath, self.f3_chant, readdata=False) + self.assertFalse(hasattr(res, 'sig')) + np.testing.assert_array_equal(res.ch_df.index.values, np.arange(0,294)) + df = res.ch_df + self.assertEqual(8, len(df[df['sensortype']=='CT'])) + self.assertEqual(8, len(df[df['sensortype']=='CQ'])) + self.assertEqual(8, len(df[df['sensortype']=='a_grid'])) + self.assertEqual(84, len(df[df['blade_nr']==1])) + class TestUserWind(unittest.TestCase): diff --git a/wetb/prepost/windIO.py b/wetb/prepost/windIO.py index b4cdd3e6298be0474533cb4e0f5cf8836e8b6127..c0ae4ba4b0a385ece0c452febc02838e70b91b79 100755 --- a/wetb/prepost/windIO.py +++ b/wetb/prepost/windIO.py @@ -176,11 +176,11 @@ class LogFile(object): else: iterations = np.ndarray( (len(lines),3), dtype=np.float32 ) dt = False - iterations[:,0:2] = -1 + iterations[:,0:2] = np.nan iterations[:,2] = 0 # keep track of the time_step number - time_step, init_block = -1, True + time_step, init_block = 0, True # check for messages in the current line # for speed: delete from message watch list if message is found for j, line in enumerate(lines): @@ -192,13 +192,13 @@ class LogFile(object): # keep track of the number of iterations if line[:12] == ' Global time': - time_step += 1 iterations[time_step,0] = float(line[14:40]) # for PY2, new line is 2 characters, for PY3 it is one char iterations[time_step,1] = int(line[-6:]) # time step is the first time stamp if not dt: dt = float(line[15:40]) + time_step += 1 # no need to look for messages if global time is mentioned continue @@ -235,10 +235,6 @@ class LogFile(object): elif msg in self.err_sim: icol = subcols_sim*self.err_sim[msg] icol += subcols_init*self.init_cols + 1 - # in case stuff already goes wrong on the first time step - if time_step == -1: - time_step = 0 - # 1: time step of first occurance if tempLog[icol] == '': tempLog[icol] = '%i' % time_step @@ -253,7 +249,7 @@ class LogFile(object): tempLog[icol+3] = line found_error = True - iterations[time_step,2] = 1 + iterations[time_step-1,2] = 1 # method of last resort, we have no idea what message elif line[:10] == ' *** ERROR' or line[:10]==' ** WARNING': @@ -264,21 +260,27 @@ class LogFile(object): # and message tempLog[icol+1] = line found_error = True - # in case stuff already goes wrong on the first time step - if time_step == -1: - time_step = 0 - iterations[time_step,2] = 1 + iterations[time_step-1,2] = 1 + + # remove not-used rows from iterations + iterations = iterations[:time_step,:] - # simulation and simulation output time + # simulation and simulation output time based on the tags + # FIXME: ugly, do not mix tags with what is actually happening in the + # log files!! if case is not None: t_stop = float(case['[time_stop]']) duration = float(case['[duration]']) else: - t_stop = -1 + t_stop = np.nan duration = -1 + # if no time steps have passed + if iterations.shape == (0,3): + elapsed_time = -1 + tempLog.append('') # see if the last line holds the sim time - if line[:15] == ' Elapsed time :': + elif line[:15] == ' Elapsed time :': exit_correct = True elapsed_time = float(line[15:-1]) tempLog.append( elapsed_time ) @@ -286,43 +288,55 @@ class LogFile(object): # might be: " Closing of external type2 DLL" elif line[:20] == ' Closing of external': exit_correct = True - elapsed_time = iterations[time_step,0] + elapsed_time = iterations[time_step-1,0] tempLog.append( elapsed_time ) - elif np.allclose(iterations[time_step,0], t_stop): + # FIXME: this is weird mixing of referring to t_stop from the tags + # and the actual last recorded time step + elif np.allclose(iterations[time_step-1,0], t_stop): exit_correct = True - elapsed_time = iterations[time_step,0] + elapsed_time = iterations[time_step-1,0] tempLog.append( elapsed_time ) else: elapsed_time = -1 tempLog.append('') - # give the last recorded time step - tempLog.append('%1.11f' % iterations[time_step,0]) + if iterations.shape == (0,3): + last_time_step = 0 + else: + last_time_step = iterations[time_step-1,0] - # simulation and simulation output time + # give the last recorded time step + tempLog.append('%1.11f' % last_time_step) + # simulation_time, as taken from cases tempLog.append('%1.01f' % t_stop) - tempLog.append('%1.04f' % (t_stop/elapsed_time)) + # real_sim_time + tempLog.append('%1.04f' % (last_time_step/elapsed_time)) tempLog.append('%1.01f' % duration) # as last element, add the total number of iterations itertotal = np.nansum(iterations[:,1]) - tempLog.append('%i' % itertotal) + tempLog.append('%1.0f' % itertotal) # the delta t used for the simulation if dt: tempLog.append('%1.7f' % dt) else: - tempLog.append('failed to find dt') + tempLog.append('nan') # number of time steps - tempLog.append('%i' % len(iterations) ) + tempLog.append('%i' % (time_step)) # if the simulation didn't end correctly, the elapsed_time doesn't # exist. Add the average and maximum nr of iterations per step # or, if only the structural and eigen analysis is done, we have 0 try: ratio = float(elapsed_time)/float(itertotal) - tempLog.append('%1.6f' % ratio) + # FIXME: this needs to be fixed proper while testing the analysis + # of various log files and edge cases + if elapsed_time < 0: + tempLog.append('') + else: + tempLog.append('%1.6f' % ratio) except (UnboundLocalError, ZeroDivisionError, ValueError) as e: tempLog.append('') # when there are no time steps (structural analysis only) @@ -414,9 +428,12 @@ class LogFile(object): """ chain_iter = chain.from_iterable + nr_init = len(self.err_init) + nr_sim = len(self.err_sim) + colnames = ['file_name'] colnames.extend(list(chain_iter(('nr_%i' % i, 'msg_%i' % i) - for i in range(31))) ) + for i in range(nr_init))) ) gr = ('first_tstep_%i', 'last_step_%i', 'nr_%i', 'msg_%i') colnames.extend(list(chain_iter( (k % i for k in gr) @@ -437,16 +454,16 @@ class LogFile(object): dtypes = {} # str and float datatypes for - msg_cols = ['msg_%i' % i for i in range(30)] - msg_cols.extend(['msg_%i' % i for i in range(100,105,1)]) + msg_cols = ['msg_%i' % i for i in range(nr_init-1)] + msg_cols.extend(['msg_%i' % i for i in range(100,100+nr_sim,1)]) msg_cols.append('msg_extra') dtypes.update({k:str for k in msg_cols}) # make the message/str columns long enough - min_itemsize = {'msg_%i' % i : 100 for i in range(30)} + min_itemsize = {'msg_%i' % i : 100 for i in range(nr_init-1)} # column names holding the number of occurances of messages - nr_cols = ['nr_%i' % i for i in range(30)] - nr_cols.extend(['nr_%i' % i for i in range(100,105,1)]) + nr_cols = ['nr_%i' % i for i in range(nr_init-1)] + nr_cols.extend(['nr_%i' % i for i in range(100,100+nr_sim,1)]) # other float values nr_cols.extend(['elapsted_time', 'total_iterations']) # NaN only exists in float arrays, not integers (NumPy limitation) @@ -561,81 +578,6 @@ class LoadResults(ReadHawc2): stop = time() - start print('time to load HAWC2 file:', stop, 's') - - def reformat_sig_details(self): - """Change HAWC2 output description of the channels short descriptive - strings, usable in plots - - obj.ch_details[channel,(0=ID; 1=units; 2=description)] : np.array - """ - - # CONFIGURATION: mappings between HAWC2 and short good output: - change_list = [] - change_list.append( ['original', 'new improved'] ) - -# change_list.append( ['Mx coo: hub1','blade1 root bending: flap'] ) -# change_list.append( ['My coo: hub1','blade1 root bending: edge'] ) -# change_list.append( ['Mz coo: hub1','blade1 root bending: torsion'] ) -# -# change_list.append( ['Mx coo: hub2','blade2 root bending: flap'] ) -# change_list.append( ['My coo: hub2','blade2 root bending: edge'] ) -# change_list.append( ['Mz coo: hub2','blade2 root bending: torsion'] ) -# -# change_list.append( ['Mx coo: hub3','blade3 root bending: flap'] ) -# change_list.append( ['My coo: hub3','blade3 root bending: edge'] ) -# change_list.append( ['Mz coo: hub3','blade3 root bending: torsion'] ) - - change_list.append(['Mx coo: blade1', 'blade1 flap']) - change_list.append(['My coo: blade1', 'blade1 edge']) - change_list.append(['Mz coo: blade1', 'blade1 torsion']) - - change_list.append(['Mx coo: blade2', 'blade2 flap']) - change_list.append(['My coo: blade2', 'blade2 edge']) - change_list.append(['Mz coo: blade2', 'blade2 torsion']) - - change_list.append(['Mx coo: blade3', 'blade3 flap']) - change_list.append(['My coo: blade3', 'blade3 edeg']) - change_list.append(['Mz coo: blade3', 'blade3 torsion']) - - change_list.append(['Mx coo: hub1', 'blade1 out-of-plane']) - change_list.append(['My coo: hub1', 'blade1 in-plane']) - change_list.append(['Mz coo: hub1', 'blade1 torsion']) - - change_list.append(['Mx coo: hub2', 'blade2 out-of-plane']) - change_list.append(['My coo: hub2', 'blade2 in-plane']) - change_list.append(['Mz coo: hub2', 'blade2 torsion']) - - change_list.append(['Mx coo: hub3', 'blade3 out-of-plane']) - change_list.append(['My coo: hub3', 'blade3 in-plane']) - change_list.append(['Mz coo: hub3', 'blade3 torsion']) - # this one will create a false positive for tower node nr1 - change_list.append(['Mx coo: tower', 'tower top momemt FA']) - change_list.append(['My coo: tower', 'tower top momemt SS']) - change_list.append(['Mz coo: tower', 'yaw-moment']) - - change_list.append(['Mx coo: chasis', 'chasis momemt FA']) - change_list.append(['My coo: chasis', 'yaw-moment chasis']) - change_list.append(['Mz coo: chasis', 'chasis moment SS']) - - change_list.append(['DLL inp 2: 2', 'tower clearance']) - - self.ch_details_new = np.ndarray(shape=(self.Nch, 3), dtype='<U100') - - # approach: look for a specific description and change it. - # This approach is slow, but will not fail if the channel numbers change - # over different simulations - for ch in range(self.Nch): - # the change_list will always be slower, so this loop will be - # inside the bigger loop of all channels - self.ch_details_new[ch, :] = self.ch_details[ch, :] - for k in range(len(change_list)): - if change_list[k][0] == self.ch_details[ch, 0]: - self.ch_details_new[ch, 0] = change_list[k][1] - # channel description should be unique, so delete current - # entry and stop looking in the change list - del change_list[k] - break - # TODO: THIS IS STILL A WIP def _make_channel_names(self): """Give every channel a unique channel name which is (nearly) identical @@ -771,7 +713,6 @@ class LoadResults(ReadHawc2): return names, index - def _unified_channel_names(self): """ Make certain channels independent from their index. @@ -844,8 +785,9 @@ class LoadResults(ReadHawc2): # some channel ID's are unique, use them ch_unique = set(['Omega', 'Ae rot. torque', 'Ae rot. power', 'Ae rot. thrust', 'Time', 'Azi 1']) - ch_aero = set(['Cl', 'Cd', 'Alfa', 'Vrel', 'Tors_e', 'Alfa']) - ch_aerogrid = set(['a_grid', 'am_grid']) + ch_aero = set(['Cl', 'Cd', 'Alfa', 'Vrel', 'Tors_e', 'Alfa', 'Lift', + 'Drag']) + ch_aerogrid = set(['a_grid', 'am_grid', 'CT', 'CQ']) # also safe as df # cols = set(['bearing_name', 'sensortag', 'bodyname', 'chi', @@ -946,6 +888,7 @@ class LoadResults(ReadHawc2): channelinfo['units'] = self.ch_details[ch, 1] # ----------------------------------------------------------------- + # ELEMENT STATES: pos, vel, acc, rot, ang # 0 1 2 3 4 5 6 7 8 # State pos x Mbdy:blade E-nr: 1 Z-rel:0.00 coo: blade # 0 1 2 3 4 5 6 7 8 9+ @@ -1041,6 +984,7 @@ class LoadResults(ReadHawc2): channelinfo['chi'] = ch channelinfo['sensortag'] = sensortag channelinfo['units'] = self.ch_details[ch, 1] + channelinfo['sensortype'] = 'dll-io' # ----------------------------------------------------------------- # BEARING OUTPUS @@ -1061,21 +1005,30 @@ class LoadResults(ReadHawc2): channelinfo['chi'] = ch # ----------------------------------------------------------------- + # AS DEFINED IN: ch_aero # AERO CL, CD, CM, VREL, ALFA, LIFT, DRAG, etc # Cl, R= 0.5 deg Cl of blade 1 at radius 0.49 # Azi 1 deg Azimuth of blade 1 + # NOTE THAT RADIUS FROM ch_details[ch, 0] REFERS TO THE RADIUS + # YOU ASKED FOR, AND ch_details[ch, 2] IS WHAT YOU GET, which is + # still based on a mean radius (deflections change the game) elif self.ch_details[ch, 0].split(',')[0] in ch_aero: dscr_list = self.ch_details[ch, 2].split(' ') dscr_list = misc.remove_items(dscr_list, '') - sensortype = self.ch_details[ch, 0].split(',')[0] - radius = dscr_list[-1] + # is this always valid? blade_nr = self.ch_details[ch, 2].split('blade ')[1][0] # sometimes the units for aero sensors are wrong! units = self.ch_details[ch, 1] # there is no label option + # radius what you get +# radius = dscr_list[-1] + # radius what you asked for + tmp = self.ch_details[ch, 0].split('R=') + radius = misc.remove_items(tmp, '')[-1].strip() + # and tag it tag = '%s-%s-%s' % (sensortype, blade_nr, radius) # save all info in the dict @@ -1095,6 +1048,7 @@ class LoadResults(ReadHawc2): items2 = items[1].split(' ') items2 = misc.remove_items(items2, '') azi = items2[1] + # radius what you asked for radius = items2[3] units = self.ch_details[ch, 1] # and tag it @@ -1112,22 +1066,33 @@ class LoadResults(ReadHawc2): # 0: Induc. Vz, rpco, R= 1.4 # 1: m/s # 2: Induced wsp Vz of blade 1 at radius 1.37, RP. coo. -# Induc. Vx, locco, R= 1.4 // Induced wsp Vx of blade 1 at radius 1.37, local ae coo. -# Induc. Vy, blco, R= 1.4 // Induced wsp Vy of blade 1 at radius 1.37, local bl coo. -# Induc. Vz, glco, R= 1.4 // Induced wsp Vz of blade 1 at radius 1.37, global coo. -# Induc. Vx, rpco, R= 8.4 // Induced wsp Vx of blade 1 at radius 8.43, RP. coo. + # Induc. Vx, locco, R= 1.4 + # Induced wsp Vx of blade 1 at radius 1.37, local ae coo. + # Induc. Vy, blco, R= 1.4 + # Induced wsp Vy of blade 1 at radius 1.37, local bl coo. + # Induc. Vz, glco, R= 1.4 + # Induced wsp Vz of blade 1 at radius 1.37, global coo. + # Induc. Vx, rpco, R= 8.4 + # Induced wsp Vx of blade 1 at radius 8.43, RP. coo. elif self.ch_details[ch, 0].strip()[:5] == 'Induc': items = self.ch_details[ch, 2].split(' ') items = misc.remove_items(items, '') + coord = self.ch_details[ch, 2].split(', ')[1].strip() blade_nr = int(items[5]) - radius = float(items[8].replace(',', '')) + + # radius what you get +# radius = float(items[8].replace(',', '')) + # radius what you asked for + tmp = self.ch_details[ch, 0].split(' ') + radius = float(misc.remove_items(tmp, '')[-1]) + items = self.ch_details[ch, 0].split(',') - coord = items[1].strip() component = items[0][-2:] units = self.ch_details[ch, 1] + # and tag it rpl = (coord, blade_nr, component, radius) - tag = 'induc-%s-blade-%1i-%s-r-%03.02f' % rpl + tag = 'induc-%s-blade-%1i-%s-r-%03.01f' % rpl # save all info in the dict channelinfo = {} channelinfo['blade_nr'] = blade_nr @@ -1138,6 +1103,53 @@ class LoadResults(ReadHawc2): channelinfo['units'] = units channelinfo['chi'] = ch + # ----------------------------------------------------------------- + # MORE AERO SENSORS + # Ae intfrc Fx, rpco, R= 0.0 + # Aero int. force Fx of blade 1 at radius 0.00, RP coo. + # Ae secfrc Fy, R= 25.0 + # Aero force Fy of blade 1 at radius 24.11 + # Ae pos x, glco, R= 88.2 + # Aero position x of blade 1 at radius 88.17, global coo. + elif self.ch_details[ch, 0].strip()[:2] == 'Ae': + units = self.ch_details[ch, 1] + + items = self.ch_details[ch, 2].split(' ') + items = misc.remove_items(items, '') + # find blade number + tmp = self.ch_details[ch, 2].split('blade ')[1].strip() + blade_nr = int(tmp.split(' ')[0]) + tmp = self.ch_details[ch, 2].split('radius ')[1].strip() + tmp = tmp.split(',') + + # radius what you get +# radius = float(tmp[0]) + # radius what you asked for + tmp = self.ch_details[ch, 0].split(' ') + radius = float(misc.remove_items(tmp, '')[-1]) + + if len(tmp) > 1: + coord = tmp[1].strip() + else: + coord = 'aero' + + items = self.ch_details[ch, 0].split(' ') + sensortype = items[1] + component = items[2].replace(',', '') + + # save all info in the dict + channelinfo = {} + channelinfo['blade_nr'] = blade_nr + channelinfo['sensortype'] = sensortype + channelinfo['radius'] = radius + channelinfo['coord'] = coord + channelinfo['component'] = component + channelinfo['units'] = units + channelinfo['chi'] = ch + + rpl = (coord, blade_nr, sensortype, component, radius) + tag = 'aero-%s-blade-%1i-%s-%s-r-%03.01f' % rpl + # TODO: wind speed # some spaces have been trimmed here # WSP gl. coo.,Vy m/s @@ -1191,20 +1203,26 @@ class LoadResults(ReadHawc2): channelinfo['sensortag'] = sensortag # FIXME: direction is the same as component, right? channelinfo['direction'] = direction + channelinfo['sensortype'] = 'wsp-global' # WIND SPEED AT BLADE # 0: WSP Vx, glco, R= 61.5 # 2: Wind speed Vx of blade 1 at radius 61.52, global coo. elif self.ch_details[ch, 0].startswith('WSP V'): units = self.ch_details[ch, 1].strip() - direction = self.ch_details[ch, 0].split(' ')[1].strip() + tmp = self.ch_details[ch, 0].split(' ')[1].strip() + direction = tmp.replace(',', '') blade_nr = self.ch_details[ch, 2].split('blade')[1].strip()[:2] - radius = self.ch_details[ch, 2].split('radius')[1].split(',')[0] coord = self.ch_details[ch, 2].split(',')[1].strip() - - radius = radius.strip() blade_nr = blade_nr.strip() + # radius what you get +# radius = self.ch_details[ch, 2].split('radius')[1].split(',')[0] +# radius = radius.strip() + # radius what you asked for + tmp = self.ch_details[ch, 0].split(' ') + radius = misc.remove_items(tmp, '')[-1].strip() + # and tag it rpl = (direction, blade_nr, radius, coord) tag = 'wsp-blade-%s-%s-%s-%s' % rpl @@ -1217,6 +1235,7 @@ class LoadResults(ReadHawc2): channelinfo['radius'] = float(radius) channelinfo['units'] = units channelinfo['chi'] = ch + channelinfo['sensortype'] = 'wsp-blade' # FLAP ANGLE # 2: Flap angle for blade 3 flap number 1 @@ -1256,14 +1275,15 @@ class LoadResults(ReadHawc2): tag = base + '_%i' % tag_nr # ----------------------------------------------------------------- - # ignore all the other cases we don't know how to deal with + # If all this fails, just combine channel name and description else: - # if we get here, we don't have support yet for that sensor - # and hence we can't save it. Continue with next channel - continue + tag = '-'.join(self.ch_details[ch,:3].tolist()) + channelinfo = {} + channelinfo['chi'] = ch + channelinfo['units'] = self.ch_details[ch, 1].strip() # ----------------------------------------------------------------- - # ignore if we have a non unique tag + # add a v_XXX tag in case the channel already exists if tag in self.ch_dict: jj = 1 while True: @@ -1273,9 +1293,7 @@ class LoadResults(ReadHawc2): else: tag = tag_new break -# msg = 'non unique tag for HAWC2 results, ignoring: %s' % tag -# logging.warn(msg) -# else: + self.ch_dict[tag] = copy.copy(channelinfo) # ----------------------------------------------------------------- @@ -1378,6 +1396,15 @@ class LoadResults(ReadHawc2): return slice_, window, zoomtype, time_range + def sig2df(self): + """Convert sig to dataframe with unique channel names as column names. + """ + # channels that are not part of the naming scheme are not included + df = pd.DataFrame(self.sig[:,self.ch_df.index], + columns=self.ch_df['unique_ch_name']) + + return df + # TODO: general signal method, this is not HAWC2 specific, move out def calc_stats(self, sig, i0=0, i1=None):