-
Notifications
You must be signed in to change notification settings - Fork 5
/
Copy pathFAST_Mods.f90
2619 lines (2213 loc) · 211 KB
/
FAST_Mods.f90
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
!=======================================================================
MODULE ADAMSInput
! This MODULE stores FAST-to-ADAMS, ADAMS-specifc input parameters.
USE Precision
REAL(ReKi) :: BoomRad ! Radius of the tail boom used for tail boom GRAPHICS.
REAL(ReKi) :: BPActrDmp ! Blade pitch actuator damping constant, (N-m/rad/s).
REAL(ReKi) :: BPActrSpr ! Blade pitch actuator spring stiffness constant, (N-m/rad).
REAL(ReKi) :: CRatioBEA ! The ratio of CMatrix to KMatrix for the blade extensional deflection.
REAL(ReKi) :: CRatioBGJ ! The ratio of CMatrix to KMatrix for the blade torsion deflection.
REAL(ReKi) :: CRatioTEA ! The ratio of CMatrix to KMatrix for the tower extensional deflection.
REAL(ReKi) :: CRatioTGJ ! The ratio of CMatrix to KMatrix for the tower torsion deflection.
REAL(ReKi), PARAMETER :: FrSrfcSpc = 5.0 ! Distance between points on the still water level plane along the incident wave propogation heading direction for depicting the free surface where the elevation of the incident waves will be computed used for free surface GRAPHICS. (meters) !JASON: MAKE THIS AN ACTUAL INPUT TO THE PROGRAM IN ADAMSFile WHEN YOU DOCUMENT THESE ROUTINES!!!!!
REAL(ReKi) :: GBoxLength ! Length, width, height of the gearbox for gearbox GRAPHICS.
REAL(ReKi) :: GenLength ! Length of the generator used for gen. GRAPHICS.
REAL(ReKi) :: GenRad ! Radius of the generator used for gen. GRAPHICS.
REAL(ReKi) :: HubCylRad ! Radius of hub cylincder used for hub GRAPHICS.
REAL(ReKi) :: HSSLength ! Length of high-speed shaft for HSS GRAPHICS.
REAL(ReKi) :: HSSRad ! Radius of the high-speed shaft used for HSS GRAPHICS.
REAL(ReKi) :: LSSLength ! Length of low-speed shaft for LSS GRAPHICS.
REAL(ReKi) :: LSSRad ! Radius of the low-speed shaft used for LSS GRAPHICS.
REAL(ReKi) :: NacLength ! Length of nacelle used for the nacelle GRAPHICS.
REAL(ReKi) :: NacRadBot ! Bottom radius of nacelle FRUSTUM used for the nacelle GRAPHICS.
REAL(ReKi) :: NacRadTop ! Top radius of nacelle FRUSTUM used for the nacelle GRAPHICS.
REAL(ReKi) :: ThkOvrChrd ! Ratio of blade thickness to blade chord used for blade element GRAPHICS.
REAL(ReKi) :: TwrBaseRad ! Tower base radius used for linearly tapered tower GRAPHICS.
REAL(ReKi) :: TwrTopRad ! Tower top radius used for linearly tapered tower GRAPHICS.
INTEGER(4) :: NFreeSrfc = -1 ! Number of points on free surface (not including the zero'th point) where the elevation of the incident waves will be computed (computed every FrSrfcSpc meters along the incident wave propogation heading direction for a length of the rotor diameter).
INTEGER(4) :: NLnNodes = 10 ! Number of nodes per line for mooring line GRAPHICS. !JASON: MAKE THIS AN ACTUAL INPUT TO THE PROGRAM IN ADAMSFile WHEN YOU DOCUMENT THESE ROUTINES!!!!!
INTEGER(4) :: NSides ! The number of sides used in GRAPHICS CYLINDER and FRUSTUM statements.
LOGICAL :: MakeLINacf ! Switch for making an ADAMS/LINEAR control command file. To prevent an ADAMS/LINEAR control command file to be made, and to not include the RESULTS statement in the ADAMS dataset, set to .FALSE.
LOGICAL :: SaveGrphcs ! Switch to determine whether or note GRAPHICS output is saved in an ADAMS analysis.
END MODULE ADAMSInput
!=======================================================================
MODULE AeroElem
! This MODULE stores FAST/AeroDyn interface variables.
USE Precision
USE AeroDyn ! for type; Precision is also included so the previous line could be removed, too.
TYPE(AllAeroMarkers) :: ADAeroMarkers
TYPE(AeroLoadsOptions) :: ADIntrfaceOptions
TYPE(AllAeroLoads) :: ADAeroLoads
TYPE(AeroConfig) :: ADInterfaceComponents ! The configuration markers that make up the bodies where aerodynamic calculations will be needed
INTEGER :: NumADBldNodes = 0 ! Number of blade nodes in AeroDyn
END MODULE AeroElem
!=======================================================================
MODULE Blades
! This MODULE stores input variables for the blades.
USE Precision
REAL(ReKi) :: AdjBlMs ! Factor to adjust blade mass density.
REAL(ReKi) :: AdjEdSt ! Factor to adjust edge stiffness.
REAL(ReKi) :: AdjFlSt ! Factor to adjust flap stiffness.
REAL(ReKi), ALLOCATABLE :: AerCen (:) ! Aerodynamic center for distributed input data.
REAL(ReKi), ALLOCATABLE :: AeroCent (:,:) ! Aerodynamic center for analysis nodes.
REAL(ReKi), ALLOCATABLE :: AeroTwst (:) ! Aerodynamic twist of the blade at the analysis nodes.
REAL(ReKi), ALLOCATABLE :: Alpha (:) ! Blade coupling coefficient between flap and twist for a given input station.
REAL(ReKi), ALLOCATABLE :: AxRedBld (:,:,:,:) ! The axial-reduction terms of the blade shape function.
REAL(ReKi), ALLOCATABLE :: BAlpha (:,:) ! Interpolated blade coupling coefficient between flap and twist.
REAL(ReKi), ALLOCATABLE :: BldEDamp (:,:) ! Blade edgewise damping coefficients.
REAL(ReKi) :: BldEdDmp (1) ! Blade structural damping ratios in edgewise direction.
REAL(ReKi), ALLOCATABLE :: BldFDamp (:,:) ! Blade flapwise damping coefficients.
REAL(ReKi) :: BldFlDmp (2) ! Blade structural damping ratios in flapwise direction.
REAL(ReKi) :: BldFlexL ! Flexible blade length.
REAL(ReKi), ALLOCATABLE :: BlFract (:) ! Blade fractional radius for distributed input data.
REAL(ReKi), ALLOCATABLE :: BMassDen (:) ! Blade mass density for distributed input data.
REAL(ReKi), ALLOCATABLE :: CAeroTwst (:) ! Cosine of the aerodynamic twist of the blade at the analysis nodes.
REAL(ReKi), ALLOCATABLE :: CBE (:,:,:) ! Generalized edgewise damping of the blades.
REAL(ReKi), ALLOCATABLE :: CBF (:,:,:) ! Generalized flapwise damping of the blades.
REAL(ReKi), ALLOCATABLE :: cgOffBEdg (:,:) ! Interpolated blade edge (along local aerodynamic yb-axis) mass cg offset.
REAL(ReKi), ALLOCATABLE :: cgOffBFlp (:,:) ! Interpolated blade flap (along local aerodynamic xb-axis) mass cg offset.
REAL(ReKi), ALLOCATABLE :: Chord (:) ! Chord of the blade at the analysis nodes.
REAL(ReKi), ALLOCATABLE :: CThetaS (:,:) ! COS( ThetaS )
REAL(ReKi), ALLOCATABLE :: DRNodes (:) ! Length of variable-spaced blade elements.
REAL(ReKi), ALLOCATABLE :: EAOffBEdg (:,:) ! Interpolated blade edge (along local aerodynamic yb-axis) elastic axis offset.
REAL(ReKi), ALLOCATABLE :: EAOffBFlp (:,:) ! Interpolated blade flap (along local aerodynamic xb-axis) elastic axis offset.
REAL(ReKi), ALLOCATABLE :: EAStff (:) ! Blade extensional stiffness for a given input station.
REAL(ReKi), ALLOCATABLE :: EdgcgOf (:) ! Blade edge (along local aerodynamic yb-axis) mass cg offset for a given input station.
REAL(ReKi), ALLOCATABLE :: EdgEAOf (:) ! Blade edge (along local aerodynamic yb-axis) elastic axis offset for a given input station.
REAL(ReKi), ALLOCATABLE :: EdgIner (:) ! Blade edge (about local structural xb-axis) mass inertia per unit length for a given input station.
REAL(ReKi), ALLOCATABLE :: EdgStff (:) ! Blade edge stiffness for distributed input data.
REAL(ReKi), ALLOCATABLE :: FlpcgOf (:) ! Blade flap (along local aerodynamic xb-axis) mass cg offset for a given input station.
REAL(ReKi), ALLOCATABLE :: FlpEAOf (:) ! Blade flap (along local aerodynamic xb-axis) elastic axis offset for a given input station.
REAL(ReKi), ALLOCATABLE :: FlpIner (:) ! Blade flap (about local structural yb-axis) mass inertia per unit length for a given input station.
REAL(ReKi), ALLOCATABLE :: FlpStff (:) ! Blade flap stiffness for distributed input data.
REAL(ReKi), ALLOCATABLE :: FStTunr (:,:) ! Blade flapwise modal stiffness tuners (stored for all blades).
REAL(ReKi) :: FlStTunr (2) ! Blade flapwise modal stiffness tuners (input).
REAL(ReKi), ALLOCATABLE :: GJStff (:) ! Blade torsional stiffness for a given input station.
REAL(ReKi), ALLOCATABLE :: InerBEdg (:,:) ! Interpolated blade edge (about local structural xb-axis) mass inertia per unit length.
REAL(ReKi), ALLOCATABLE :: InerBFlp (:,:) ! Interpolated blade flap (about local structural yb-axis) mass inertia per unit length.
REAL(ReKi), ALLOCATABLE :: KBE (:,:,:) ! Generalized edgewise stiffness of the blades.
REAL(ReKi), ALLOCATABLE :: KBF (:,:,:) ! Generalized flapwise stiffness of the blades.
REAL(ReKi), ALLOCATABLE :: MassB (:,:) ! Interpolated lineal blade mass density.
REAL(ReKi), ALLOCATABLE :: PrecrvRef (:) ! Offset for defining the reference axis from the pitch axis for precurved blades at a given input station.
REAL(ReKi), ALLOCATABLE :: PreswpRef (:) ! Offset for defining the reference axis from the pitch axis for preswept blades at a given input station.
REAL(ReKi), ALLOCATABLE :: RefAxisxb (:,:) ! Interpolated Offset for defining the reference axis from the pitch axis for precurved blades at a given input station (along xb-axis).
REAL(ReKi), ALLOCATABLE :: RefAxisyb (:,:) ! Interpolated Offset for defining the reference axis from the pitch axis for preswept blades at a given input station (along yb-axis).
REAL(ReKi), ALLOCATABLE :: RNodes (:) ! Radius to analysis nodes relative to hub ( 0 < RNodes(:) < BldFlexL )
REAL(ReKi), ALLOCATABLE :: RNodesNorm(:) ! Normalized radius to analysis nodes relative to hub ( 0 < RNodesNorm(:) < 1 )
REAL(ReKi), ALLOCATABLE :: rSAerCenn1(:,:) ! Distance from point S on a blade to the aerodynamic center in the n1 direction (m).
REAL(ReKi), ALLOCATABLE :: rSAerCenn2(:,:) ! Distance from point S on a blade to the aerodynamic center in the n2 direction (m).
REAL(ReKi), ALLOCATABLE :: SAeroTwst (:) ! Sine of the aerodynamic twist of the blade at the analysis nodes.
REAL(ReKi), ALLOCATABLE :: StiffBE (:,:) ! Interpolated edgewise blade stiffness.
REAL(ReKi), ALLOCATABLE :: StiffBEA (:,:) ! Interpolated blade extensional stiffness.
REAL(ReKi), ALLOCATABLE :: StiffBF (:,:) ! Interpolated flapwise blade stiffness.
REAL(ReKi), ALLOCATABLE :: StiffBGJ (:,:) ! Interpolated blade torsional stiffness.
REAL(ReKi), ALLOCATABLE :: SThetaS (:,:) ! SIN( ThetaS )
REAL(ReKi), ALLOCATABLE :: StrcTwst (:) ! Structural twist for distributed input data.
REAL(ReKi), ALLOCATABLE :: ThetaS (:,:) ! Structural twist for analysis nodes.
REAL(ReKi), ALLOCATABLE :: TwistedSF (:,:,:,:,:) ! Interpolated lineal blade mass density.
INTEGER(4) :: BldNodes ! Number of blade nodes used in the analysis.
INTEGER(4) :: NBlInpSt ! Number of blade input stations.
INTEGER(4) :: TipNode ! Index of the additional node located at the blade tip = BldNodes + 1
END MODULE Blades
!=======================================================================
MODULE CoordSys
! This MODULE stores coordinate sytems used internally by FAST. The 3
! components of each vector correspond to the z1, z2, and z3 components
! of the individual vectors.
! NOTE: the orientations of most of these coordinate systems will change
! every time step.
USE Precision
REAL(ReKi) :: a1 (3) ! Vector / direction a1 (= xt from the IEC coord. system).
REAL(ReKi) :: a2 (3) ! Vector / direction a2 (= zt from the IEC coord. system).
REAL(ReKi) :: a3 (3) ! Vector / direction a3 (= -yt from the IEC coord. system).
REAL(ReKi) :: b1 (3) ! Vector / direction b1 (= xp from the IEC coord. system).
REAL(ReKi) :: b2 (3) ! Vector / direction b2 (= zp from the IEC coord. system).
REAL(ReKi) :: b3 (3) ! Vector / direction b3 (= -yp from the IEC coord. system).
REAL(ReKi) :: c1 (3) ! Vector / direction c1 (= xs from the IEC coord. system).
REAL(ReKi) :: c2 (3) ! Vector / direction c2 (= zs from the IEC coord. system).
REAL(ReKi) :: c3 (3) ! Vector / direction c3 (= -ys from the IEC coord. system).
REAL(ReKi) :: d1 (3) ! Vector / direction d1 (= xn from the IEC coord. system).
REAL(ReKi) :: d2 (3) ! Vector / direction d2 (= zn from the IEC coord. system).
REAL(ReKi) :: d3 (3) ! Vector / direction d3 (= -yn from the IEC coord. system).
REAL(ReKi) :: e1 (3) ! Vector / direction e1 (= xa from the IEC coord. system).
REAL(ReKi) :: e2 (3) ! Vector / direction e2 (= ya from the IEC coord. system).
REAL(ReKi) :: e3 (3) ! Vector / direction e3 (= za from the IEC coord. system).
REAL(ReKi) :: f1 (3) ! Vector / direction f1.
REAL(ReKi) :: f2 (3) ! Vector / direction f2.
REAL(ReKi) :: f3 (3) ! Vector / direction f3.
REAL(ReKi) :: g1 (3) ! Vector / direction g1 (= xh from the IEC coord. system).
REAL(ReKi) :: g2 (3) ! Vector / direction g2 (= yh from the IEC coord. system).
REAL(ReKi) :: g3 (3) ! Vector / direction g3 (= zh from the IEC coord. system).
REAL(ReKi), ALLOCATABLE :: i1 (:,:) ! i1(K,:) = vector / direction i1 for blade K (= xcK from the IEC coord. system).
REAL(ReKi), ALLOCATABLE :: i2 (:,:) ! i2(K,:) = vector / direction i2 for blade K (= ycK from the IEC coord. system).
REAL(ReKi), ALLOCATABLE :: i3 (:,:) ! i3(K,:) = vector / direction i3 for blade K (= zcK from the IEC coord. system).
REAL(ReKi), ALLOCATABLE :: j1 (:,:) ! j1(K,:) = vector / direction j1 for blade K (= xbK from the IEC coord. system).
REAL(ReKi), ALLOCATABLE :: j2 (:,:) ! j2(K,:) = vector / direction j2 for blade K (= ybK from the IEC coord. system).
REAL(ReKi), ALLOCATABLE :: j3 (:,:) ! j3(K,:) = vector / direction j3 for blade K (= zbK from the IEC coord. system).
REAL(ReKi), ALLOCATABLE :: m1 (:,:,:) ! m1(K,J,:) = vector / direction m1 for node J of blade K (used to calc. and return aerodynamic loads from AeroDyn).
REAL(ReKi), ALLOCATABLE :: m2 (:,:,:) ! m2(K,J,:) = vector / direction m2 for node J of blade K (used to calc. and return aerodynamic loads from AeroDyn).
REAL(ReKi), ALLOCATABLE :: m3 (:,:,:) ! m3(K,J,:) = vector / direction m3 for node J of blade K (used to calc. and return aerodynamic loads from AeroDyn).
REAL(ReKi), ALLOCATABLE :: n1 (:,:,:) ! n1(K,J,:) = vector / direction n1 for node J of blade K (= LxbK from the IEC coord. system).
REAL(ReKi), ALLOCATABLE :: n2 (:,:,:) ! n2(K,J,:) = vector / direction n2 for node J of blade K (= LybK from the IEC coord. system).
REAL(ReKi), ALLOCATABLE :: n3 (:,:,:) ! n3(K,J,:) = vector / direction n3 for node J of blade K (= LzbK from the IEC coord. system).
REAL(ReKi) :: p1 (3) ! Vector / direction p1 (used to calc. and return tail aerodynamic loads from AeroDyn).
REAL(ReKi) :: p2 (3) ! Vector / direction p2 (used to calc. and return tail aerodynamic loads from AeroDyn).
REAL(ReKi) :: p3 (3) ! Vector / direction p3 (used to calc. and return tail aerodynamic loads from AeroDyn).
REAL(ReKi) :: rf1 (3) ! Vector / direction rf1 (rotor-furl coordinate system = d1 when rotor-furl angle = 0).
REAL(ReKi) :: rf2 (3) ! Vector / direction rf2 (rotor-furl coordinate system = d2 when rotor-furl angle = 0).
REAL(ReKi) :: rf3 (3) ! Vector / direction rf3 (rotor-furl coordinate system = d3 when rotor-furl angle = 0).
REAL(ReKi) :: rfa (3) ! Vector / direction of the rotor-furl axis.
REAL(ReKi), ALLOCATABLE :: t1 (:,:) ! Vector / direction t1 for tower node J (= Lxt from the IEC coord. system).
REAL(ReKi), ALLOCATABLE :: t2 (:,:) ! Vector / direction t2 for tower node J (= Lzt from the IEC coord. system).
REAL(ReKi), ALLOCATABLE :: t3 (:,:) ! Vector / direction t3 for tower node J (= -Lyt from the IEC coord. system).
REAL(ReKi), ALLOCATABLE :: te1 (:,:,:) ! te1(K,J,:) = vector / direction te1 for node J of blade K (used to calc. noise).
REAL(ReKi), ALLOCATABLE :: te2 (:,:,:) ! te2(K,J,:) = vector / direction te2 for node J of blade K (used to calc. noise).
REAL(ReKi), ALLOCATABLE :: te3 (:,:,:) ! te3(K,J,:) = vector / direction te3 for node J of blade K (used to calc. noise).
REAL(ReKi) :: tf1 (3) ! Vector / direction tf1 (tail-furl coordinate system = d1 when rotor-furl angle = 0).
REAL(ReKi) :: tf2 (3) ! Vector / direction tf2 (tail-furl coordinate system = d2 when rotor-furl angle = 0).
REAL(ReKi) :: tf3 (3) ! Vector / direction tf3 (tail-furl coordinate system = d3 when rotor-furl angle = 0).
REAL(ReKi) :: tfa (3) ! Vector / direction of the tail-furl axis.
REAL(ReKi) :: z1 (3) ! Vector / direction z1 (= xi from the IEC coord. system).
REAL(ReKi) :: z2 (3) ! Vector / direction z2 (= zi from the IEC coord. system).
REAL(ReKi) :: z3 (3) ! Vector / direction z3 (= -yi from the IEC coord. system).
END MODULE CoordSys
!=======================================================================
MODULE Constants
! This MODULE stores various constants.
USE Precision
REAL(ReKi), PARAMETER :: Inv2Pi = 0.15915494 ! 0.5/Pi.
REAL(ReKi) :: TwoPiNB ! 2*Pi/NumBl. This constant is calculated in fast_io.f90/Inputs()
END MODULE Constants
!=======================================================================
MODULE DOFs
! This MODULE stores variables related to degrees of freedom.
USE Precision
REAL(ReKi), ALLOCATABLE :: Q (:,:) ! Displacement matrix.
REAL(ReKi), ALLOCATABLE :: QD (:,:) ! Velocity matrix.
REAL(ReKi), ALLOCATABLE :: QD2 (:,:) ! Acceleration matrix.
INTEGER(4), ALLOCATABLE :: Diag (:) ! Array containing the indices of SrtPS() associated with each enabled DOF; that is, SrtPS(Diag(I)) = I.
INTEGER(4), ALLOCATABLE :: DOF_BE (:,:) ! DOF indices for blade edge.
INTEGER(4), ALLOCATABLE :: DOF_BF (:,:) ! DOF indices for blade flap.
INTEGER(4), PARAMETER :: DOF_DrTr = 14 ! DOF index for drivetrain rotational-flexibility.
INTEGER(4), PARAMETER :: DOF_GeAz = 13 ! DOF index for the generator azimuth.
INTEGER(4), PARAMETER :: DOF_Hv = 3 ! DOF index for platform heave.
INTEGER(4), PARAMETER :: DOF_P = 5 ! DOF index for platform pitch.
INTEGER(4), PARAMETER :: DOF_R = 4 ! DOF index for platform roll.
INTEGER(4), PARAMETER :: DOF_RFrl = 12 ! DOF index for rotor-furl.
INTEGER(4), PARAMETER :: DOF_Sg = 1 ! DOF index for platform surge.
INTEGER(4), PARAMETER :: DOF_Sw = 2 ! DOF index for platform sway.
INTEGER(4), PARAMETER :: DOF_Teet = 22 ! DOF index for rotor-teeter.
INTEGER(4), PARAMETER :: DOF_TFA1 = 7 ! DOF index for 1st tower fore-aft mode.
INTEGER(4), PARAMETER :: DOF_TFA2 = 9 ! DOF index for 2nd tower fore-aft mode.
INTEGER(4), PARAMETER :: DOF_TFrl = 15 ! DOF index for tail-furl.
INTEGER(4), PARAMETER :: DOF_TSS1 = 8 ! DOF index for 1st tower side-to-side mode.
INTEGER(4), PARAMETER :: DOF_TSS2 = 10 ! DOF index for 2nd tower side-to-side mode.
INTEGER(4), PARAMETER :: DOF_Y = 6 ! DOF index for platform yaw.
INTEGER(4), PARAMETER :: DOF_Yaw = 11 ! DOF index for nacelle-yaw.
INTEGER(4), ALLOCATABLE :: IC (:) ! Array which stores pointers to predictor-corrector results.
INTEGER(4) :: NActvDOF ! The number of active (enabled) DOFs in the model.
INTEGER(4) :: NAug ! Dimension of augmented solution matrix.
INTEGER(4) :: NDOF ! Number of total DOFs.
INTEGER(4), PARAMETER :: NMX = 9 ! Used in updating predictor-corrector values.
INTEGER(4) :: NPA ! Number of DOFs that contribute to the angular velocity of the tail (body A) in the inertia frame.
INTEGER(4) :: NPB ! Number of DOFs that contribute to the angular velocity of the tower top / baseplate (body B) in the inertia frame.
INTEGER(4) :: NPCE ! Number of DOFs that contribute to the QD2T-related linear accelerations of the hub center of mass (point C) in the inertia frame, based on which DOFs are presently enabled.
INTEGER(4) :: NPDE ! Number of DOFs that contribute to the QD2T-related linear accelerations of the center of mass of the structure that furls with the rotor (not including rotor) (point D) in the inertia frame, based on which DOFs are presently enabled.
INTEGER(4) :: NPF ! Number of DOFs that contribute to the angular velocity of the tower elements (body F) in the inertia frame.
INTEGER(4) :: NPG ! Number of DOFs that contribute to the angular velocity of the generator (body G) in the inertia frame.
INTEGER(4) :: NPH ! Number of DOFs that contribute to the angular velocity of the hub (body H) in the inertia frame.
INTEGER(4) :: NPIE ! Number of DOFs that contribute to the QD2T-related linear accelerations of the tail boom center of mass (point I) in the inertia frame, based on which DOFs are presently enabled.
INTEGER(4) :: NPL ! Number of DOFs that contribute to the angular velocity of the low-speed shaft (body L) in the inertia frame.
INTEGER(4) :: NPM ! Number of DOFs that contribute to the angular velocity of the blade elements (body M) in the inertia frame.
INTEGER(4) :: NPN ! Number of DOFs that contribute to the angular velocity of the nacelle (body N) in the inertia frame.
INTEGER(4) :: NPTE ! Number of DOFs that contribute to the QD2T-related linear accelerations of the tower nodes (point T) in the inertia frame, based on which DOFs are presently enabled.
INTEGER(4) :: NPTTE ! Number of tower DOFs that contribute to the QD2T-related linear accelerations of the tower nodes (point T) in the inertia frame, based on which DOFs are presently enabled.
INTEGER(4) :: NPR ! Number of DOFs that contribute to the angular velocity of the structure that furls with the rotor (not including rotor) (body R) in the inertia frame.
INTEGER(4), ALLOCATABLE :: NPSBE (:) ! Number of blade DOFs that contribute to the QD2T-related linear accelerations of the blade nodes (point S) in the inertia frame, based on which DOFs are presently enabled.
INTEGER(4), ALLOCATABLE :: NPSE (:) ! Number of DOFs that contribute to the QD2T-related linear accelerations of the blade nodes (point S) in the inertia frame, based on which DOFs are presently enabled.
INTEGER(4) :: NPUE ! Number of DOFs that contribute to the QD2T-related linear accelerations of the nacelle center of mass (point U) in the inertia frame, based on which DOFs are presently enabled.
INTEGER(4) :: NPX ! Number of DOFs that contribute to the angular velocity of the platform (body X) in the inertia frame.
INTEGER(4) :: NPYE ! Number of DOFs that contribute to the QD2T-related linear accelerations of the platform center of mass (point Y) in the inertia frame, based on which DOFs are presently enabled.
INTEGER(4), ALLOCATABLE :: PA (:) ! Array of DOF indices (pointers) that contribute to the angular velocity of the tail (body A) in the inertia frame.
INTEGER(4), ALLOCATABLE :: PB (:) ! Array of DOF indices (pointers) that contribute to the angular velocity of the tower top / baseplate (body B) in the inertia frame.
INTEGER(4), ALLOCATABLE :: PCE (:) ! Array of DOF indices (pointers) that contribute to the QD2T-related linear accelerations of the hub center of mass (point C) in the inertia frame, based on which DOFs are presently enabled.
INTEGER(4), ALLOCATABLE :: PDE (:) ! Array of DOF indices (pointers) that contribute to the QD2T-related linear accelerations of the center of mass of the structure that furls with the rotor (not including rotor) (point D) in the inertia frame, based on which DOFs are presently enabled.
INTEGER(4), ALLOCATABLE :: PF (:) ! Array of DOF indices (pointers) that contribute to the angular velocity of the tower elements (body F) in the inertia frame.
INTEGER(4), ALLOCATABLE :: PG (:) ! Array of DOF indices (pointers) that contribute to the angular velocity of the generator (body G) in the inertia frame.
INTEGER(4), ALLOCATABLE :: PH (:) ! Array of DOF indices (pointers) that contribute to the angular velocity of the hub (body H) in the inertia frame.
INTEGER(4), ALLOCATABLE :: PIE (:) ! Array of DOF indices (pointers) that contribute to the QD2T-related linear accelerations of the tail boom center of mass (point I) in the inertia frame, based on which DOFs are presently enabled.
INTEGER(4), ALLOCATABLE :: PL (:) ! Array of DOF indices (pointers) that contribute to the angular velocity of the low-speed shaft (body L) in the inertia frame.
INTEGER(4), ALLOCATABLE :: PM (:,:) ! Array of DOF indices (pointers) that contribute to the angular velocity of the blade elements (body M) in the inertia frame.
INTEGER(4), ALLOCATABLE :: PN (:) ! Array of DOF indices (pointers) that contribute to the angular velocity of the nacelle (body N) in the inertia frame.
INTEGER(4), ALLOCATABLE :: PTE (:) ! Array of DOF indices (pointers) that contribute to the QD2T-related linear accelerations of the tower nodes (point T) in the inertia frame, based on which DOFs are presently enabled.
INTEGER(4), ALLOCATABLE :: PTTE (:) ! Array of tower DOF indices (pointers) that contribute to the QD2T-related linear accelerations of the tower nodes (point T) in the inertia frame, based on which DOFs are presently enabled.
INTEGER(4), ALLOCATABLE :: PR (:) ! Array of DOF indices (pointers) that contribute to the angular velocity of the structure that furls with the rotor (not including rotor) (body R) in the inertia frame.
INTEGER(4), ALLOCATABLE :: PS (:) ! Array of DOF indices (pointers) to the active (enabled) DOFs/states.
INTEGER(4), ALLOCATABLE :: PSBE (:,:) ! Array of blade DOF indices (pointers) that contribute to the QD2T-related linear accelerations of the blade nodes (point S) in the inertia frame, based on which DOFs are presently enabled.
INTEGER(4), ALLOCATABLE :: PSE (:,:) ! Array of DOF indices (pointers) that contribute to the QD2T-related linear accelerations of the blade nodes (point S) in the inertia frame, based on which DOFs are presently enabled.
INTEGER(4), ALLOCATABLE :: PUE (:) ! Array of DOF indices (pointers) that contribute to the QD2T-related linear accelerations of the nacelle center of mass (point U) in the inertia frame, based on which DOFs are presently enabled.
INTEGER(4), ALLOCATABLE :: PX (:) ! Array of DOF indices (pointers) that contribute to the angular velocity of the platform (body X) in the inertia frame.
INTEGER(4), ALLOCATABLE :: PYE (:) ! Array of DOF indices (pointers) that contribute to the QD2T-related linear accelerations of the platform center of mass (point Y) in the inertia frame, based on which DOFs are presently enabled.
INTEGER(4), ALLOCATABLE :: SrtPS (:) ! Sorted (from smallest to largest DOF index) version of PS().
INTEGER(4), ALLOCATABLE :: SrtPSNAUG(:) ! SrtPS() with the additional value of NAUG.
LOGICAL, ALLOCATABLE :: DOF_Flag (:) ! Array which stores values of the feature flags for each DOF.
CHARACTER(99), ALLOCATABLE :: DOF_Desc (:) ! Array which stores descriptions of each DOF.
END MODULE DOFs
!=======================================================================
MODULE DriveTrain
! This MODULE stores variables for the drivetrain.
USE Precision
REAL(ReKi) :: DTTorDmp ! Drivetrain torsional damper
REAL(ReKi) :: DTTorSpr ! Drivetrain torsional spring
REAL(ReKi) :: ElecPwr ! Electrical power, W.
REAL(ReKi) :: GBRatio ! Gearbox ratio
REAL(ReKi) :: GBoxEff ! Gearbox efficiency.
REAL(ReKi) :: GenCTrq ! Constant generator torque.
REAL(ReKi) :: GenEff ! Generator efficiency
REAL(ReKi) :: GenSpRZT ! Difference between rated and zero-torque generator speeds for SIG.
REAL(ReKi) :: GenSpRat ! Rated generator speed.
REAL(ReKi) :: GenSpZT ! Zero-torque generator speed.
REAL(ReKi) :: GenTrq ! Electrical generator torque.
REAL(ReKi) :: HSSBrDT ! Time it takes for HSS brake to reach full deployment once deployed.
REAL(ReKi) :: HSSBrTqF ! Fully deployed HSS brake torque
REAL(ReKi) :: HSSBrTrq ! Instantaneous HSS brake torque
REAL(ReKi) :: HSSBrTrqC ! A copy of the value of HSSBrTrq calculated in SUBROUTINE DrvTrTrq().
REAL(ReKi) :: SIG_PORt ! Pull-out ratio (Tpullout/Trated).
REAL(ReKi) :: SIG_POSl ! Pullout slip.
REAL(ReKi) :: SIG_POTq ! Pullout torque.
REAL(ReKi) :: SIG_RtSp ! Rated speed.
REAL(ReKi) :: SIG_RtTq ! Rated torque.
REAL(ReKi) :: SIG_SlPc ! Rated generator slip percentage.
REAL(ReKi) :: SIG_Slop ! Torque/Speed slope for simple induction generator.
REAL(ReKi) :: SIG_SySp ! Synchronous (zero-torque) generator speed.
REAL(ReKi) :: TEC_A0 ! A0 term for Thevenin-equivalent circuit.
REAL(ReKi) :: TEC_C0 ! C0 term for Thevenin-equivalent circuit.
REAL(ReKi) :: TEC_C1 ! C1 term for Thevenin-equivalent circuit.
REAL(ReKi) :: TEC_C2 ! C2 term for Thevenin-equivalent circuit.
REAL(ReKi) :: TEC_Freq ! Line frequency for Thevenin-equivalent circuit.
REAL(ReKi) :: TEC_K1 ! K1 term for Thevenin-equivalent circuit.
REAL(ReKi) :: TEC_K2 ! K2 term for Thevenin-equivalent circuit.
REAL(ReKi) :: TEC_MR ! Magnetizing reactance for Thevenin-equivalent circuit.
REAL(ReKi) :: TEC_Re1 ! Thevenin's equivalent stator resistance (ohms)
REAL(ReKi) :: TEC_RLR ! Rotor leakage reactance for Thevenin-equivalent circuit.
REAL(ReKi) :: TEC_RRes ! Rotor resistance for Thevenin-equivalent circuit.
REAL(ReKi) :: TEC_SLR ! Stator leakage reactance for Thevenin-equivalent circuit.
REAL(ReKi) :: TEC_SRes ! Stator resistance for Thevenin-equivalent circuit.
REAL(ReKi) :: TEC_SySp ! Synchronous speed for Thevenin-equivalent circuit.
REAL(ReKi) :: TEC_V1a ! Source voltage for Thevenin-equivalent circuit.
REAL(ReKi) :: TEC_VLL ! Line-to-line RMS voltage for Thevenin-equivalent circuit.
REAL(ReKi) :: TEC_Xe1 ! Thevenin's equivalent stator leakage reactance (ohms)
INTEGER(4) :: GenDir ! Direction of the generator = +/- 1 (+ 1 = same direction as LSS; -1 = opposite direction of LSS).
INTEGER(4) :: TEC_NPol ! Number of poles for Thevenin-equivalent circuit.
LOGICAL :: GBRevers ! Gearbox reversal flag.
END MODULE DriveTrain
!=======================================================================
MODULE EnvCond
! This MODULE stores input variables for environmental conditions.
USE Precision
REAL(ReKi) :: AirDens ! Air density = RHO.
REAL(ReKi) :: CurrDIDir = 0.0 ! Depth-independent current heading direction.
REAL(ReKi) :: CurrDIV = 0.0 ! Depth-independent current velocity.
REAL(ReKi) :: CurrNSDir = 0.0 ! Near-surface current heading direction.
REAL(ReKi) :: CurrNSRef = 0.0 ! Near-surface current reference depth.
REAL(ReKi) :: CurrNSV0 = 0.0 ! Near-surface current velocity at still water level.
REAL(ReKi) :: CurrSSDir = 0.0 ! Sub-surface current heading direction.
REAL(ReKi) :: CurrSSV0 = 0.0 ! Sub-surface current velocity at still water level.
REAL(ReKi) :: Gravity ! Gravitational acceleration.
REAL(ReKi) :: WaveDir = 0.0 ! Wave heading direction.
REAL(ReKi) :: WaveDT = 0.0 ! Time step for incident wave calculations.
REAL(ReKi) :: WaveHs = 0.0 ! Significant wave height.
REAL(ReKi) :: WavePkShp = 1.0 ! Peak shape parameter of incident wave spectrum.
REAL(ReKi) :: WaveTMax = 0.0 ! Analysis time for incident wave calculations.
REAL(ReKi) :: WaveTp = 0.0 ! Peak spectral period.
REAL(ReKi) :: WtrDens ! Water density.
REAL(ReKi) :: WtrDpth ! Water depth.
INTEGER(4) :: CurrMod ! Current profile model switch.
INTEGER(4) :: WaveStMod = 0 ! Model switch for stretching incident wave kinematics to instantaneous free surface.
INTEGER(4) :: WaveMod = 0 ! Incident wave kinematics model switch.
INTEGER(4) :: WaveSeed (2) = 0 ! Random seeds of incident waves.
CHARACTER(1024) :: GHWvFile = '' ! The root name of GH Bladed files containing wave data.
END MODULE EnvCond
!=======================================================================
MODULE Features
! This MODULE stores input variables for feature switches.
LOGICAL :: CompAero ! Compute aerodynamic forces switch.
LOGICAL :: CompHydro = .FALSE. ! Compute hydrodynamic forces switch.
LOGICAL :: CompNoise ! Compute aerodynamic noise switch.
LOGICAL :: DrTrDOF ! Drivetrain rotational-flexibility DOF.
LOGICAL :: EdgeDOF ! Edgewise blade mode DOF.
LOGICAL :: FlapDOF1 ! First flapwise blade mode DOF.
LOGICAL :: FlapDOF2 ! Second flapwise blade mode DOF.
LOGICAL :: GenDOF ! Generator DOF.
LOGICAL :: PtfmHvDOF = .FALSE. ! Platform vertical heave translation DOF. (Initialized to .FALSE. b/c not all models will read in PtfmFile)
LOGICAL :: PtfmPDOF = .FALSE. ! Platform pitch tilt rotation DOF. (Initialized to .FALSE. b/c not all models will read in PtfmFile)
LOGICAL :: PtfmRDOF = .FALSE. ! Platform roll tilt rotation DOF. (Initialized to .FALSE. b/c not all models will read in PtfmFile)
LOGICAL :: PtfmSgDOF = .FALSE. ! Platform horizontal surge translation DOF. (Initialized to .FALSE. b/c not all models will read in PtfmFile)
LOGICAL :: PtfmSwDOF = .FALSE. ! Platform horizontal sway translation DOF. (Initialized to .FALSE. b/c not all models will read in PtfmFile)
LOGICAL :: PtfmYDOF = .FALSE. ! Platform yaw rotation DOF. (Initialized to .FALSE. b/c not all models will read in PtfmFile)
LOGICAL :: RFrlDOF = .FALSE. ! Rotor-furl DOF. (Initialized to .FALSE. b/c not all models read in FurlFile)
LOGICAL :: TeetDOF = .FALSE. ! Rotor-teeter DOF. (Initialized to .FALSE. b/c the 3-blader requires it to be .FALSE.)
LOGICAL :: TFrlDOF = .FALSE. ! Tail-furl DOF. (Initialized to .FALSE. b/c not all models read in FurlFile)
LOGICAL :: TwFADOF1 ! First tower fore-aft bending-mode DOF.
LOGICAL :: TwFADOF2 ! Second tower fore-aft bending-mode DOF.
LOGICAL :: TwSSDOF1 ! First tower side-to-side bending-mode DOF.
LOGICAL :: TwSSDOF2 ! Second tower side-to-side bending-mode DOF.
LOGICAL :: YawDOF ! Nacelle-yaw DOF.
END MODULE Features
!=======================================================================
MODULE General
! This MODULE stores input variables for general program control.
INTEGER(4) :: ADAMSPrep ! ADAMS preprocessor mode {1: Run FAST, 2: use FAST as a preprocessor to create equivalent ADAMS model, 3: do both} (switch).
INTEGER(4) :: AnalMode ! FAST analysis mode {1: Run a time-marching simulation, 2: create a periodic linearized model} (switch).
INTEGER(4) :: PtfmModel ! Platform model {0: none, 1: onshore, 2: fixed bottom offshore, 3: floating offshore} (switch).
INTEGER(4) :: StrtTime (8) ! Start time of simulation.
INTEGER(4) :: UnAC = 24 ! I/O unit number for the ADAMS control output file (.acf) useful for an ADAMS SIMULATE analysis.
INTEGER(4) :: UnAD = 23 ! I/O unit number for the ADAMS dataset output file (.adm).
INTEGER(4) :: UnAL = 25 ! I/O unit number for the ADAMS control output file (.acf) useful for an ADAMS LINEAR analysis.
INTEGER(4) :: UnIn = 20 ! I/O unit number for the input files.
INTEGER(4) :: UnLn = 26 ! I/O unit number for the FAST linear output file (.lin).
INTEGER(4) :: UnNoSpec = 27 ! I/O unit number for the noise spectr output file.
INTEGER(4) :: UnNoSPL = 28 ! I/O unit number for the noise SPL output file.
INTEGER(4) :: UnOu = 21 ! I/O unit number for the tabular output file.
INTEGER(4) :: UnSu = 22 ! I/O unit number for the summary output file.
LOGICAL :: Cmpl4SFun = .FALSE. ! Is FAST being compiled as an S-Function for Simulink?
LOGICAL :: Furling ! Read in additional model properties for furling turbine?
LOGICAL :: SumDisp ! Display summary data on screen?
LOGICAL :: SumPrint ! Print summary data to "*.fsm"?
CHARACTER(1024) :: ADAMSFile ! The name of the file containing ADAMS-specific data inputs.
CHARACTER(1024) :: ADFile ! The name of the AeroDyn input file.
CHARACTER(1024), ALLOCATABLE :: BldFile (:) ! The names of the blade-data input files.
CHARACTER(1024) :: DirRoot ! The name of the root file including the full path to the current working directory.
CHARACTER(1024) :: DynBrkFi ! The name of the dynamic generator brake input file.
CHARACTER(1024) :: FTitle ! The title line from the primary input file.
CHARACTER(1024) :: FurlFile ! The name of the furling-data input file.
CHARACTER(1024) :: LinFile ! The name of the file containing FAST linearization control input parameters.
CHARACTER(1024) :: NoiseFile ! The name of the file containing aerodynamic noise input parameters.
CHARACTER(1024) :: PriFile = 'primary.fst' ! The name of the primary input file. Can be overwritten on command line.
CHARACTER(1024) :: PtfmFile ! The name of the platform-data input file.
CHARACTER(1024) :: RootName ! The root name of the input and output files.
CHARACTER(1024) :: TwrFile ! The name of the tower-data input file.
END MODULE General
!=======================================================================
MODULE InitCond
! This MODULE stores input variables for initial conditions.
USE Precision
REAL(ReKi) :: Azimuth ! Initial azimuth angle for blade 1.
REAL(ReKi), ALLOCATABLE :: BlPitchInit(:) ! Initial blade pitch angles at the start of the simulation.
REAL(ReKi) :: IPDefl ! Initial in-plane blade-tip deflection.
REAL(ReKi) :: NacYaw ! Initial or fixed nacelle-yaw angle.
REAL(ReKi) :: OoPDefl ! Initial out-of-plane blade-tip displacement.
REAL(ReKi) :: PtfmHeave = 0.0 ! Initial or fixed vertical heave translational displacement of platform. (Initialized to zero b/c not all models will read in PtfmFile)
REAL(ReKi) :: PtfmPitch = 0.0 ! Initial or fixed pitch tilt rotational displacement of platform. (Initialized to zero b/c not all models will read in PtfmFile)
REAL(ReKi) :: PtfmRoll = 0.0 ! Initial or fixed roll tilt rotational displacement of platform. (Initialized to zero b/c not all models will read in PtfmFile)
REAL(ReKi) :: PtfmSurge = 0.0 ! Initial or fixed horizontal surge translational displacement of platform. (Initialized to zero b/c not all models will read in PtfmFile)
REAL(ReKi) :: PtfmSway = 0.0 ! Initial or fixed horizontal sway translational displacement of platform. (Initialized to zero b/c not all models will read in PtfmFile)
REAL(ReKi) :: PtfmYaw = 0.0 ! Initial or fixed yaw rotational displacement of platform. (Initialized to zero b/c not all models will read in PtfmFile)
REAL(ReKi) :: QAzimInit ! Initial value of the internal generator azimuth DOF (Q(DOF_GeAz)).
REAL(ReKi) :: RotFurl = 0.0 ! Initial or fixed rotor-furl angle. (Initialized to zero b/c not all models read in FurlFile)
REAL(ReKi) :: RotSpeed ! Initial or fixed rotor speed.
REAL(ReKi) :: TailFurl = 0.0 ! Initial or fixed tail-furl angle. (Initialized to zero b/c not all models read in FurlFile)
REAL(ReKi) :: TTDspFA ! Initial fore-aft tower-top displacement.
REAL(ReKi) :: TTDspSS ! Initial side-to-side tower-top displacement.
REAL(ReKi) :: TeetDefl = 0.0 ! Initial or fixed teeter angle. (Initialized to zero b/c the 3-blader requires it to be zero)
LOGICAL, ALLOCATABLE :: DOF_FlagInit(:) ! Array which stores initial values of the feature flags for each DOF (at the start of the simulation).
END MODULE InitCond
!=======================================================================
MODULE Linear
! This MODULE stores variables for a FAST linearization analysis.
USE Precision
REAL(ReKi) :: AbsQDNorm = 0.0 ! 2-norm of the absolute difference between the velocites of two consecutive periods.
REAL(ReKi) :: AbsQNorm = 0.0 ! 2-norm of the absolute difference between the displacements of two consecutive periods.
REAL(ReKi) :: DelGenTrq = 0.0 ! Pertubation in generator torque using during FAST linearization (zero otherwise).
REAL(ReKi) :: DispTol ! Convergence tolerance for the 2-norm of the absolute difference between the displacements of two consecutive periods (rad).
REAL(ReKi) :: Period ! Steady state period of solution.
REAL(ReKi), ALLOCATABLE :: QD2op (:,:) ! Periodic steady state operating accelerations.
REAL(ReKi), ALLOCATABLE :: QDop (:,:) ! Periodic steady state operating velocities.
REAL(ReKi), ALLOCATABLE :: Qop (:,:) ! Periodic steady state operating displacements.
REAL(ReKi) :: VelTol ! Convergence tolerance for the 2-norm of the absolute difference between the velocities of two consecutive periods (rad/s).
INTEGER(4) :: CntrlInpt(7) ! List of control inputs [1 to NInputs] {1: nacelle yaw angle, 2: nacelle yaw rate, 3: generator torque, 4: collective blade pitch, 5: individual pitch of blade 1, 6: individual pitch of blade 2, 7: individual pitch of blade 3 [unavailable for 2-bladed turbines]} (-) [unused if NInputs=0]
INTEGER(4) :: Disturbnc(7) ! List of input wind disturbances [1 to NDisturbs] {1: horizontal hub-height wind speed, 2: horizontal wind direction, 3: vertical wind speed, 4: horizontal wind shear, 5: vertical power law wind shear, 6: linear vertical wind shear, 7: horizontal hub-height wind gust} (-) [unused if NDisturbs=0]
INTEGER(4) :: Iteration = 0 ! Current iteration (number of periods to convergence)
INTEGER(4) :: MdlOrder ! Order of output linearized model (1: 1st order A, B, Bd; 2: 2nd order M, C, K, F, Fd) (switch)
INTEGER(4) :: NAzimStep ! Number of azimuth steps in periodic linearized model (-).
INTEGER(4) :: NDisturbs ! Number of wind disturbances [0 to 7] (-)
INTEGER(4) :: NInputs ! Number of control inputs [0 (none) or 1 to 4+NumBl] (-)
INTEGER(4) :: NStep ! Number of time steps in one Period.
INTEGER(4) :: TrimCase ! Trim case {1: find nacelle yaw, 2: find generator torque, 3: find collective blade pitch} (switch) [used only when CalcStdy=True and GenDOF=True]
LOGICAL :: CalcStdy ! Calculate periodic steady state condition (False: linearize about zero) (switch).
LOGICAL :: IgnoreMOD = .FALSE. ! Ignore the use of function MOD in SUBROUTINE CalcOuts()?
END MODULE Linear
!=======================================================================
MODULE MassInert
! This MODULE stores input variables for turbine mass and inertias.
USE Precision
REAL(ReKi) :: AtfaIner ! Inertia of tail boom about the tail-furl axis whose origin is the tail boom center of mass.
REAL(ReKi), ALLOCATABLE :: BldCG (:) ! Blade center of mass wrt the blade root.
REAL(ReKi), ALLOCATABLE :: BldMass (:) ! Blade masses
REAL(ReKi) :: BoomMass = 0.0 ! Tail boom mass. (Initialized to zero b/c not all models read in FurlFile)
REAL(ReKi), ALLOCATABLE :: FirstMom (:) ! First mass moment of inertia of blades wrt the root.
REAL(ReKi) :: GenIner ! Generator inertia about HSS.
REAL(ReKi) :: Hubg1Iner ! Inertia of hub about g1-axis (rotor centerline).
REAL(ReKi) :: Hubg2Iner ! Inertia of hub about g2-axis (transverse to the cyclinder and passing through its c.g.).
REAL(ReKi) :: HubIner ! Hub inertia about teeter axis (2-blader) or rotor axis (3-blader).
REAL(ReKi) :: HubMass ! Hub mass.
REAL(ReKi) :: Nacd2Iner ! Inertia of nacelle about the d2-axis whose origin is the nacelle center of mass.
REAL(ReKi) :: NacMass ! Nacelle mass.
REAL(ReKi) :: NacYIner ! Nacelle yaw inertia.
REAL(ReKi) :: PtfmMass = 0.0 ! Platform mass. (Initialized to zero b/c not all models will read in PtfmFile)
REAL(ReKi) :: PtfmPIner = 0.0 ! Platform inertia for pitch tilt rotation about the platform CM. (Initialized to zero b/c not all models will read in PtfmFile)
REAL(ReKi) :: PtfmRIner = 0.0 ! Platform inertia for roll tilt rotation about the platform CM. (Initialized to zero b/c not all models will read in PtfmFile)
REAL(ReKi) :: PtfmYIner = 0.0 ! Platform inertia for yaw rotation about the platform CM. (Initialized to zero b/c not all models will read in PtfmFile)
REAL(ReKi) :: RFrlIner = 0.0 ! Rotor-furl inertia about rotor-furl axis. (Initialized to zero b/c not all models read in FurlFile)
REAL(ReKi) :: RFrlMass = 0.0 ! Rotor-furl mass. (Initialized to zero b/c not all models read in FurlFile)
REAL(ReKi) :: RotIner ! Inertia of rotor about its centerline.
REAL(ReKi) :: RotMass ! Rotor mass (blades, tips, and hub)
REAL(ReKi) :: RrfaIner ! Inertia of structure that furls with the rotor (not including rotor) about the rotor-furl axis whose origin is the center of mass of the structure that furls with the rotor (not including rotor).
REAL(ReKi), ALLOCATABLE :: SecondMom (:) ! Second mass moment of inertia of blades wrt the root.
REAL(ReKi) :: TFinMass = 0.0 ! Tail fin mass. (Initialized to zero b/c not all models read in FurlFile)
REAL(ReKi) :: TFrlIner = 0.0 ! Tail boom inertia about tail-furl axis. (Initialized to zero b/c not all models read in FurlFile)
REAL(ReKi), ALLOCATABLE :: TipMass (:) ! Tip-brake masses.
REAL(ReKi) :: TotalMass ! Mass of turbine + platform.
REAL(ReKi) :: TurbMass ! Mass of turbine (tower + rotor + nacelle).
REAL(ReKi) :: TwrMass ! Mass of tower.
REAL(ReKi) :: TwrTpMass ! Tower-top mass (rotor + nacelle).
REAL(ReKi) :: YawBrMass ! Yaw bearing mass.
END MODULE MassInert
!=======================================================================
MODULE Modes
! This MODULE stores variables for mode shapes and CONTAINs FUNCTION SHP.
USE Precision
INTEGER(4), PARAMETER :: PolyOrd = 6 ! Order of the polynomial describing the mode shape.
REAL(ReKi), ALLOCATABLE :: BldEdgSh (:,:) ! Blade-edge-mode shape coefficients.
REAL(ReKi), ALLOCATABLE :: BldFl1Sh (:,:) ! Blade-flap-mode-1 shape coefficients.
REAL(ReKi), ALLOCATABLE :: BldFl2Sh (:,:) ! Blade-flap-mode-2 shape coefficients.
REAL(ReKi), ALLOCATABLE :: FreqBE (:,:,:) ! Blade edgewise natural frequencies (both w/ and w/o centrifugal stiffening)
REAL(ReKi), ALLOCATABLE :: FreqBF (:,:,:) ! Blade flapwise natural frequencies (both w/ and w/o centrifugal stiffening)
REAL(ReKi) :: FreqTFA (2,2) ! Computed fore-aft tower natural frequencies.
REAL(ReKi) :: FreqTSS (2,2) ! Computed side-to-side tower natural frequencies.
REAL(ReKi) :: TwFAM1Sh (2:PolyOrd) ! Tower fore-aft mode-1 shape coefficients.
REAL(ReKi) :: TwFAM2Sh (2:PolyOrd) ! Tower fore-aft mode-2 shape coefficients.
REAL(ReKi) :: TwSSM1Sh (2:PolyOrd) ! Tower side-to-side mode-1 shape coefficients.
REAL(ReKi) :: TwSSM2Sh (2:PolyOrd) ! Tower side-to-side mode-2 shape coefficients.
LOGICAL :: CalcBMode ! T: calculate blade mode shapes internally, F: use blade mode shapes from the blade file.
LOGICAL, ALLOCATABLE :: CalcBModes(:) ! Holds CalcBMode for all of the blades.
LOGICAL :: CalcTMode ! T: calculate tower mode shapes internally, F: use tower mode shapes from the tower file.
CONTAINS
!=======================================================================
FUNCTION SHP(Fract, FlexL, ModShpAry, Deriv)
! SHP calculates the Derive-derivative of the shape function ModShpAry at Fract.
! NOTE: This function only works for Deriv = 0, 1, or 2.
USE Precision
IMPLICIT NONE
! Passed variables:
REAL(ReKi), INTENT(IN ) :: FlexL ! Length of flexible beam, (m)
REAL(ReKi), INTENT(IN ) :: Fract ! Fractional distance along flexible beam, 0<=Frac<=1
REAL(ReKi), INTENT(IN ) :: ModShpAry(2:PolyOrd) ! Array holding mode shape coefficients
REAL(ReKi) :: SHP ! The shape function returned by this function.
INTEGER(4), INTENT(IN ) :: Deriv ! Which derivative to compute Deriv = 0 (regular function SHP), 1 (D(SHP)/DZ), 2 (D2(SHP)/DZ2)
! Lccal variables:
INTEGER(4) :: CoefTmp !Temporary coefficient
INTEGER(4) :: I !Counts through polynomial array.
INTEGER(4) :: Swtch(0:2) !Corresponds to which derivative to compute. Sets all portions of the coefficient = 0 except those that are relevant.
Swtch = 0 !Initialize Swtch(:) to 0
Swtch(Deriv) = 1
SHP = 0.0
DO I = 2,PolyOrd
CoefTmp = Swtch(0) + ( Swtch(1)*I ) + ( Swtch(2)*I*( I - 1 ) )
IF ( (I == 2) .AND. (Deriv == 2) ) THEN
SHP = ModShpAry(I)*CoefTmp/( FlexL**Deriv )
ELSE
SHP = SHP + ModShpAry(I)*CoefTmp*( Fract**( I - Deriv ) )/( FlexL**Deriv )
ENDIF
ENDDO !I
RETURN
END FUNCTION SHP
!=======================================================================
END MODULE Modes
!=======================================================================
MODULE NacelleYaw
! This MODULE stores variables for nacelle yaw.
USE Precision
REAL(ReKi) :: YawSpr ! Nacelle-yaw spring constant.
REAL(ReKi) :: YawDamp ! Nacelle-yaw constant.
REAL(ReKi) :: YawNeut ! Neutral yaw position.
REAL(ReKi) :: YawRateNeut = 0.0 ! Neutral yaw rate.
END MODULE NacelleYaw
!=======================================================================
MODULE Output
! This MODULE stores variables used for output.
USE NWTC_Library
! ==================================================================================================="
! NOTE: The following lines of code were generated by a Matlab script called "Write_ChckOutLst.m"
! using the parameters listed in the "OutListParameters.xlsx" Excel file. Any changes to these
! lines should be modified in the Matlab script and/or Excel worksheet as necessary.
! ==================================================================================================="
! This code was generated by Write_ChckOutLst.m at 30-Jan-2012 12:30:08.
TYPE OutParmType ! User-defined type for output parameters
INTEGER :: Indx ! Index into AllOuts output array
CHARACTER(10) :: Name ! Name of the output parameter.
CHARACTER(10) :: Units ! Units corresponding to the output parameter.
INTEGER :: SignM ! sign (output multiplier).
END TYPE OutParmType
! Parameters:
! Indices for computing output channels:
! NOTES:
! (1) These parameters are in the order stored in "OutListParameters.xlsx"
! (2) Array AllOuts() must be dimensioned to the value of the largest output parameter
! (3) If an index (MaxOutPts) ever becomes greater or equal to 1000, the logic to create ARRAY/1 in the FAST-to-ADAMS preprocessor will have to be changed.
! Time:
INTEGER, PARAMETER :: Time = 0
! Wind Motions:
INTEGER, PARAMETER :: WindVxi = 1
INTEGER, PARAMETER :: WindVyi = 2
INTEGER, PARAMETER :: WindVzi = 3
INTEGER, PARAMETER :: TotWindV = 4
INTEGER, PARAMETER :: HorWindV = 5
INTEGER, PARAMETER :: HorWndDir = 6
INTEGER, PARAMETER :: VerWndDir = 7
! Blade 1 Tip Motions:
INTEGER, PARAMETER :: TipDxc1 = 8
INTEGER, PARAMETER :: TipDyc1 = 9
INTEGER, PARAMETER :: TipDzc1 = 10
INTEGER, PARAMETER :: TipDxb1 = 11
INTEGER, PARAMETER :: TipDyb1 = 12
INTEGER, PARAMETER :: TipALxb1 = 13
INTEGER, PARAMETER :: TipALyb1 = 14
INTEGER, PARAMETER :: TipALzb1 = 15
INTEGER, PARAMETER :: TipRDxb1 = 16
INTEGER, PARAMETER :: TipRDyb1 = 17
INTEGER, PARAMETER :: TipRDzc1 = 18
INTEGER, PARAMETER :: TipClrnc1 = 19
! Blade 2 Tip Motions:
INTEGER, PARAMETER :: TipDxc2 = 20
INTEGER, PARAMETER :: TipDyc2 = 21
INTEGER, PARAMETER :: TipDzc2 = 22
INTEGER, PARAMETER :: TipDxb2 = 23
INTEGER, PARAMETER :: TipDyb2 = 24
INTEGER, PARAMETER :: TipALxb2 = 25
INTEGER, PARAMETER :: TipALyb2 = 26
INTEGER, PARAMETER :: TipALzb2 = 27
INTEGER, PARAMETER :: TipRDxb2 = 28
INTEGER, PARAMETER :: TipRDyb2 = 29
INTEGER, PARAMETER :: TipRDzc2 = 30
INTEGER, PARAMETER :: TipClrnc2 = 31
! Blade 3 Tip Motions:
INTEGER, PARAMETER :: TipDxc3 = 32
INTEGER, PARAMETER :: TipDyc3 = 33
INTEGER, PARAMETER :: TipDzc3 = 34
INTEGER, PARAMETER :: TipDxb3 = 35
INTEGER, PARAMETER :: TipDyb3 = 36
INTEGER, PARAMETER :: TipALxb3 = 37
INTEGER, PARAMETER :: TipALyb3 = 38
INTEGER, PARAMETER :: TipALzb3 = 39
INTEGER, PARAMETER :: TipRDxb3 = 40
INTEGER, PARAMETER :: TipRDyb3 = 41
INTEGER, PARAMETER :: TipRDzc3 = 42
INTEGER, PARAMETER :: TipClrnc3 = 43
! Blade 1 Local Span Motions:
INTEGER, PARAMETER :: Spn1ALxb1 = 44
INTEGER, PARAMETER :: Spn1ALyb1 = 45
INTEGER, PARAMETER :: Spn1ALzb1 = 46
INTEGER, PARAMETER :: Spn2ALxb1 = 47
INTEGER, PARAMETER :: Spn2ALyb1 = 48
INTEGER, PARAMETER :: Spn2ALzb1 = 49
INTEGER, PARAMETER :: Spn3ALxb1 = 50
INTEGER, PARAMETER :: Spn3ALyb1 = 51
INTEGER, PARAMETER :: Spn3ALzb1 = 52
INTEGER, PARAMETER :: Spn4ALxb1 = 53
INTEGER, PARAMETER :: Spn4ALyb1 = 54
INTEGER, PARAMETER :: Spn4ALzb1 = 55
INTEGER, PARAMETER :: Spn5ALxb1 = 56
INTEGER, PARAMETER :: Spn5ALyb1 = 57
INTEGER, PARAMETER :: Spn5ALzb1 = 58
INTEGER, PARAMETER :: Spn6ALxb1 = 59
INTEGER, PARAMETER :: Spn6ALyb1 = 60
INTEGER, PARAMETER :: Spn6ALzb1 = 61
INTEGER, PARAMETER :: Spn7ALxb1 = 62
INTEGER, PARAMETER :: Spn7ALyb1 = 63
INTEGER, PARAMETER :: Spn7ALzb1 = 64
INTEGER, PARAMETER :: Spn8ALxb1 = 65
INTEGER, PARAMETER :: Spn8ALyb1 = 66
INTEGER, PARAMETER :: Spn8ALzb1 = 67
INTEGER, PARAMETER :: Spn9ALxb1 = 68
INTEGER, PARAMETER :: Spn9ALyb1 = 69
INTEGER, PARAMETER :: Spn9ALzb1 = 70
INTEGER, PARAMETER :: Spn1TDxb1 = 71
INTEGER, PARAMETER :: Spn1TDyb1 = 72
INTEGER, PARAMETER :: Spn1TDzb1 = 73
INTEGER, PARAMETER :: Spn2TDxb1 = 74
INTEGER, PARAMETER :: Spn2TDyb1 = 75
INTEGER, PARAMETER :: Spn2TDzb1 = 76
INTEGER, PARAMETER :: Spn3TDxb1 = 77
INTEGER, PARAMETER :: Spn3TDyb1 = 78
INTEGER, PARAMETER :: Spn3TDzb1 = 79
INTEGER, PARAMETER :: Spn4TDxb1 = 80
INTEGER, PARAMETER :: Spn4TDyb1 = 81
INTEGER, PARAMETER :: Spn4TDzb1 = 82
INTEGER, PARAMETER :: Spn5TDxb1 = 83
INTEGER, PARAMETER :: Spn5TDyb1 = 84
INTEGER, PARAMETER :: Spn5TDzb1 = 85
INTEGER, PARAMETER :: Spn6TDxb1 = 86
INTEGER, PARAMETER :: Spn6TDyb1 = 87
INTEGER, PARAMETER :: Spn6TDzb1 = 88
INTEGER, PARAMETER :: Spn7TDxb1 = 89
INTEGER, PARAMETER :: Spn7TDyb1 = 90
INTEGER, PARAMETER :: Spn7TDzb1 = 91
INTEGER, PARAMETER :: Spn8TDxb1 = 92
INTEGER, PARAMETER :: Spn8TDyb1 = 93
INTEGER, PARAMETER :: Spn8TDzb1 = 94
INTEGER, PARAMETER :: Spn9TDxb1 = 95
INTEGER, PARAMETER :: Spn9TDyb1 = 96
INTEGER, PARAMETER :: Spn9TDzb1 = 97
INTEGER, PARAMETER :: Spn1RDxb1 = 98
INTEGER, PARAMETER :: Spn1RDyb1 = 99
INTEGER, PARAMETER :: Spn1RDzb1 = 100
INTEGER, PARAMETER :: Spn2RDxb1 = 101
INTEGER, PARAMETER :: Spn2RDyb1 = 102
INTEGER, PARAMETER :: Spn2RDzb1 = 103
INTEGER, PARAMETER :: Spn3RDxb1 = 104
INTEGER, PARAMETER :: Spn3RDyb1 = 105
INTEGER, PARAMETER :: Spn3RDzb1 = 106
INTEGER, PARAMETER :: Spn4RDxb1 = 107
INTEGER, PARAMETER :: Spn4RDyb1 = 108
INTEGER, PARAMETER :: Spn4RDzb1 = 109
INTEGER, PARAMETER :: Spn5RDxb1 = 110
INTEGER, PARAMETER :: Spn5RDyb1 = 111
INTEGER, PARAMETER :: Spn5RDzb1 = 112
INTEGER, PARAMETER :: Spn6RDxb1 = 113
INTEGER, PARAMETER :: Spn6RDyb1 = 114
INTEGER, PARAMETER :: Spn6RDzb1 = 115
INTEGER, PARAMETER :: Spn7RDxb1 = 116
INTEGER, PARAMETER :: Spn7RDyb1 = 117
INTEGER, PARAMETER :: Spn7RDzb1 = 118
INTEGER, PARAMETER :: Spn8RDxb1 = 119
INTEGER, PARAMETER :: Spn8RDyb1 = 120
INTEGER, PARAMETER :: Spn8RDzb1 = 121
INTEGER, PARAMETER :: Spn9RDxb1 = 122
INTEGER, PARAMETER :: Spn9RDyb1 = 123
INTEGER, PARAMETER :: Spn9RDzb1 = 124
! Blade 2 Local Span Motions:
INTEGER, PARAMETER :: Spn1ALxb2 = 125
INTEGER, PARAMETER :: Spn1ALyb2 = 126
INTEGER, PARAMETER :: Spn1ALzb2 = 127
INTEGER, PARAMETER :: Spn2ALxb2 = 128
INTEGER, PARAMETER :: Spn2ALyb2 = 129
INTEGER, PARAMETER :: Spn2ALzb2 = 130
INTEGER, PARAMETER :: Spn3ALxb2 = 131
INTEGER, PARAMETER :: Spn3ALyb2 = 132
INTEGER, PARAMETER :: Spn3ALzb2 = 133
INTEGER, PARAMETER :: Spn4ALxb2 = 134
INTEGER, PARAMETER :: Spn4ALyb2 = 135
INTEGER, PARAMETER :: Spn4ALzb2 = 136
INTEGER, PARAMETER :: Spn5ALxb2 = 137
INTEGER, PARAMETER :: Spn5ALyb2 = 138
INTEGER, PARAMETER :: Spn5ALzb2 = 139
INTEGER, PARAMETER :: Spn6ALxb2 = 140
INTEGER, PARAMETER :: Spn6ALyb2 = 141
INTEGER, PARAMETER :: Spn6ALzb2 = 142
INTEGER, PARAMETER :: Spn7ALxb2 = 143
INTEGER, PARAMETER :: Spn7ALyb2 = 144
INTEGER, PARAMETER :: Spn7ALzb2 = 145
INTEGER, PARAMETER :: Spn8ALxb2 = 146
INTEGER, PARAMETER :: Spn8ALyb2 = 147
INTEGER, PARAMETER :: Spn8ALzb2 = 148
INTEGER, PARAMETER :: Spn9ALxb2 = 149
INTEGER, PARAMETER :: Spn9ALyb2 = 150
INTEGER, PARAMETER :: Spn9ALzb2 = 151
INTEGER, PARAMETER :: Spn1TDxb2 = 152
INTEGER, PARAMETER :: Spn1TDyb2 = 153
INTEGER, PARAMETER :: Spn1TDzb2 = 154
INTEGER, PARAMETER :: Spn2TDxb2 = 155
INTEGER, PARAMETER :: Spn2TDyb2 = 156
INTEGER, PARAMETER :: Spn2TDzb2 = 157
INTEGER, PARAMETER :: Spn3TDxb2 = 158
INTEGER, PARAMETER :: Spn3TDyb2 = 159
INTEGER, PARAMETER :: Spn3TDzb2 = 160
INTEGER, PARAMETER :: Spn4TDxb2 = 161
INTEGER, PARAMETER :: Spn4TDyb2 = 162
INTEGER, PARAMETER :: Spn4TDzb2 = 163
INTEGER, PARAMETER :: Spn5TDxb2 = 164
INTEGER, PARAMETER :: Spn5TDyb2 = 165
INTEGER, PARAMETER :: Spn5TDzb2 = 166
INTEGER, PARAMETER :: Spn6TDxb2 = 167
INTEGER, PARAMETER :: Spn6TDyb2 = 168
INTEGER, PARAMETER :: Spn6TDzb2 = 169
INTEGER, PARAMETER :: Spn7TDxb2 = 170
INTEGER, PARAMETER :: Spn7TDyb2 = 171
INTEGER, PARAMETER :: Spn7TDzb2 = 172
INTEGER, PARAMETER :: Spn8TDxb2 = 173
INTEGER, PARAMETER :: Spn8TDyb2 = 174
INTEGER, PARAMETER :: Spn8TDzb2 = 175
INTEGER, PARAMETER :: Spn9TDxb2 = 176
INTEGER, PARAMETER :: Spn9TDyb2 = 177
INTEGER, PARAMETER :: Spn9TDzb2 = 178
INTEGER, PARAMETER :: Spn1RDxb2 = 179
INTEGER, PARAMETER :: Spn1RDyb2 = 180
INTEGER, PARAMETER :: Spn1RDzb2 = 181
INTEGER, PARAMETER :: Spn2RDxb2 = 182
INTEGER, PARAMETER :: Spn2RDyb2 = 183
INTEGER, PARAMETER :: Spn2RDzb2 = 184
INTEGER, PARAMETER :: Spn3RDxb2 = 185
INTEGER, PARAMETER :: Spn3RDyb2 = 186
INTEGER, PARAMETER :: Spn3RDzb2 = 187
INTEGER, PARAMETER :: Spn4RDxb2 = 188
INTEGER, PARAMETER :: Spn4RDyb2 = 189
INTEGER, PARAMETER :: Spn4RDzb2 = 190
INTEGER, PARAMETER :: Spn5RDxb2 = 191
INTEGER, PARAMETER :: Spn5RDyb2 = 192
INTEGER, PARAMETER :: Spn5RDzb2 = 193
INTEGER, PARAMETER :: Spn6RDxb2 = 194
INTEGER, PARAMETER :: Spn6RDyb2 = 195
INTEGER, PARAMETER :: Spn6RDzb2 = 196
INTEGER, PARAMETER :: Spn7RDxb2 = 197
INTEGER, PARAMETER :: Spn7RDyb2 = 198
INTEGER, PARAMETER :: Spn7RDzb2 = 199
INTEGER, PARAMETER :: Spn8RDxb2 = 200
INTEGER, PARAMETER :: Spn8RDyb2 = 201
INTEGER, PARAMETER :: Spn8RDzb2 = 202
INTEGER, PARAMETER :: Spn9RDxb2 = 203
INTEGER, PARAMETER :: Spn9RDyb2 = 204
INTEGER, PARAMETER :: Spn9RDzb2 = 205
! Blade 3 Local Span Motions:
INTEGER, PARAMETER :: Spn1ALxb3 = 206
INTEGER, PARAMETER :: Spn1ALyb3 = 207
INTEGER, PARAMETER :: Spn1ALzb3 = 208
INTEGER, PARAMETER :: Spn2ALxb3 = 209
INTEGER, PARAMETER :: Spn2ALyb3 = 210
INTEGER, PARAMETER :: Spn2ALzb3 = 211
INTEGER, PARAMETER :: Spn3ALxb3 = 212
INTEGER, PARAMETER :: Spn3ALyb3 = 213
INTEGER, PARAMETER :: Spn3ALzb3 = 214
INTEGER, PARAMETER :: Spn4ALxb3 = 215
INTEGER, PARAMETER :: Spn4ALyb3 = 216
INTEGER, PARAMETER :: Spn4ALzb3 = 217
INTEGER, PARAMETER :: Spn5ALxb3 = 218
INTEGER, PARAMETER :: Spn5ALyb3 = 219
INTEGER, PARAMETER :: Spn5ALzb3 = 220
INTEGER, PARAMETER :: Spn6ALxb3 = 221
INTEGER, PARAMETER :: Spn6ALyb3 = 222
INTEGER, PARAMETER :: Spn6ALzb3 = 223
INTEGER, PARAMETER :: Spn7ALxb3 = 224
INTEGER, PARAMETER :: Spn7ALyb3 = 225
INTEGER, PARAMETER :: Spn7ALzb3 = 226
INTEGER, PARAMETER :: Spn8ALxb3 = 227
INTEGER, PARAMETER :: Spn8ALyb3 = 228
INTEGER, PARAMETER :: Spn8ALzb3 = 229
INTEGER, PARAMETER :: Spn9ALxb3 = 230
INTEGER, PARAMETER :: Spn9ALyb3 = 231
INTEGER, PARAMETER :: Spn9ALzb3 = 232
INTEGER, PARAMETER :: Spn1TDxb3 = 233
INTEGER, PARAMETER :: Spn1TDyb3 = 234
INTEGER, PARAMETER :: Spn1TDzb3 = 235
INTEGER, PARAMETER :: Spn2TDxb3 = 236
INTEGER, PARAMETER :: Spn2TDyb3 = 237
INTEGER, PARAMETER :: Spn2TDzb3 = 238
INTEGER, PARAMETER :: Spn3TDxb3 = 239
INTEGER, PARAMETER :: Spn3TDyb3 = 240
INTEGER, PARAMETER :: Spn3TDzb3 = 241
INTEGER, PARAMETER :: Spn4TDxb3 = 242
INTEGER, PARAMETER :: Spn4TDyb3 = 243
INTEGER, PARAMETER :: Spn4TDzb3 = 244
INTEGER, PARAMETER :: Spn5TDxb3 = 245
INTEGER, PARAMETER :: Spn5TDyb3 = 246
INTEGER, PARAMETER :: Spn5TDzb3 = 247
INTEGER, PARAMETER :: Spn6TDxb3 = 248
INTEGER, PARAMETER :: Spn6TDyb3 = 249
INTEGER, PARAMETER :: Spn6TDzb3 = 250