forked from old-NWTC/FAST
-
Notifications
You must be signed in to change notification settings - Fork 0
/
ChangeLog.txt
4305 lines (4042 loc) · 269 KB
/
ChangeLog.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
FAST Change Log
------------------
====================================================================================================================================
FAST v8.16.00a-bjj 27-Jul-2016 B. Jonkman
Changes to FAST
-------
- Added Linearization features for ED, AD, SrvD, and IfW:
* added linearization section to primary FAST input files and documented it in ReadMe
* updated AeroDyn v15 input files with new FrozenWake input (also changed SumPrint to true because CertTest expected AD summary file)
* added new FAST_Lin.f90 source file and updated all compiling files with this change
- fixed seg fault that occurred when you asked for VTK stick-figure files when using BeamDyn without AeroDyn
- modified several modules to get their ModName from FAST instead of appending it inside the module
- changed case on BladedInterface.F90 and OrcaFlex/OrcaFlexInterface.F90 because Doxygen won't preprocess files unless they have uppercase file extensions. These two are particularly bad without preprocessor directives.
- fixed issue in complex FFT that caused it to crash with large arrays
- fixed visualization rates specified in FAST summary file (times displayed were multiplied by DT_out instead of DT)
- fixed potential memory leak in CreateCheckpoint if it encountered an error
CertTests
-------
- Added Test 14, linearization and eigenanalysis
- fixed typos in InflowWind input files
Utilities
-------
- replaced SimulationToolbox with MATLAB_Toolbox
- modified FAST2MATLAB/FAST2Matlab.m so that if it *reads* a table with more header columns than columns in the table, it ignores the headers for the missing columns.
This is useful for converting AD15 airfoil files, which may or may not contain the cm column. Scripts were already set to ignore *writing* columns that didn't exist.
- updated FAST2Matlab.m and Matlab2FAST.m so that variables can contain the word "OutList" in their comments without it thinking it is the OutList section.
- modified registry command in compile scripts for IfW_UniformWind so it doesn't use -noextrap anymore;
- added matlab script to convert FAST 8.15 input files to 8.16
- added Matlab function to read (text) linearization output files generated by FAST 8
====================================================================================================================================
FAST v8.15.00a-bjj 12-Apr-2016 B. Jonkman
Changes to FAST
-------
- added check to compute jacobian for first 5 steps of simulations with OrcaFlex because Orcina's newest release (10.0?) didn't work when computing just the first 2
- updated all modules except MAP++ to use new MiscVars type
- split FAST_Subs.f90 into FAST_Subs.f90 and FAST_Solver.f90
- updated many comments for doxygen and reordered subroutines for better readability
- changed intent(out) to intent(inout) on FAST_RestoreFromCheckpoint_T() because gfortran (gcc v4.6.2 from mingw32) ran out of memory when compiling it otherwise.
- fixed copy of OtherStates in Orca, which we wouldn't notice because it doesn't use other states.
- fixed issue where Orca data wasn't destroyed at end of simulation (caused issues in Simulink simulations).
- added check so BD can't be in static analysis when coupled to FAST
- Added code to output VTK graphics files; Code is based on work from Tom Brown (visiting professional from Eastern New Mexico University, summer 2015)
- when visualization is requested, all meshes that currently exist are written out (with .DebugError. in file name) when the code aborts on error
- removed the fatal error when trying to output text files of long simulations (because it doesn't fit in the 10-character limit on the time channel).
Instead I increase the size of the time channel and print a warning about some NREL postprocessors.
- added x64 configuration in project file
- converted the output array to single-precision before writing to text files to prevent asteriks in text files in double-precision
ElastoDyn
-------
- fixed type difference in UserSubs.f90/UserTeet() that prevented code from compiling
- added initialization output for tower base position and added accelerations for tower top and tower base (which involved defining several arrays starting at 0);
- changed ElastoDyn tower input mesh from line2 to point because it didn't handle any loads transferred to the tower top or tower base correctly.
- updated ElastoDyn blade input meshes to receive point loads instead of distributed loads because previous mesh ignored any values input on the blade tip and blade root
- split part of ElastoDyn.f90 into ElastoDyn_IO.f90
- removed "miscVar" from ED other states
- moved routines for file I/O and data validation from ElastoDyn.f90 into ElastoDyn_IO.f90.
- added ED_UserSubs.f90, which is basically the ED subroutines from ServoDyn's UserSubs.f90 file, now in a module (so Doxygen doesn't get so confused)
- added HubRad as InitOutput for FAST surface visualization
ServoDyn
------
- added STATIC_DLL_LOAD preprocessor directive for OpenFOAM to load the DLL on program start regardless of if it is being used
(this is to fix a problem caused by the MPI task not making separate copies of the dynamically loaded library)
- added preprocessor directive DEBUG_BLADED_INTERFACE to output ugly degubbing files when calling Bladed DLLs
- renamed NumSCin and NumSCout to NumCtrl2SC and NumSC2Ctrl for a little more clarity. Fixed copy-paste error that used u instead of y in the supercontroller data arrays
- added two additional lines in the input file for tower TMD
- added OutList outputs for Tower TMD (TTMD_XQ, TTMD_XQD, TTMD_YQ, TTMD_YQD)
- updated TMD module with latest code from UMass
- removed "miscVar" from ED other states
- Added DLL_ProcName to the ServoDyn input file instead of using the hardcoded value "DISCON". This allows us to make wrapper DLLs for
black-box Bladed DLLs (that are built with a procedure already called DISCON). Note that DLL_ProcName is case sensitive.
- moved all the user subroutines to modules (primarily for doxygen). removed subs that are used in ElastoDyn and put them in the ED repository.
CertTests
-------
- updated 5MW and UAE airfoils with airfoil coordinates for visualization
- added visualization section to primary FAST input files
- modified several tests to use AeroDyn v15 input filesS
Utilities
-------
- I added compiler directive IMPLICIT_DLLEXPORT to the DLL source files to fix fatal compiler errors on Mac with gfortran v5.x.
- updated ReadFASTtext.m so PlotFASToutput.m can read files without units (like IceDyn's driver output)
- added doxygen format to code generated by Write_ChckOutLst.m
Registry
-------
- added MiscVar as a standard FAST framework type
- removed some extraneous switches and variables from outdated C++ interface
- modified templates for module and registry to use MiscVarType (and fixed issue with extra call to fclose when these were generated)
[i.e., The FAST registry can be run in mode that generates template module .f90 code and registry input files. These files now contain
MiscVar types and should match (with ModuleName and ModName replaced with new text) the template found here: https://github.com/OpenFAST/TemplateModule.]
- changed name of registry input file that is generated from template to <ModuleName>_Registry.txt instead of Registry_<ModuleName>.txt
====================================================================================================================================
FAST v8.12.00a-bjj 6-October-2015 B. Jonkman
Changes to FAST
-------
- made turbine-level data type and wrapper routines that use them to call routines in FAST_Subs.f90 to eventually allow for multi-turbine instances of FAST.
- Added FAST_CreateCheckpoint and FAST_Restart routines to FAST_Library.f90 and FAST_Prog.c, and added the definitions to the C header file.
- added restart capability (new line in primary input file): new calling syntax for restart: "FAST.exe -restart CheckpointFileRoot"
- replaced InflowWind v2.0 with InflowWind v3.0; it has an input file listed in the primary FAST file.
- renamed AeroDyn to AeroDyn14 in preparation for AeroDyn 15, then added AeroDyn 15 (called "AeroDyn")
- Added BeamDyn
- added OpenFOAM-SuperController integrations for SOWFA
- added integration for OrcaFlex interface
- Fixed potential issue when calculating number of output points for binary file; used NINT instead of CEILING so it could occasionally be off by 1.
- fixed problem with error handling in mooring line modules, which didn't appear until HD wasn't used (i.e., OrcaFlex).
- added check that OrcaFlex can't be used with restart capabilities
- updated primary FAST input file: removed CompUserPtfmLd and CompUserTwrLd because they aren't used, and updated comment on CompMooring line re: OrcaFlex interface.
- added option to output ED mass matrix (with preprocessor directive)
ElastoDyn
-------
- modified code so ElastoDyn can be run with no blades (necessary for coupling with BeamDyn); this required many mesh and index changes
- added some new variables to calculate values at the root and blade tip for BD and AD15 coupling
- added different versions of meshes for coupling with AD15 vs AD14
- added BldNodes to ElastoDyn input file and use that to discretize the blade when AeroDyn14 isn't used
- changed ED CoordSys, states, and translational displacements to be R8Ki for coupling with BD in single precision
ServoDyn
-------
- fixed issue in SrvD_CalcOutput that caused segmentation faults in gfortran when using TMD
- removed option for "simple" yaw control in ServoDyn because it wasn't implemented anyway. (still need to update input files with change to the comment line)
- fixed bug in SrvD WriteOutput: BldPitchC1, BldPitchC2, and BldPitchC3 were output in radians instead of degrees as advertised
- updated ServoDyn with two extra inputs (DLL_InFile and DLL_DT); updated input files accordingly;
- modified SrvD so that DLL can be called at an integer multiple of the module's DT
- added DLL_Ramp and BPCutOff to ServoDyn input file, which add linear ramp and use a first-order filter to values from the Bladed DLL (for BeamDyn sensitivity because some controllers have step-function changes in pitch, etc)
- updated record 11 in the AvrSWAP array to use the previous demanded values, not the new filtered ones
- removed UserPtfmLd and UserTwrLd from UserSubs.f90 (were never called anyway)
- added some initialization inputs and inputs to ServoDyn to implement v4.0 of the Bladed Interface
CertTests
-------
- updated DISCON DLLs to allow -8/-9 flags for creating checkpoint files and restarting from them
- added a Test 26 for BeamDyn
- updated DISCON dlls minimum time to be less than the BeamDyn time step
- Test23 now uses FEAMooring instead of MAP.
- Test25 now uses MoorDyn instead of MAP.
Utilities
-------
- updated PlotCertTestResults.m to save figures using Matlab 2014b syntax (earlier version won't work).
- modified conversion script to read/write AeroDyn input files
- updated conversion scripts for 8.12
- modified CertTest.bat so it's easier to compare files in different directories
- set GenerateManifest="false" in FAST_Project; hopefully this will not cause harm and will prevent some questions about Intel's occasional errors in generating it.
- added some options in makefile to easily create FAST_Library.{dll | so}
- added options in makefile to compile mac/linux with dynamic loading of dynamic libraries (e.g., discon controllers)
- fixed issue with returning file name in GetFullFileName.m when fileparts returned an empty directory name in Matlab conversion scripts.
Registry
-------
- modified pack/unpack routines so the work for restart capability
- fixed segmentation fault in extrap/interp routines when compiled with gfortran
- added -O <out_dir> option (location for output file)
- added support for R8Ki variables
====================================================================================================================================
FAST v8.10.00a-bjj 31-March-2015 B. Jonkman
- fixed Test25 mooring file to match line numbering for OC4 project
- reconfigured main program so it can easily be made a DLL
- replaced MAP with MAP++ module
- added Simulink interface with sample models
- modified ServoDyn control mode switches
- added "none" option for high-speed shaft brake mode in ServoDyn
- added TMD module to ServoDyn
- added MoorDyn module as 3rd mooring module (not fully tested)
- added high-speed shaft brake
- added gear-box friction
- put HSS Brake back into CertTest 2 (like it was in v7)
- I removed calls to Crunch in the CertTest.bat file and removed comparisons of files generated by Crunch
====================================================================================================================================
FAST v8.09.00a-bjj 30-September-2014 B. Jonkman
- fixed issue with wrong tower distributed with the Tripod model (Test20)
- updated SubDyn and HydroDyn models (WAMIT2 and Waves2 modules)
- added DWM source code for compilation
====================================================================================================================================
FAST v8.08.00c-bjj 30-June-2014 B. Jonkman
--------------------------------------------
Changes to FAST source code:
--------------------------------------------
+ Added the coupling ED-HD-SD coupling so that HD and SD can be used together.
+ Cleaned up input-output solve, so that extrap order actually does something.
- added compiler directives for doing input-output solve option 1 before option 2 (may be a better option later, when ServoDyn
and/or AeroDyn deal with output and states properly)
- added compiler directives to output the added-mass matrix and the jacobian
+ Modified logic to ensure Jacobian gets recalculated on correction steps
+ Added option for subcycling (it currently copies OtherStates, and we have no need to use subcycles in our models)
+ Added ability to compile in double or single precision
+ Added new modules to FAST: IceFloe, FEAMooring, and IceDyn.
+ Feature flags changed to feature switches in the FAST primary input file.
+ Renamed some variables for the file name input in the FAST primary input file.
+ Standardized output file names for FAST modules. The new convention is <RootName>[.<ModName>].<ext>, with extensions of
[sum | out | outb | ech]
+ Simulation status is now displayed at t=0.
+ Modified time ratio to include only the CPU time after initialization
+ Changed warning/error message when no input file was specified on line
+ Added information about Jacobian size to FAST summary file
+ Added FAST (glue-code) time step to summary file
+ Renamed "onshore" to "land-based" in the FAST summary file
+ Added option to input "default" as requested dt in AeroDyn, ServoDyn, ElastoDyn, & SubDyn
+ Updated some error handling
+ Added check so that PJM's NEWTOWER influence model cannot be used with offshore floating turbines.
+ Replaced GaussElim with an LU decomposition, using LAPACK routines SGETRF and SGETRS which means the solve takes n^2 instead of
n^3/3 operations. This significantly speeds up the models that use SubDyn.
+ added check that ElastoDyn's PtfmRefzt value must not be negative for floating offshore systems.
(FAST isn't the most ideal place for this check, but that's where it is now.)
--------------------------------------------
Changes to ElastoDyn source code:
--------------------------------------------
+ modified ElastoDyn's BladeLn2Mesh (input and output) so that it is now an array of Meshes instead of one big mesh.
(This is to correspond with AeroDyn's method of separate meshes.)
+ modified linear teeter-damper moment in ED, based on bug reported here: https://wind.nrel.gov/forum/wind/viewtopic.php?f=4&t=1073
+ changed Mod to Modulo in the GeAz output (and input) to avoid rare instances when Azimuth was output as negative
+ Fixed bug in ED's implementation of AM4, which incorrectly initialized the state history if corrections were made.
+ fixed error message when NacYaw is outside range: https://wind-dev.nrel.gov/bugzilla/show_bug.cgi?id=520
--------------------------------------------
Changes to CertTest:
--------------------------------------------
+ modified tests that used extrap order 0, which is no longer allowed
*** 5 MW models (Tests 18-25) ***
- all of these models use a new FF wind file.
- The DISCON*_win32.dll files used in ServoDyn have been compiled with /libs:static instead of /libs:dll to avoid issues
if users didn't have IVF installed.
- added limit to pitch angles coming out of DISCON*.DLLs (previously could have gone outside range if pitch rate was max or min
rate for extended period of time)
- Test 18 (land-based 5MW, "Onshore"):
+ We fixed the AeroDyn tower input file's NTwrRe value, which was set incorrectly.
+ We updated the wind file so that it contains points on the tower. Previously, it assumed they were all 0. (because
InflowWind didn't trap the error properly)
+ We increased the time step to be the same as FAST v7.
*** Models of fixed-bottom offshore turbines ***
- Test 19 (OC3 Monopile):
+ This test was previously called Monopile_RF, but has been renamed OC3Monopile.
+ added HydroDyn
+ we increased the integration time step
+ we reduced number of SD modes to 0
+ we added 1% damping to heave in HydroDyn
- Test 20 (OC3 Tripod):
+ this is a newly released model
- Test 21 (OC4 Jacket):
+ this is a newly released model
*** Models of floating offshore turbines ***
- I modified the time steps of the floating offshore cases to be 0.0125, as they were in FAST v7. Earlier issues related to
frequencies seem to have been solved with extrapolation.
- Test 23 (MIT-NREL TLP):
+ This test was previously called "Floating_TLP", but has been renamed "MIT_NREL_TLP"
- Test 24 (OC3 Hywind):
+ This test was previously called "Floating_OC3Hywind", but now is just "OC3Hywind".
+ the CB input parameter in the MAP input file was changed to 1e-3. (it should actually be zero, but is now set to a small
number to get around MAP division-by-zero error)
- Test 25 (OC4 DeepCwind Semi):
+ this is a newly released model
--------------------------------------------
Changes to utility files:
--------------------------------------------
+ added Matlab script to convert FAST/HydroDyn input files from FAST v8.3 to versions in this release
+ added getPSD.m functionality to PlotFASToutput.m [I'm not sure I'm going to distribute this, though.]
+ modified template FAST file so that InterpOrder isn't 0, which isn't allowed
+ updated newInputs_FAST_v8_05.m so that InterpOrder is changed to 2 if it was 0 before
+ updated FAST2Matlab and Matlab2FAST to work be able to read/write AeroDyn v13/14 files; also prevented "Inf" from being read as a
number[(as in "InfModel" was = oldValue(Inf) + label("Model")]
+ added Matlab DrawMesh() function to draw FAST meshes, which were written with MeshWrMin() in the Fortran code.
+ I updated ReadFASTbinary.m to use a faster method of reading the file, based on feedback from the forum.
+ Matlab script to read matrices from SubDyn's summary file
+ PlotFASToutput.m, new Matlab function to plot FAST-style output files
+ added Registry source files and gcc makefile so Registry can be compiled on non-Windows systems
+ added makefile and source files to create an empty MAP dll, so that FAST can be compiled and run on other systems (except for
floating models that use MAP)
--------------------------------------------
Changes in compiling scripts:
--------------------------------------------
+ modified Compile_DISCON_DLL.bat to use /libs:static instead of /libs:dll
+ added makefile, which uses LAPACK and BLAS libraries
+ Added compiling options:
-- Large Address Aware switch
-- increased stack reserve size
+ The MAP dll no longer depends on python
+ added 64-bit version of FAST, MAP (dummy), and 5MW Offshore controller. This is useful for fixed-bottom and land-based turbines only. 64-bit MAP is unavailable.
====================================================================================================================================
FAST v8.03.02b-bjj 3-Oct-2013 B. Jonkman
I integrated MAP, SubDyn, HydroDyn, and new versions of AeroDyn and InflowWind (in FAST framework).
I updated the coupling scheme with a predictor-corrector approach.
I added a summary file.
I added new inputs to the main input file, including InterpOrder, AbortErrLev, DT_UJac, UJacSclFact, CompMAP, and MAPFile.
UJacSclFact is used to scale the loads from HydroDyn or SubDyn in the Jacobian calculation so that they are roughly the same
order of magnitude as the accelerations from ElastoDyn.
DT_UJac determines how often the Jacobian needs to be calculated in the ElastoDyn-HydroDyn and ElastoDyn-SubDyn coupling.
If the system doesn't rotate much, it can be set to a value larger than TMax.
I added the NREL 5MW Baseline turbine tests to the CertTest cases.
I reorganized the files in the CertTest folder by turbine.
We distribute under the Apache 2.0 license.
====================================================================================================================================
v8.00.00a-bjj 31-Mar-2013 B. Jonkman
I replaced most of the global variables with variables in types from the FAST Registry.
I removed the CrossProd subroutine from FAST.f90 and replaced it with a CROSS_PRODUCT function in the NWTC Library.
I removed the feature that enabled users to turn on/off DOFs during simulation (it didn't work properly before)
I split the code into three distinct parts: FAST (glue-code), ElastoDyn, and ServoDyn. Please see other documentation
for complete description of the changes.
Changes in functionality:
The Nacelle Yaw Control override maneuver is now based on the commanded yaw position instead of the input (actual) yaw position.
The override maneuvers for blade pitch and nacelle yaw now specify a rate in the input file instead of an end time. A Matlab script to help the conversion is included in the archive.
I removed GBRatio from all the user control routines (LSS_Spd send instead of HSS_Spd and GBratio for pitch control)
I fixed a bug in the SimStatus when SttsTime /= 1 second.
We replaced AeroCent with PitchAxis in the blade properties table: PitchAxis = 0.5 - AeroCent
Variable SgnPrvLSTQ has been removed--basically removing gearbox friction--until we figure out how to put it in the new framework.
The fix of the HSSBrTrq has been removed.
I changed PtfmCM to PtfmCMzt such that PtfmCMzt = -PtfmCM and added PtfmCMxt and PtfmCMyt to the input file to incorporate platform center-of-mass lateral offsets.
v8.00.00c-bjj 9-Apr-2013 B. Jonkman
I modified the source code so that the /assume:realloc_lhs switch isn't necessary. This required a manual change to the ED_Input_ExtrapInterp routine
(bug reported in bugzilla).
ServoDyn v1.01.01b-bjj
I added the Bladed DLL Interface as a standard option.
ElastoDyn v1.01.02a-bjj
I created a new variable called PtfmRefzt to replace PtfmRef, with PtfmRefzt = - PtfmRef.
I created a new variable called TowerBsHt to replace TwrRBHt and TwrDraft, with TowerBsHt = TwrRBHt - TwrDraft
====================================================================================================================================
VERSION 7:
====================================================================================================================================
v7.02.00c-bjj 30-Nov-2012 B. Jonkman
I removed the (:) from LNodesX and LNodesZ so that the array bounds checking wouldn't complain in debug mode.
I removed DFFORT.DLL from the archive (we no longer support CVF).
I added two files to the Windows archive: a batch file to compile DISCON.DLL, and a sample mex opts file
for Matlab with IVF 12 and Visual Studio 2010 Shell.
Compilation info:
Linked with
NWTC Library v1.05.01a-bjj, 8-Nov-2012 B. Jonkman
AeroDyn v13.00.01b-bjj, 28-Aug-2012 B. Jonkman
InflowWind v1.01.00b-bjj, 10-Aug-2012, B. Jonkman
Intel(R) Visual Fortran Compiler XE 12.1.3.300 [IA-32] with Microsoft Visual Studio 2010 Shell (Integrated)
Simulink compiled with Matlab R2012a (32-bit).
====================================================================================================================================
v7.02.00b-bjj 29-Oct-2012 B. Jonkman
I added ReadFASTbinary.m file to the archive.
I added Paul Fleming's changes for creating making FAST a DLL for LabVIEW. This involved creating a new
FAST_RT_DLL.f90 file, adding a Cmpl4LV switch, and moving variable HSSBrFrac from a subroutine to a module.
I modified the Archive.bat file to include tar.gz format. I reworked the ArcAll.txt and ArcFiles.txt files as follows:
All archives contain files listed in ArcFiles.txt.
Windows archives contain files listed in ArcFiles.txt and ArcWin.txt
The maintenance/"all" archives contain files listed in ArcFiles.txt, ArcWin.txt, and ArcMaint.txt
====================================================================================================================================
v7.02.00a-bjj 28-Aug-2012 B. Jonkman
I modified the input file, adding a line for "OutFileFmt", which is a switch indicating if the tabular
output should be (1) a text file, (2) a binary file, or (3) both text and binary files. There are two
types of binary output: (1) one that includes the time channel stored as packed 32-bit integers, and
(2) one that does not contain the entire time channel; it contains only the first time and the time
increment (rate), which implies that we cannot output variable time steps in the same file. FAST will
generate files in format (2) when it is a standalone program, but format (1) when it is compiled as
an SFunc in Simulink (Simulink does not necessarily output data at a constant rate). This different
format is indicated by an integer FileID in the binary file header (note that post-processors MUST
have output at a constant rate to work properly.) I added this OutFileFmt to the FAST2ADAMS datasets
for use in A2AD. See https://wind-dev.nrel.gov/bugzilla/show_bug.cgi?id=150
The input parameter TMax does not have the upper limit limitation of 9999.999 seconds when only binary
tabular (time-marching) output is requested. The limit still exists for tabular text output. See
https://wind-dev.nrel.gov/bugzilla/show_bug.cgi?id=147
I replaced the code to read the OutList input parameter with the ReadOutputList() subroutine from the
NWTC Subroutine Library. (HydroDyn uses the same code.)
====================================================================================================================================
v7.01.01c-bjj 13-Aug-2012 B. Jonkman
The WAMITFile and GHWvFile variables didn't include logic for PathIsRelative() so when people ran FAST
from different directories, it couldn't always find these file. I fixed the issue.
I added code to output binary output files, named .outb. These files store the output channels as
packed 16-bit integers. They will require more memory to run, but they should run faster if the text
files are not output. See https://wind-dev.nrel.gov/bugzilla/show_bug.cgi?id=150
====================================================================================================================================
v7.01.01b-bjj 16-May-2012 B. Jonkman
I updated the call to read AzimB1Up so that the echo file (and message when an error occurred) no
longer says it is the blade-tip radius. This was reported by user Felix Hess.
====================================================================================================================================
v7.01.01a-bjj 06-March-2012 B. Jonkman
The IDCntrl array had indexes mixed up; the allocation statement was the reverse of what was
used in the call to MakeADM_WrICArrays().
I removed some extra space on lines in FAST2ADAMS.f90 that were too long. (reported by Andrew Ning)
I added a parameter to use to easily make the changes required to model the OC3 Hywind.
I removed the link to the FAST Verification Page from the FAST web page.
I modified the OutListParameters.xlsx file: Per jmj, I removed the word "local" from the "Convention"
column of inputs Spn{1,2,..,9}TD{y,y,z}b{1,2,3}, which incorrectly said
"Directed about the local {x,y,z}b1-axis".
====================================================================================================================================
v7.01.00a-bjj, 16-Feb-2012 B. Jonkman
None of these changes effects the simulation results.
Compiled with NWTC Library v1.04.00e-bjj.
I added OutListParameters.xlsx to the archive to replace OutList.txt.
I modified the FAST_IO.f90/ChckOutLst() subroutine to avoid the optimization
loss error that IVF 11 generates when it compiles. The SELECT statement
has been replaced with arrays that are searched using a binary algorithm. (I
added function IndexCharAry() in the NWTC Subroutine Library to perform the
search.) It doesn't seem to change the performance on IVF 10.1, or some cases
on IVF 11, but it does significantly improve the time on several other IVF 11
cases. This algorithm requires the Fortran 2003 feature that allows 255
continuation lines (as opposed to Fortran 95's continuation 39 lines)
I created a Matlab script, "Write_ChckOutLst.m", and added it to the archive.
This script reads the OutListParameters.xlsx file and creates Fortran code
for the Output MODULE and ChckOutLst() SUBROUTINE.
I modified all the units columns that contained seconds abbreviated by "sec"
to "s" instead. The extra 2 characters allowed me to change "deg/sec2"
to "deg/s^2", which follows other similar units (e.g., "m/s^2"), and
will look nicer in Matlab plots that use these units.
I increased the MaxOutputs parameter from 200 to the total number of avaliable
outputs in the FAST_Mods.f90/Output module. No one could remember why the
limit of 200 was there in the first place.
I replaced variables OutInd and OutSign with OutParam%Indx and OutParam%SignM,
respectively. This corresponds to enhancements to I/O in HydroDyn that use
the same matlab script to generate portions of the output code.
I fixed some nonstandard Fortran 2003 (I/O lists with parenthesis) in FAST_Lin.f90.
I modified the FAST.f90\CalcOuts() subroutine to use DO loops instead of
lots of IF statements. There are now 2/3 fewer lines of code in that routine.
I added several new outputs, listed below. The changes to the Output module in
FAST_Mods.f90 are done from the "Write_ChckOutLst.m" script.
-I added Jose Ascona's changes to calculate forces at the local blade and
tower stations as opposed to just the moments at those locations. These
new outputs are named:
Spn<1,2,...9>FL<x,y,z>b<1,2,3>
TwHt<1,2,...9>FL<x,y,z>t.
-I added new outputs to calculate translations and rotations at the local
blade and tower stations. These outputs are:
Spn<1,2,...9>TD<x,y,z>b<1,2,3> - local translational deflection
Spn<1,2,...9>RD<x,y,z>b<1,2,3> - local rotational deflection
TwHt<1,2,...9>TD<x,y,z>t - local translational deflection
TwHt<1,2,...9>RD<x,y,z>t - local rotational deflection
TwHt<1,2,...9>TP<x,y,z>i - global translational position
TwHt<1,2,...9>RP<x,y,z>i - global rotational position
-I added outputs for internal DOFs in FAST (they are invalid in Adams):
Q[D,D2]_B<1,2,3>E1, Q[D,D2]_B<1,2,3>F1, Q[D,D2]_B<1,2,3>F2,
Q[D,D2]_Teet, Q[D,D2]_DrTr, Q[D,D2]_GeAz,
Q[D,D2]_RFrl, Q[D,D2]_TFrl, Q[D,D2]_Yaw,
Q[D,D2]_TFA1, Q[D,D2]_TSS1, Q[D,D2]_TFA2,
Q[D,D2]_TSS2, Q[D,D2]_Sg, Q[D,D2]_Sw,
Q[D,D2]_Hv, Q[D,D2]_R, Q[D,D2]_P,
Q[D,D2]_Y
To translate these new FAST outputs to Adams, I made the following
modifications in FAST2ADAMS.f90:
- I renamed marker 4030 + K to marker 10000*K + 9100 and made it
relative to marker 10000*K instead of 4000.
- I renamed marker 10000*K + 5100 to 10000*K + 7100;
- I also renamed VFORCE 10000*K + 5100 to 10000*K + 7100.
- I added undeflected blade markers 10000*K + 9000 + J (UndeflBldKSecJ_M).
- I added blade markers oriented with zero twist 10000*K + 7000 + J
(BldKSecJZeroTwist_M).
- I added undeflected tower markers 1900 + J (UndeflTowerSecJ_M)
- I updated the ProgVerOfA2AD_SG string to use A2AD v13.01.XX
I also added a new ModelParameters array to the FAST2Adams datasets to aid in
the new A2AD initialization scheme (and avoid having to send the number of blades
[etc] as a parameter to the USER functions).
I updated the FAST2ADAMSStatements.xls file in the A2AD archive.
When file names in the input file are relative (not absolute), they are now relative
to the directory containing the input file (not the current working directory).
I updated UserVSCont_KP.f90 and PitchCntrl_ACH.f90 so that their input files are
also relative to the main FAST input file (or whatever is passed to the user routines
in the DirRoot parameter). This required a slight modification of the DirRoot variable.
However, FAST *should* be able to be run from different directories now (except for
models using DISCON.dll).
I modified the RANDOM_SEED() call in HydroCalc.f90 so that it can be compiled with gfortran
(it does not assume the intrinsic pRNG has exactly 2 seeds any more).
I fixed an error in Simulink/Samples/Test01_SIG.mdl, which used GenEff as a fraction even
though it is given as a percentage. (Thus, the power was 100 times too high.)
The summary file now prints the platform mass instead of the turbine mass (to avoid confusion
with offshore turbines).
I modified the Nacelle graphics properties in the CertTest's AOC_Adams.dat file. The
nacelle is now larger than the gearbox.
I added ProgAbort statements if PreCrvRef(I) or PreSwpRef(I) are not zero when Adams
models are built. Adams2AD does not work correctly when there is precurve or presweep.
Previously it aborted only when the precurve or presweep was nonzero at the root. This
will be fixed in a future version of FAST-to-ADAMS.
I added tests for (some of) the new outputs to the CertTest.
At the request of MLB, I changed SUBROUTINEs Initialize, Begin, and Input to FAST_Initialize,
FAST_Begin, and FAST_Input.
Compilation info:
Linked with NWTC Library v1.04.00 and AeroDyn v13.00.01a-bjj
Intel Visual Fortran 10.1.024 and Microsoft Development Environment 2003
Simulink compiled with Matlab R2011a.
====================================================================================================================================
v7.00.02a-bjj, 26-Jan-2012 B. Jonkman
None of these changes effects the simulation results.
Compiled with AeroDyn v13.00.01a-bjj.
I fixed a format string that caused the program to crash with FAST input file
values Echo = .TRUE. and PtfmModel = 2 or 3.
I fixed the definitions of BladedDLLInterface variables as defined in kernel32.f90.
(This was requested by A. Elliott, compiling on 64-bit OS.)
To avoid having to change FAST with every bug fix/minor change of Adams2AD, we have
set the A2AD version number without the last 2 digits of the actual version number
(i.e. "v13.00.00" becomes "v13.00."). Note that every time the A2AD files made
by FAST are changed, the first 2-digit number after the decimal (i.e., the
middle 2 digits of the version number) must be changed in A2AD.
In BladedDLLInterface.f90, I set avrSWAP(50) to the number of characters in InFile and
avrSWAP(51) to the number of characters in OutName. This change was requested by
P. Flemming as without it one of GH's DLLs couldn't run.
I moved the TiLstPrn variable in Simulink from a local saved variable to a value stored
in the module so that it can be reset when the simulation ends (and thus reinitialized
for restart).
I added some text to the wind op section of the linearization output file to indicate
that those values are invalid. (They are always listed as 0 because FAST doesn't know
that data, which is internal to the InflowWind module.)
====================================================================================================================================
v7.00.01 20-Jan-2012 B. Jonkman
I removed the change comments and updated the version number.
Compilation info:
Linked with NWTC Library v1.04.00d-bjj and AeroDyn v13.00.00.
Compiled with IVF 10.1.024; Simulink compiled with Matlab R2011a.
Using Microsoft Visual Studio .NET 2003.
====================================================================================================================================
v7.00.01a-bjj, 5-Nov-2010 B. Jonkman
The Abort() called in FAST_IO.f90 is now ProgAbort().
I shortened several lines that exceeded the 132 character limit.
Kristian Sætertrø reported an error, and after some investigation, we
discovered the ADInterfaceComponent positions were sending AeroDyn the
incorrect heights when PtfmRef was non-zero. This problem has been fixed.
I added quotation marks around %IVF_LOC%\IFORTVARS.bat in Compile_FAST.bat.
I renamed the output executable file generated by Compile_FAST.bat to be
"FAST.exe" instead of "FAST_test.exe"
====================================================================================================================================
-------------------------------------------------------------------------------
--------------------------- FAST v7. ------------------------------------------
---------- PLEASE NOTE THAT THIS VERSION IS NOT BACKWARD COMPATIBLE -----------
----------------- WITH VERSIONS OF AERODYN EARLIER THAN v13. ------------------
-------------------------------------------------------------------------------
v7.00.00a-bjj, 31-Mar-2010 B. and J. Jonkman
In SUBROUTINE FAST2ADAMS.f90/MakeADM(), we updated STRING/1 to the latest
program version of A2AD (v13.00.00a-bjj).
We renumbered the archive with the new numbering scheme: X.XX.XX
We added the file, Disclaimer.txt.
====================================================================================================================================
version 6:
====================================================================================================================================
v6.02d-bjj, 10-Mar-2010 B. Jonkman
I updated FAST to use the NWTC_Library routines and to work with the IVF
compiler. This required a bunch of changes, including removing duplicated
subroutines and variables, merging routines that had similar functions in
the NWTC_Library, and modifying some arguments in calls to the new subroutines.
I replaced the timing functions with intrinsic routines.
I replaced the DotProd() subroutine with the intrinsic DOT_PRODUCT().
I put almost all of the FAST source code in MODULES.
I updated SUBROUTINE RtHS() to calculate the positions, orientations, and
velocities of the blade elements in separate loops to facilitate the new
AeroDyn interface (AeroDyn is now called once per time step, not once per
element per time step).
I removed most of the subroutines from AeroCalc.f90 because they are not
needed with the new AeroDyn interface.
I added a FAST_Terminate() function and Noise_Terminate() function to remove some
of the memory leaks present when compiling the S Function for Matlab.
I added logic to test if ALLOCATABLE variables were allocated (which is necessary
when /QSave is used!)
I fixed a bug in BladedDLLInterface.f90 where the loads/power were multiplied
by 0.001 instead of 1000.
I replaced the "INVALID CHANNEL" column headings because Crunch doesn't like
multiple channels with the same name. The variable name is now used for the
name of the column, but "INVALID" is now written in the units line for any
channels that are invalid.
I increased the length of character arrays holding file names from 99 to 1024.
I renamed the echo.out file to <RootName>.ech.
I replaced all "LOGICAL(1)" variables with "LOGICAL"
I modified the checks that certain inputs couldn't be empty strings. Now,
PtfmFile, FurlFile, NoiseFile, ADAMSFile, and LinFile can be empty strings
if they are not going to be used. Before, the program would abort.
I modified how the time stats are printed at the end of the simulation. Previously,
"Total Real Time" was actually the real time for the simulation portion of the
run, and should have been compared with "Simulation CPU time" instead of
"Total CPU time." I removed "Simulation CPU time" and now measure "Total
Real Time" from the start of the simulation to the end. The time ratio now
uses simulated time divided by total real time (previously it divided by
simulation cpu time).
I removed eigenanalysis.m from the archive. It is replaced by GetMats.m and mbc3
found in the source folder of the MBC archive.
I fixed a bug that was present in the gearbox friction influence on the
equations of motion when the GenDOF is False and GBoxEff is less than 100%.
However, if GenDOF is False, the gearbox friction shouldn't influence any
results.
In the CertTest, I
- modified the text in AeroDyn input files, removing the comment
"[currently ignored]" from KinVisc because it isn't true.
- modified the B1PitchF(:) variables to be BlPitchF(:) instead.
- changed the FAST integration time step, DT, from 0.0025 to 0.001 in tests
15-17 (the SWRT models).
- added .out and .plt files to Update.bat
- updated the TurbSim input files for TurbSim 1.50 and made the grid for the
WP model contain an odd number of points.
- updated the Crunch files to work with v3.00.00
- modified Test14.m to call mbc3.m in the MBC source folder. This required
a new environment variable in CertTest.bat (so Matlab finds the files if
they aren't in the user's search path). I also added the /wait command
so the CertTest compares the right .eig file (otherwise, it compared the
old .eig file while Matlab opened).
- I replaced the plots in the .xls files with functionality in a Matlab file
called PlotCertTestResults.m. Run the FAST, Adams, and/or Simulink CertTests
then, call PlotCertTestResults in Matlab using newPath = the FAST CertTest
directory and oldPath = [newPath '\TstFiles']. See PlotCertTestResults.m
for details.
I rewrote the gateway functions for making the Matlab S-function. It is now
modern Fortran and (in my opinion) much easier to read. I did not rework
how the S-function is set up--but that should be looked at sometime. I also
made a SysMatlab.f90 file in the NWTC_Library, and I link this S function with
it so that all of the output will be written to the Matlab command window.
It no longer writes to console.txt.
I made a batch file that can be used to compile FAST with IVF, and I added it
to the archive (it's called Compile_FAST.bat).
====================================================================================================================================
v6.10d-jmj, 13-Aug-2009 J. Jonkman
I fixed a bug that manifested itself when HSSBrMode was set to 2 while the
Bladed DLL interface was being used. The GenTrq argument in SUBROUTINE
BladedDLLInterface.f90/UserHSSBr() was being sent to SUBROUTINE
BladedDLLInterface() instead of the dummy GenTorq variable local to
UserHSSBr(). I'm not sure why the previous version didn't trigger an error
because of the INTENT(IN) attribute of variable GenTrq (bjj: the INTENT(IN)
just checks that the variable isn't on the left side of an = sign.), but the
bug caused the value of GenTrq in DrvTrTrq() to be incorrectly overwritten.
I changed IterRtHS from 1 to 2 in FAST_Lin.f90/Linearize(). This eliminated a
problem when linearizing with GBoxEff < 100.0 as SgnPrvLSTQ may switch signs
between calls to RtHS(). Thanks Alan Wright for reporting this bug!
In FAST2ADAMS.f90/MakeACF_LIN(), I eliminated the ACCGRAV/KGRAV = 0 command
and the NODAMPIN attribute in the LINEAR/EIGENSOL command. Now all of the
*_ADAMS_LIN.acf files generated by the FAST-to-ADAMS preprocessor will use
gravity and include damping when the ADAMS models are linearized. This
change was made because the effects of gravity and damping are important to
the linearization results, especially in floating wind turbines.
In FAST2ADAMS.f90/MakeADM(), I modified the RESULTS statement so that it only
contains DISPLACEMENTS and results from a LINEAR analysis and I formatted
the results into human-readable format to aid in subsequent processing of
the LINEAR output.
I fixed the spelling of "nacelle", which was previously spelled as "nacalle",
for adams_view_name = Nacelle_P, NacelleCM_M, and NacelleHubRef_M in
FAST2ADAMS.f90/MakeADM() and for the error messages for inputs NacLength,
NacRadBot, and NacRadTop in FAST_IO.f90/GetADAMS(). This change does not
affect any of the results.
In FAST_IO.f90/GetPrimary(), I changed the lower limit on input GBoxEff from
inclusive 0.0 to exclusive 0.0. This is because GBoxEff can appear in the
denominator in routine RtHS(). Thanks Erica Bush for reporting this minor
bug!
====================================================================================================================================
v6.10c-jmj
Placeholder for unfinished version.
====================================================================================================================================
v6.10b-eab, 24-Jul-2008 E. Bush
In MODULE FAST_Mods.f90/Modes(), I introduced a new INTEGER(4), PARAMETER,
PolyOrd, that represents the order of the polynomial used to describe a mode
shape. This allows for different order polynomials to describe mode shapes
as opposed to the previous version when all mode shapes had to be sixth
order polynomials (the default is still 6). Also, I changed the last
positions of tower mode shape coefficient arrays to PolyOrd. The number of
iterations in the DO-loop of the SHP function also had to be changed to
PolyOrd.
In the sections TOWER FORE-AFT MODE SHAPES and TOWER SIDE-TO-SIDE MODE SHAPES
of SUBROUTINE FAST_IO.f90/GetTower() and the section BLADE MODE SHAPES of
SUBROUTINE FAST_IO.f90/GetBlade(), I replaced the length of the coefficient
arrays hard-coded as 5 (corresponding to the terms x^2 through x^6) with
PolyOrd-1. Also, I exchanged the number of interations in DO-loops cycling
through mode shape coefficient arrays from 6 to PolyOrd.
In the section BLADE PARAMETERS of SUBROUTINE FAST_IO.f90/Input(), I changed
the last positions of blade mode shape coefficient arrays being allocated to
PolyOrd. Also, the number of iterations in a DO-loop cycling through blade
mode shape coefficient arrays had to be changed to PolyOrd.
To use this new feature, set PolyOrd to the desired polynomial order and
recompile FAST. Then, modify the tower and blade input files to include
PolyOrd-1 number of mode shape coeffiecients.
====================================================================================================================================
v6.10a-jmj, 21-Feb-2007 J. Jonkman
In SUBROUTINE FAST2ADAMS.f90/MakeACF_LIN(), I reworded a couple of error
messages in CALLs to ProgAbort(). This change does not affect any of the
results.
I modified the seabed GRAPHICS statement in the FAST-to-ADAMS preprocessor. I
now make sure that seabed GRAPHICS statement has a radius at least as large
as the maximum mooring line anchor radius. This required changes to MODULE
FAST_Mods.f90/Platform() and SUBROUTINEs FAST_IO.f90/GetPtfm() and
FAST2ADAMS.f90/MakeADM(), but does not affect any of the simulation results.
====================================================================================================================================
v6.02c-jmj, 02-Feb-2007 J. Jonkman
In SUBROUTINE FAST2ADAMS.f90/MakeADM(), I updated STRING/1 to the latest
program version of A2AD (v12.20c-jmj).
I added an upper limit of 9999.999 to the input parameter TMax in order to
avoid an overflow problem in the output file. This required a minor change
to SUBROUTINE FAST_IO.f90/GetPrimary().
In MODULE HydroCalc.f90/FloatingPlatform(), I fixed a bug in the calculation
of the horizontal locations of each line node relative to the anchor that
manifested itself when the node rests on the seabed while the tension is
nonzero.
In MODULE HydroCalc.f90/FloatingPlatform(), I fixed a bug in how WAMIT data is
read in when NInpWvDir = 1 (the error only occured when NInpWvDir = 1).
In MODULE HydroCalc.f90/FixedBottomSupportStructure(), I improved the
calculations for hydrodynamic loading on a monopile. If the current tower
element is only partially-covered by fluid, in addition to the force, I now
compute a moment on the tower element to correct for the fact that the force
is applied only to a portion of the tower element.
I moved SUBROUTINEs InterpStp() and InterpStp_CMPLX() into a MODULE named
InterpSubs() at the top of source file HydroCalc.f90 in support of
improved code optimization. This change does not affect any of the results,
but improved the performance of the code.
====================================================================================================================================
v6.02b-jmj, 15-Nov-2006 J. Jonkman
In SUBROUTINE FAST2ADAMS.f90/MakeADM(), I updated STRING/1 to the latest
program version of A2AD (v12.20b-jmj).
I added blade strain gage output parameters for the local loads and motions of
blades 2 and 3. The names of the new output parameters follow the naming
conventions used for the output parameters previously available for blade 1.
This required changes to MODULE FAST_Mods.f90/Output() and SUBROUTINEs
FAST_IO.f90/ChckOutLst(), FAST.f90/CalcOuts(), and FAST2ADAMS.f90/MakeADM().
This upgrade was requested by Tim McCoy and Dayton Griffin.
I replaced the hard-coded mooring line restoring calculation with a
general-purpose, quasi-static solution based on the analytical catenary
cable equations with seabed interaction. This required changes to MODULEs
FAST_Mods.f90/ADAMSInput(), Output(), and Platform(), HydroCalc.f90/Waves()
and FloatingPlatform() and SUBROUTINEs FAST_IO.f90/GetPtfm() and
ChckOutLst(), FAST.f90/CalcOuts() and Initialize(), and
FAST2ADAMS.f90/MakeADM().
I put in some logic to ensure that the hydrodynamic loads are time invariant
when linearizing a model. The two required conditions are:
(1) WaveMod must be set to 0 and
(2) RdtnTMax must be set to 0.0; indicating no wave radiation.
This required changes to MODULEs FAST_Mods.f90/Platform() and
HydroCalc.f90/Waves() and SUBROUTINEs FAST_IO.f90/GetPtfm() and Input() and
FAST2ADAMS.f90/MakeADM_LIN().
In SUBROUTINEs HydroCalc.f90/Waves() and FloatingPlatform(), I put a MAX(*,1)
in the calculation of NStepWave2 and NStepRdtn2 to ensure that routine PSF()
does not crash when WaveTMax and/or RdtnTMax are very small.
In SUBROUTINE FAST2ADAMS.f90/MakeADM(), I simplified the SFORCE used to
generate free surface GRAPHICS in the FAST-to-ADAMS preprocessor. This
change eliminated the ADAMS direction cosines warning about a (nearly) zero
length in the SFORCE. I also increased the frequency of this "actuator".
In SUBROUTINE FAST2ADAMS.f90/MakeADM(), MakeACF() and MakeACF_LIN(), I also
eliminated the free surface DOFs during an ADAMS linearization analysis.
I upgraded the CertTest to use the latest version of TurbSim (v1.20).
====================================================================================================================================
v6.02a-jmj, 25-Aug-2006 J. Jonkman
I increased the upper limit for the number of blade and tower strain gage
locations (inputs NBlGages and NTwGages) from 5 to 9 and I added new output
parameters for the local loads and motions at the additional strain gage
locations. The names of the new output parameters follow the naming
conventions used for the output parameters previously available at the 5
original strain gage locations. This required changes to MODULE
FAST_Mods.f90/Output() and SUBROUTINEs FAST_IO.f90/GetPrimary(),
FAST_IO.f90/ChckOutLst(), and FAST.f90/CalcOuts(). This upgrade was
requested by David Malcolm and Dayton Griffin.
I added an undocumented feature for modeling the hydrodynamic loading and
mooring system dynamics for floating wind turbines. I did this by allowing
a keyword in place of the integers 0 or 1 in input PtfmLdMod when PtfmModel
= 3. This required changes to MODULE FAST_Mods.f90/EnvCond() and
PlatformLd() and SUBROUTINEs FAST_IO.f90/GetPtfm(), FAST.f90/Initialize(),
FAST.f90/PtfmLoading(), and FAST2ADAMS.f90/MakeADM() and the addition of
source files Source/HydroCalc.f90, FFTMod.f90, and fftpack.f to the FAST
archive. Source files FFTMod.f90 and fftpack.f are taken directly from the
source code of TurbSim. Thanks Bonnie!
I also added an undocumented feature for modeling the hydrodynamic loading on
a monopile. I did this by reading in addition inputs from the platform file
if they exist. Thank you Marshall Buhl for helping me read in GH Bladed
wave data files!
I corrected how the undocumented, zero-valued, partial tower hydrodynamic
forces and moments per unit length are integrated into the equations of
motion. This required changes to SUBROUTINE FAST.f90/RtHS(). This change
does not affect any of the results since the tower hydrodynamic loads were
set to zero in v6.00.
I simplified how the partial platform forces and moments associated with the
QD2T()'s are calculated in SUBROUTINE FAST.f90/RtHS(). This change does not
affect any of the results.
I improved the description of input arguments TFinCPxi, TFinCPyi, and TFinCPzi
in SUBROUTINE UserSubs.f90/UserTFin().
I added an undocumented feature for outputting the incident wave elevation at
the platform reference point and the incident wave kinematics at up to 9
nodes along the undeflected tower [not floating] or undisplaced platform
[floating]. The output names are WaveElev for the wave elevation; Wave#Vxi,
Wave#Vyi, and Wave#Vzi for the wave velocities; and Wave#Axi, Wave#Ayi, and
Wave#Azi for the wave accelerations; where # = 1,2,...,9. This required
changes to MODULE FAST_Mods.f90/Output() and SUBROUTINE
FAST_IO.f90/ChckOutLst() and FAST.f90/CalcOuts().
I moved the CALL to SUBROUTINE FAST_IO.f90/ChckOutLst() from
FAST_IO.f90/GetPrimary() to FAST_IO.f90/Input(). Now the list of output
parameters and units is placed at the end of the echo.out file.
I modified the simple variable speed control parameters to ensure that:
(1) VS_RtGnSp cannot equal zero and
(2) VS_TrGnSp equals VS_SySp when VS_Rgn2K equals zero.
This required minor changes to SUBROUTINEs FAST_IO.f90/GetPrimary() and
Input() and prevents previously possible division by zero errors.
In SUBROUTINE FAST2ADAMS.f90/MakeADM(), I added a GRAPHICS statement to depict
the ground as a CIRCLE of radius TipRad.
In SUBROUTINE FAST2ADAMS.f90/MakeADM(), I added a STRING constant which
represents the program version number of A2AD that is required to run the
ADAMS model.
In SUBROUTINE FAST2ADAMS.f90/MakeADM(), I passed CompAero to the tip brake
drag VFORCE to ensure that CompAero is known within VFOSUB().
I modified SUBROUTINE FAST_Lin.f90/Linearize() so that the rotor speed and
AzimB1Up values are included in the <RootName>.lin file.
In PROGRAM FAST.f90/FAST(), I added a CALL to routine DrvTrTrq() in order to
initialize the value of GenTrq when CalcStdy is False. Before this change,
the value of GenTrqop was computed incorrectly in routine Linearize(), and
hence, output incorrectly in the <RootName>.lin file when CalcStdy was
False. I suspect this had no impact on anyone's results to-date.
In SUBROUTINE FAST_IO.f90/Begin(), I fixed a bug that prohibited the period
character "." from appearing in the input file RootName (it did not affect
the results in any other way). The bug fix ensures that everything after
the last period is the file extension. Thank you to David Malcolm for
finding and reporting this bug.
In SUBROUTINE AeroCalc.f90/AeroCalc(), I scaled the value of t by OnePlusEps
in the check of the elapsed time to the last call to the AeroDyn. Here,
OnePlusEps is a new REAL(ReKi), PARAMETER set equal to ( 1.0 +
EPSILON(OnePlusEps) ), which is the number slighty greater than unity in the
precision of ReKi. I did this to ensure that the AeroDyn is called at every
time step when DTAero = DT, even in the presence of numerical precision
errors. I made a very similar change in SUBROUTINE
BladedDLLInterface.f90/BladedDLLInterface() to ensure that the controller
is called at every time step when DTCntrl = DT. Additionaly, I put on test
on DT and TMax in SUBROUTINE FAST_IO.f90/GetPrimary() to ensure that these
corrections always work regardless of the simulation length and time step.
This change will have a slight affect on the results.
In SUBROUTINE BladedDLLInterface.f90/BladedDLLInterface(), I corrected the
error messages that occur if either avrSWAP(55) or avrSWAP(56) are nonzero.
The prior error messages were misworded. This change does not affect any of
the results.
In Kirk Pierce's example user-written variable-speed control routine,
UserVSCont_KP.f90/UserVSCont(), I fixed two bugs--that is, I added the SAVE
attribute to REAL arrays RPMSCH(:) and TRQSCH(:). This did not cause any
problems when compiling with the Compaq Visual Fortran (CVF) (as I have done
in all previous releases) since all variables are SAVEd by default in CVF.
However, this bug manifested itself when compiling FAST with Intel Visual
Fortran (IVF), which does not SAVE variables by default. Thank you to
Marshall Buhl for finding and reporting this bug.
In SUBROUTINE FAST.f90/SmllRotTrans(), I increased REAL(ReKi), PARAMETER ::
LrgAngle from 0.3 radians (about 17 degrees) to 0.4 radians (about 23
degrees). The old value came from: COS(SmllAngle) ~ 1 and SIN(SmllAngle) ~
SmllAngle results in ~5% error when SmllAngle = 0.3 rad. The new value
comes from: COS(SmllAngle) ~ 1/SQRT( 1 + SmllAngle^2 ) and SIN(SmllAngle) ~
SmllAngle/SQRT( 1 + SmllAngle^2 ) results in ~5% error when SmllAngle = 0.4
rad. The later is the resulting implementation of COS() and SIN() when only
one of the three rotations in TransMat is nonzero. I did not modify the
implementation of TransMat in this change. Consequently,this change does
not affect any of the results.
I renamed both the "PLATFORM MODEL" and "PLATFORM LOADING" sections of the
input files to "PLATFORM". Along with this, I renamed MODULE PlatformLd()
to Platform(). This change does not affect any of the results.
I moved the input validation check for the value of TwrRBHt from SUBROUTINE
FAST_IO.f90/Input() to routines GetPrimary() and GetPtfm(). This change
does not affect any of the results.
I removed references to unused variables from SUBROUTINE FAST.f90/Teeter().
In MODULE SysCVF.f90/SysSubs(), I moved the "USE DFPORT" and "USE System"
statements into the parent MODULE. I also renamed MODULE System() to
SystemMOD() in source file MODULE ModCVF.f90. I replicated these changes in
source files SysLL.f90, SysLU.f90, ModLL.f90, and ModLU.f90. Along with
this change, I had to remove a reference to an unUSEd MODULE in SUBROUTINE
FAST_IO.f90/CheckArgs(), I had to remove a reference to a unused variable in
SUBROUTINE FAST_IO.f90/RunTimes(), and I had to rename CHARACTER variables
"Date" and "Time" to "DateStr" and "TimeStr", respectively in SUBROUTINE
FAST_IO.f90/SimStatus(). This change was requested by Marshall Buhl in
order to avoid a naming conflict when using the Intel Visual Fortran (IVF)
compiler, but does not affect any of the results.
I upgraded the FAST S-Function for use in MATLAB R2006a. The S-Function has
now been changed from FAST_SFunc.dll to FAST_SFunc.mexw32.
I upgraded the FAST S-Function so that the informational and warning messages
routinely written to the command-line window by the FAST executable are
written to a file named Console.txt by the S-Function. Thanks Maureen Hand
for helping me make this change!
In the CertTest, I updated the SWRT linearization input file, SWRT_Linear.dat.
For some reason, this file wasn't updated when new inputs where added to the
linearization control-input file in version FAST v5.1.
In the CertTest, I updated the Eigenanalysis.m file as follows:
RENAMED: All arrays with "Avg" in the name such that "Avg" now appears at
the beginning of the name.
Arrays ModeShapes() and Frequencies() to Eigenvectors() and
Eigenvalues(), respectively.
Arrays ModeShapesAvg() and FrequenciesAvg() to AvgEigenvectors()
and AvgEigenvalues(), respectively.
ADDED: Azimuth-average rotor speed, RotSpeed
Cell array descriptions of the model states, DescStates(), control
inputs, DescCntrlInpt(), input wind disturbances,
DescDisturbnc(), and output measurements, DescOutput().
The azimuth steps, Azimuth(), and reference azimuth angle,
AzimB1Up, from the azimuth title line.
Scalars NRotTripletStates, NRotTripletCntrlInpt, and
NRotTripletOutput, which are the number of state, control input,
and output measurement triplets in the rotating frame,
respectively, as needed for the multi-blade coordinate (MBC)
transformation.
Arrays RotTripletIndicesStates, RotTripletIndicesCntrlInpt, and
RotTripletIndicesOutput, which are the indices for the state,
control input, and output measurement triplets in the rotating
frame, respectively, as needed for the multi-blade coordinate
(MBC) transformation.
Arrays AvgDampedFrequency(), AvgDampedFrequencyHz(),
AvgNaturalFrequency(), AvgNaturalFrequencyHz(),
AvgDampingRatio(), AvgModeShapeMagnitude(), and
AvgModeShapePhaseDeg().
The ability to have the .lin file RootName be defined (through
variable RootName) before calling Eigenanalysis.m
REMOVED: Arrays FrequenciesHz(), FrequenciesAvgHz(), AMatNoDamp(),
ModeShapesNoDamp(), FrequenciesNoDamp(), FrequenciesHzNoDamp(),
AMatAvgNoDamp(), ModeShapesAvgNoDamp(), FrequenciesAvgNoDamp(),
and FrequenciesAvgHzNoDamp().
The "clear all" statement at the beginning of the file.
The user-prompt if the .lin file root name is defined in variable
RootName before Eigenanalysis.m is called.
In the CertTest, I rewrote Test14.m to take advantage of the upgrades made to
Eigenanalysis.m.
====================================================================================================================================
v6.01, 12-Aug-2005 J. Jonkman
I added a MIN( 1.0, * ) to the calculation of output parameter CThrstRad in
SUBROUTINE FAST.f90/CalcOuts() in order to limit the value betweeen 0.0 and
1.0 (inclusive). This change does not affect any of the results other than
the value of CThrstRad.
I rolled up all the alpha changes into this new version. I eliminated all
alpha comments.
====================================================================================================================================
v6.01a-jmj, 29-Jul-2005 J. Jonkman
In source file BladedDLLInterface.f90, I modified the interface to the Bladed-
style master controller DLLs so that we don't have to link with the .lib
file when compiling. This allowed me to remove the /libs:dll Project
compile Option. It also allowed me to remove the DISCON.dll and DISCON.lib
files from the FAST archive. The DFORRT.dll is no longer needed when a DLL
is not being called from FAST--since it is needed when calling a DLL I have
left the DFORRT.dll in the FAST archive. Thank you to Anders Hansen of
Risoe for advice on how to make this change.
I added the DOF index variables, as described in the FAST linearization output
files, to MATLAB file Read_FAST_Input.m so that they are available within
the MATLAB workspace and FAST S-Function and can be used in place of the
index numbers when performing control studies requiring full-state feedback.
This change was requested by Alan Wright and Karl Stol and does not affect
any of the results.
I added additional output names of BlPitch1, BlPitch2, BlPitch3, YawPos,
YawRate, YawAccel, and YawMom to their corresponding output channels. This
required a minor change to SUBROUTINEs FAST_IO.f90/ChckOutLst(). I reworded
the description of the yaw actuator in SUBROUTINE UserSubs.f90/UserYawCont()
as a result of this change. This change does not affect any of the results.
I added INTEGER(4), PARAMETER :: Time = 0 to MODULE FAST_Mods.f90/Output() so
that one can access the Time output channel from the AllOuts() array. This
required that I add the , ONLY: attribute to two USE statements in order to
avoid variable naming conflicts--one in SUBROUTINE FAST_Lin.f90/Linearize()
and the other in SUBROUTINE NoiseSubs.f90/CalcFFTI(). I made use of the new
Time PARAMETER in place of 0 in SUBROUTINE FAST.f90/CalcOuts() and in place
of ZTime in SUBROUTINE FAST_IO.f90/WrOutput() and throughout source file
BladedDLLInterface.f90. This change does not affect any of the results.
In SUBROUTINE BladedDLLInterface.f90/UserYawCont(), I initialized the value of
LastTime to the time of the previous time step instead of to zero in order
to avoid a "kick" in YawPosCom when TYCOn is nonzero.
In SUBROUTINE FAST_IO.f90/GetPrimary(), I reworded the warning message
displayed when the 2nd blade flap mode is enabled without the 1st and I also
added warning messages for when the 2nd tower fore-aft and side-to-side
modes are enabled without the 1st. I am not sure why these warning messages
were absent from the code. This change does not affect any of the results.
In order to account for the generator effeciency specification of 95%, I
increased the simple variable-speed control torque constants of the WindPACT
1.5MW baseline wind turbine model in the CertTest (Test11.fst, Test12.fst,
Test13.fst, and Test14.fst) by 1/0.95. Before this change, the peak power
was topping out at (1500kw)*(0.95) = 1425kw insted of 1500kw. After this
change, the peak power is correct. I'm not sure why the torque constants
were specified incorrectly before.
In the CertTest, I also modified the OutList of several of the test cases in
order to test output channels not previously tested.
====================================================================================================================================
v6.00, 10-Jun-2005 J. Jonkman
I rolled up all the alpha changes into this new version. I eliminated all
alpha comments.
In FAST_IO.f90/GetFurl(), I modified the Abort() error message for
incorrectly-defined inputs RFrlUSSP, RFrlUSDP, TFrlUSSP, and TFrlUSDP. This
change does not affect any of the simulation results.
I added an example platform input file, Platform.dat, to the CertTest folder
of the FAST archive for user's to use. The certification test will be
updated to include testing of new platform motion and loading functionality
once FAST has been interfaced to SML.
I removed the CreatePageAlpha.pl, update_webAlpha.bat, and update_page.bat
scripts from the "all" archive since the Alpha webpage has been removed from
the server.
====================================================================================================================================
v6.00c-jmj, 15-Apr-2005 J. Jonkman