From 16e3d852e469cef01c31390b58fc5445d86434e9 Mon Sep 17 00:00:00 2001 From: andrew-platt Date: Thu, 8 May 2025 16:27:38 -0600 Subject: [PATCH 1/6] BD: add outputs channels for all loads mapped to root - only setup of channel handling, no calculations yet. --- docs/OtherSupporting/OutListParameters.xlsx | Bin 621621 -> 622662 bytes modules/beamdyn/src/BeamDyn_IO.f90 | 1120 ++++++++++--------- modules/beamdyn/src/BeamDyn_Types.f90 | 28 + modules/beamdyn/src/Registry_BeamDyn.txt | 4 + 4 files changed, 636 insertions(+), 516 deletions(-) diff --git a/docs/OtherSupporting/OutListParameters.xlsx b/docs/OtherSupporting/OutListParameters.xlsx index 8d622a50d76a07a91ba43b42403b34f9d11c2d13..5cd51e87ac6269e5797b9e09449df0dc3b4843a4 100644 GIT binary patch delta 23574 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 Sq$jgPLLV1sSw6S`5d9x`8{6st diff --git a/modules/beamdyn/src/BeamDyn_IO.f90 b/modules/beamdyn/src/BeamDyn_IO.f90 index ee278ca399..4e4ccd0db5 100644 --- a/modules/beamdyn/src/BeamDyn_IO.f90 +++ b/modules/beamdyn/src/BeamDyn_IO.f90 @@ -41,7 +41,7 @@ MODULE BeamDyn_IO ! 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 29-Sep-2015 10:23:41. +! This code was generated by Write_ChckOutLst.m at 08-May-2025 15:51:30. ! Indices for computing output channels: @@ -51,387 +51,403 @@ MODULE BeamDyn_IO ! Time: - INTEGER(IntKi), PARAMETER :: Time = 0 + INTEGER(IntKi), PARAMETER :: Time = 0 ! Reaction Loads: - INTEGER(IntKi), PARAMETER :: RootFxr = 1 - INTEGER(IntKi), PARAMETER :: RootFyr = 2 - INTEGER(IntKi), PARAMETER :: RootFzr = 3 - INTEGER(IntKi), PARAMETER :: RootMxr = 4 - INTEGER(IntKi), PARAMETER :: RootMyr = 5 - INTEGER(IntKi), PARAMETER :: RootMzr = 6 + INTEGER(IntKi), PARAMETER :: RootFxr = 1 + INTEGER(IntKi), PARAMETER :: RootFyr = 2 + INTEGER(IntKi), PARAMETER :: RootFzr = 3 + INTEGER(IntKi), PARAMETER :: RootMxr = 4 + INTEGER(IntKi), PARAMETER :: RootMyr = 5 + INTEGER(IntKi), PARAMETER :: RootMzr = 6 ! Tip Motions: - INTEGER(IntKi), PARAMETER :: TipTDxr = 7 - INTEGER(IntKi), PARAMETER :: TipTDyr = 8 - INTEGER(IntKi), PARAMETER :: TipTDzr = 9 - INTEGER(IntKi), PARAMETER :: TipRDxr = 10 - INTEGER(IntKi), PARAMETER :: TipRDyr = 11 - INTEGER(IntKi), PARAMETER :: TipRDzr = 12 - INTEGER(IntKi), PARAMETER :: TipTVXg = 13 - INTEGER(IntKi), PARAMETER :: TipTVYg = 14 - INTEGER(IntKi), PARAMETER :: TipTVZg = 15 - INTEGER(IntKi), PARAMETER :: TipRVXg = 16 - INTEGER(IntKi), PARAMETER :: TipRVYg = 17 - INTEGER(IntKi), PARAMETER :: TipRVZg = 18 - INTEGER(IntKi), PARAMETER :: TipTAXl = 19 - INTEGER(IntKi), PARAMETER :: TipTAYl = 20 - INTEGER(IntKi), PARAMETER :: TipTAZl = 21 - INTEGER(IntKi), PARAMETER :: TipRAXl = 22 - INTEGER(IntKi), PARAMETER :: TipRAYl = 23 - INTEGER(IntKi), PARAMETER :: TipRAZl = 24 + INTEGER(IntKi), PARAMETER :: TipTDxr = 7 + INTEGER(IntKi), PARAMETER :: TipTDyr = 8 + INTEGER(IntKi), PARAMETER :: TipTDzr = 9 + INTEGER(IntKi), PARAMETER :: TipRDxr = 10 + INTEGER(IntKi), PARAMETER :: TipRDyr = 11 + INTEGER(IntKi), PARAMETER :: TipRDzr = 12 + INTEGER(IntKi), PARAMETER :: TipTVXg = 13 + INTEGER(IntKi), PARAMETER :: TipTVYg = 14 + INTEGER(IntKi), PARAMETER :: TipTVZg = 15 + INTEGER(IntKi), PARAMETER :: TipRVXg = 16 + INTEGER(IntKi), PARAMETER :: TipRVYg = 17 + INTEGER(IntKi), PARAMETER :: TipRVZg = 18 + INTEGER(IntKi), PARAMETER :: TipTAXl = 19 + INTEGER(IntKi), PARAMETER :: TipTAYl = 20 + INTEGER(IntKi), PARAMETER :: TipTAZl = 21 + INTEGER(IntKi), PARAMETER :: TipRAXl = 22 + INTEGER(IntKi), PARAMETER :: TipRAYl = 23 + INTEGER(IntKi), PARAMETER :: TipRAZl = 24 ! Sectional Loads: - INTEGER(IntKi), PARAMETER :: N1Fxl = 25 - INTEGER(IntKi), PARAMETER :: N1Fyl = 26 - INTEGER(IntKi), PARAMETER :: N1Fzl = 27 - INTEGER(IntKi), PARAMETER :: N2Fxl = 28 - INTEGER(IntKi), PARAMETER :: N2Fyl = 29 - INTEGER(IntKi), PARAMETER :: N2Fzl = 30 - INTEGER(IntKi), PARAMETER :: N3Fxl = 31 - INTEGER(IntKi), PARAMETER :: N3Fyl = 32 - INTEGER(IntKi), PARAMETER :: N3Fzl = 33 - INTEGER(IntKi), PARAMETER :: N4Fxl = 34 - INTEGER(IntKi), PARAMETER :: N4Fyl = 35 - INTEGER(IntKi), PARAMETER :: N4Fzl = 36 - INTEGER(IntKi), PARAMETER :: N5Fxl = 37 - INTEGER(IntKi), PARAMETER :: N5Fyl = 38 - INTEGER(IntKi), PARAMETER :: N5Fzl = 39 - INTEGER(IntKi), PARAMETER :: N6Fxl = 40 - INTEGER(IntKi), PARAMETER :: N6Fyl = 41 - INTEGER(IntKi), PARAMETER :: N6Fzl = 42 - INTEGER(IntKi), PARAMETER :: N7Fxl = 43 - INTEGER(IntKi), PARAMETER :: N7Fyl = 44 - INTEGER(IntKi), PARAMETER :: N7Fzl = 45 - INTEGER(IntKi), PARAMETER :: N8Fxl = 46 - INTEGER(IntKi), PARAMETER :: N8Fyl = 47 - INTEGER(IntKi), PARAMETER :: N8Fzl = 48 - INTEGER(IntKi), PARAMETER :: N9Fxl = 49 - INTEGER(IntKi), PARAMETER :: N9Fyl = 50 - INTEGER(IntKi), PARAMETER :: N9Fzl = 51 - INTEGER(IntKi), PARAMETER :: N1Mxl = 52 - INTEGER(IntKi), PARAMETER :: N1Myl = 53 - INTEGER(IntKi), PARAMETER :: N1Mzl = 54 - INTEGER(IntKi), PARAMETER :: N2Mxl = 55 - INTEGER(IntKi), PARAMETER :: N2Myl = 56 - INTEGER(IntKi), PARAMETER :: N2Mzl = 57 - INTEGER(IntKi), PARAMETER :: N3Mxl = 58 - INTEGER(IntKi), PARAMETER :: N3Myl = 59 - INTEGER(IntKi), PARAMETER :: N3Mzl = 60 - INTEGER(IntKi), PARAMETER :: N4Mxl = 61 - INTEGER(IntKi), PARAMETER :: N4Myl = 62 - INTEGER(IntKi), PARAMETER :: N4Mzl = 63 - INTEGER(IntKi), PARAMETER :: N5Mxl = 64 - INTEGER(IntKi), PARAMETER :: N5Myl = 65 - INTEGER(IntKi), PARAMETER :: N5Mzl = 66 - INTEGER(IntKi), PARAMETER :: N6Mxl = 67 - INTEGER(IntKi), PARAMETER :: N6Myl = 68 - INTEGER(IntKi), PARAMETER :: N6Mzl = 69 - INTEGER(IntKi), PARAMETER :: N7Mxl = 70 - INTEGER(IntKi), PARAMETER :: N7Myl = 71 - INTEGER(IntKi), PARAMETER :: N7Mzl = 72 - INTEGER(IntKi), PARAMETER :: N8Mxl = 73 - INTEGER(IntKi), PARAMETER :: N8Myl = 74 - INTEGER(IntKi), PARAMETER :: N8Mzl = 75 - INTEGER(IntKi), PARAMETER :: N9Mxl = 76 - INTEGER(IntKi), PARAMETER :: N9Myl = 77 - INTEGER(IntKi), PARAMETER :: N9Mzl = 78 + INTEGER(IntKi), PARAMETER :: N1Fxl = 25 + INTEGER(IntKi), PARAMETER :: N1Fyl = 26 + INTEGER(IntKi), PARAMETER :: N1Fzl = 27 + INTEGER(IntKi), PARAMETER :: N2Fxl = 28 + INTEGER(IntKi), PARAMETER :: N2Fyl = 29 + INTEGER(IntKi), PARAMETER :: N2Fzl = 30 + INTEGER(IntKi), PARAMETER :: N3Fxl = 31 + INTEGER(IntKi), PARAMETER :: N3Fyl = 32 + INTEGER(IntKi), PARAMETER :: N3Fzl = 33 + INTEGER(IntKi), PARAMETER :: N4Fxl = 34 + INTEGER(IntKi), PARAMETER :: N4Fyl = 35 + INTEGER(IntKi), PARAMETER :: N4Fzl = 36 + INTEGER(IntKi), PARAMETER :: N5Fxl = 37 + INTEGER(IntKi), PARAMETER :: N5Fyl = 38 + INTEGER(IntKi), PARAMETER :: N5Fzl = 39 + INTEGER(IntKi), PARAMETER :: N6Fxl = 40 + INTEGER(IntKi), PARAMETER :: N6Fyl = 41 + INTEGER(IntKi), PARAMETER :: N6Fzl = 42 + INTEGER(IntKi), PARAMETER :: N7Fxl = 43 + INTEGER(IntKi), PARAMETER :: N7Fyl = 44 + INTEGER(IntKi), PARAMETER :: N7Fzl = 45 + INTEGER(IntKi), PARAMETER :: N8Fxl = 46 + INTEGER(IntKi), PARAMETER :: N8Fyl = 47 + INTEGER(IntKi), PARAMETER :: N8Fzl = 48 + INTEGER(IntKi), PARAMETER :: N9Fxl = 49 + INTEGER(IntKi), PARAMETER :: N9Fyl = 50 + INTEGER(IntKi), PARAMETER :: N9Fzl = 51 + INTEGER(IntKi), PARAMETER :: N1Mxl = 52 + INTEGER(IntKi), PARAMETER :: N1Myl = 53 + INTEGER(IntKi), PARAMETER :: N1Mzl = 54 + INTEGER(IntKi), PARAMETER :: N2Mxl = 55 + INTEGER(IntKi), PARAMETER :: N2Myl = 56 + INTEGER(IntKi), PARAMETER :: N2Mzl = 57 + INTEGER(IntKi), PARAMETER :: N3Mxl = 58 + INTEGER(IntKi), PARAMETER :: N3Myl = 59 + INTEGER(IntKi), PARAMETER :: N3Mzl = 60 + INTEGER(IntKi), PARAMETER :: N4Mxl = 61 + INTEGER(IntKi), PARAMETER :: N4Myl = 62 + INTEGER(IntKi), PARAMETER :: N4Mzl = 63 + INTEGER(IntKi), PARAMETER :: N5Mxl = 64 + INTEGER(IntKi), PARAMETER :: N5Myl = 65 + INTEGER(IntKi), PARAMETER :: N5Mzl = 66 + INTEGER(IntKi), PARAMETER :: N6Mxl = 67 + INTEGER(IntKi), PARAMETER :: N6Myl = 68 + INTEGER(IntKi), PARAMETER :: N6Mzl = 69 + INTEGER(IntKi), PARAMETER :: N7Mxl = 70 + INTEGER(IntKi), PARAMETER :: N7Myl = 71 + INTEGER(IntKi), PARAMETER :: N7Mzl = 72 + INTEGER(IntKi), PARAMETER :: N8Mxl = 73 + INTEGER(IntKi), PARAMETER :: N8Myl = 74 + INTEGER(IntKi), PARAMETER :: N8Mzl = 75 + INTEGER(IntKi), PARAMETER :: N9Mxl = 76 + INTEGER(IntKi), PARAMETER :: N9Myl = 77 + INTEGER(IntKi), PARAMETER :: N9Mzl = 78 ! Sectional Motions: - INTEGER(IntKi), PARAMETER :: N1TDxr = 79 - INTEGER(IntKi), PARAMETER :: N1TDyr = 80 - INTEGER(IntKi), PARAMETER :: N1TDzr = 81 - INTEGER(IntKi), PARAMETER :: N2TDxr = 82 - INTEGER(IntKi), PARAMETER :: N2TDyr = 83 - INTEGER(IntKi), PARAMETER :: N2TDzr = 84 - INTEGER(IntKi), PARAMETER :: N3TDxr = 85 - INTEGER(IntKi), PARAMETER :: N3TDyr = 86 - INTEGER(IntKi), PARAMETER :: N3TDzr = 87 - INTEGER(IntKi), PARAMETER :: N4TDxr = 88 - INTEGER(IntKi), PARAMETER :: N4TDyr = 89 - INTEGER(IntKi), PARAMETER :: N4TDzr = 90 - INTEGER(IntKi), PARAMETER :: N5TDxr = 91 - INTEGER(IntKi), PARAMETER :: N5TDyr = 92 - INTEGER(IntKi), PARAMETER :: N5TDzr = 93 - INTEGER(IntKi), PARAMETER :: N6TDxr = 94 - INTEGER(IntKi), PARAMETER :: N6TDyr = 95 - INTEGER(IntKi), PARAMETER :: N6TDzr = 96 - INTEGER(IntKi), PARAMETER :: N7TDxr = 97 - INTEGER(IntKi), PARAMETER :: N7TDyr = 98 - INTEGER(IntKi), PARAMETER :: N7TDzr = 99 - INTEGER(IntKi), PARAMETER :: N8TDxr = 100 - INTEGER(IntKi), PARAMETER :: N8TDyr = 101 - INTEGER(IntKi), PARAMETER :: N8TDzr = 102 - INTEGER(IntKi), PARAMETER :: N9TDxr = 103 - INTEGER(IntKi), PARAMETER :: N9TDyr = 104 - INTEGER(IntKi), PARAMETER :: N9TDzr = 105 - INTEGER(IntKi), PARAMETER :: N1RDxr = 106 - INTEGER(IntKi), PARAMETER :: N1RDyr = 107 - INTEGER(IntKi), PARAMETER :: N1RDzr = 108 - INTEGER(IntKi), PARAMETER :: N2RDxr = 109 - INTEGER(IntKi), PARAMETER :: N2RDyr = 110 - INTEGER(IntKi), PARAMETER :: N2RDzr = 111 - INTEGER(IntKi), PARAMETER :: N3RDxr = 112 - INTEGER(IntKi), PARAMETER :: N3RDyr = 113 - INTEGER(IntKi), PARAMETER :: N3RDzr = 114 - INTEGER(IntKi), PARAMETER :: N4RDxr = 115 - INTEGER(IntKi), PARAMETER :: N4RDyr = 116 - INTEGER(IntKi), PARAMETER :: N4RDzr = 117 - INTEGER(IntKi), PARAMETER :: N5RDxr = 118 - INTEGER(IntKi), PARAMETER :: N5RDyr = 119 - INTEGER(IntKi), PARAMETER :: N5RDzr = 120 - INTEGER(IntKi), PARAMETER :: N6RDxr = 121 - INTEGER(IntKi), PARAMETER :: N6RDyr = 122 - INTEGER(IntKi), PARAMETER :: N6RDzr = 123 - INTEGER(IntKi), PARAMETER :: N7RDxr = 124 - INTEGER(IntKi), PARAMETER :: N7RDyr = 125 - INTEGER(IntKi), PARAMETER :: N7RDzr = 126 - INTEGER(IntKi), PARAMETER :: N8RDxr = 127 - INTEGER(IntKi), PARAMETER :: N8RDyr = 128 - INTEGER(IntKi), PARAMETER :: N8RDzr = 129 - INTEGER(IntKi), PARAMETER :: N9RDxr = 130 - INTEGER(IntKi), PARAMETER :: N9RDyr = 131 - INTEGER(IntKi), PARAMETER :: N9RDzr = 132 - INTEGER(IntKi), PARAMETER :: N1TVXg = 133 - INTEGER(IntKi), PARAMETER :: N1TVYg = 134 - INTEGER(IntKi), PARAMETER :: N1TVZg = 135 - INTEGER(IntKi), PARAMETER :: N2TVXg = 136 - INTEGER(IntKi), PARAMETER :: N2TVYg = 137 - INTEGER(IntKi), PARAMETER :: N2TVZg = 138 - INTEGER(IntKi), PARAMETER :: N3TVXg = 139 - INTEGER(IntKi), PARAMETER :: N3TVYg = 140 - INTEGER(IntKi), PARAMETER :: N3TVZg = 141 - INTEGER(IntKi), PARAMETER :: N4TVXg = 142 - INTEGER(IntKi), PARAMETER :: N4TVYg = 143 - INTEGER(IntKi), PARAMETER :: N4TVZg = 144 - INTEGER(IntKi), PARAMETER :: N5TVXg = 145 - INTEGER(IntKi), PARAMETER :: N5TVYg = 146 - INTEGER(IntKi), PARAMETER :: N5TVZg = 147 - INTEGER(IntKi), PARAMETER :: N6TVXg = 148 - INTEGER(IntKi), PARAMETER :: N6TVYg = 149 - INTEGER(IntKi), PARAMETER :: N6TVZg = 150 - INTEGER(IntKi), PARAMETER :: N7TVXg = 151 - INTEGER(IntKi), PARAMETER :: N7TVYg = 152 - INTEGER(IntKi), PARAMETER :: N7TVZg = 153 - INTEGER(IntKi), PARAMETER :: N8TVXg = 154 - INTEGER(IntKi), PARAMETER :: N8TVYg = 155 - INTEGER(IntKi), PARAMETER :: N8TVZg = 156 - INTEGER(IntKi), PARAMETER :: N9TVXg = 157 - INTEGER(IntKi), PARAMETER :: N9TVYg = 158 - INTEGER(IntKi), PARAMETER :: N9TVZg = 159 - INTEGER(IntKi), PARAMETER :: N1RVXg = 160 - INTEGER(IntKi), PARAMETER :: N1RVYg = 161 - INTEGER(IntKi), PARAMETER :: N1RVZg = 162 - INTEGER(IntKi), PARAMETER :: N2RVXg = 163 - INTEGER(IntKi), PARAMETER :: N2RVYg = 164 - INTEGER(IntKi), PARAMETER :: N2RVZg = 165 - INTEGER(IntKi), PARAMETER :: N3RVXg = 166 - INTEGER(IntKi), PARAMETER :: N3RVYg = 167 - INTEGER(IntKi), PARAMETER :: N3RVZg = 168 - INTEGER(IntKi), PARAMETER :: N4RVXg = 169 - INTEGER(IntKi), PARAMETER :: N4RVYg = 170 - INTEGER(IntKi), PARAMETER :: N4RVZg = 171 - INTEGER(IntKi), PARAMETER :: N5RVXg = 172 - INTEGER(IntKi), PARAMETER :: N5RVYg = 173 - INTEGER(IntKi), PARAMETER :: N5RVZg = 174 - INTEGER(IntKi), PARAMETER :: N6RVXg = 175 - INTEGER(IntKi), PARAMETER :: N6RVYg = 176 - INTEGER(IntKi), PARAMETER :: N6RVZg = 177 - INTEGER(IntKi), PARAMETER :: N7RVXg = 178 - INTEGER(IntKi), PARAMETER :: N7RVYg = 179 - INTEGER(IntKi), PARAMETER :: N7RVZg = 180 - INTEGER(IntKi), PARAMETER :: N8RVXg = 181 - INTEGER(IntKi), PARAMETER :: N8RVYg = 182 - INTEGER(IntKi), PARAMETER :: N8RVZg = 183 - INTEGER(IntKi), PARAMETER :: N9RVXg = 184 - INTEGER(IntKi), PARAMETER :: N9RVYg = 185 - INTEGER(IntKi), PARAMETER :: N9RVZg = 186 - INTEGER(IntKi), PARAMETER :: N1TAXl = 187 - INTEGER(IntKi), PARAMETER :: N1TAYl = 188 - INTEGER(IntKi), PARAMETER :: N1TAZl = 189 - INTEGER(IntKi), PARAMETER :: N2TAXl = 190 - INTEGER(IntKi), PARAMETER :: N2TAYl = 191 - INTEGER(IntKi), PARAMETER :: N2TAZl = 192 - INTEGER(IntKi), PARAMETER :: N3TAXl = 193 - INTEGER(IntKi), PARAMETER :: N3TAYl = 194 - INTEGER(IntKi), PARAMETER :: N3TAZl = 195 - INTEGER(IntKi), PARAMETER :: N4TAXl = 196 - INTEGER(IntKi), PARAMETER :: N4TAYl = 197 - INTEGER(IntKi), PARAMETER :: N4TAZl = 198 - INTEGER(IntKi), PARAMETER :: N5TAXl = 199 - INTEGER(IntKi), PARAMETER :: N5TAYl = 200 - INTEGER(IntKi), PARAMETER :: N5TAZl = 201 - INTEGER(IntKi), PARAMETER :: N6TAXl = 202 - INTEGER(IntKi), PARAMETER :: N6TAYl = 203 - INTEGER(IntKi), PARAMETER :: N6TAZl = 204 - INTEGER(IntKi), PARAMETER :: N7TAXl = 205 - INTEGER(IntKi), PARAMETER :: N7TAYl = 206 - INTEGER(IntKi), PARAMETER :: N7TAZl = 207 - INTEGER(IntKi), PARAMETER :: N8TAXl = 208 - INTEGER(IntKi), PARAMETER :: N8TAYl = 209 - INTEGER(IntKi), PARAMETER :: N8TAZl = 210 - INTEGER(IntKi), PARAMETER :: N9TAXl = 211 - INTEGER(IntKi), PARAMETER :: N9TAYl = 212 - INTEGER(IntKi), PARAMETER :: N9TAZl = 213 - INTEGER(IntKi), PARAMETER :: N1RAXl = 214 - INTEGER(IntKi), PARAMETER :: N1RAYl = 215 - INTEGER(IntKi), PARAMETER :: N1RAZl = 216 - INTEGER(IntKi), PARAMETER :: N2RAXl = 217 - INTEGER(IntKi), PARAMETER :: N2RAYl = 218 - INTEGER(IntKi), PARAMETER :: N2RAZl = 219 - INTEGER(IntKi), PARAMETER :: N3RAXl = 220 - INTEGER(IntKi), PARAMETER :: N3RAYl = 221 - INTEGER(IntKi), PARAMETER :: N3RAZl = 222 - INTEGER(IntKi), PARAMETER :: N4RAXl = 223 - INTEGER(IntKi), PARAMETER :: N4RAYl = 224 - INTEGER(IntKi), PARAMETER :: N4RAZl = 225 - INTEGER(IntKi), PARAMETER :: N5RAXl = 226 - INTEGER(IntKi), PARAMETER :: N5RAYl = 227 - INTEGER(IntKi), PARAMETER :: N5RAZl = 228 - INTEGER(IntKi), PARAMETER :: N6RAXl = 229 - INTEGER(IntKi), PARAMETER :: N6RAYl = 230 - INTEGER(IntKi), PARAMETER :: N6RAZl = 231 - INTEGER(IntKi), PARAMETER :: N7RAXl = 232 - INTEGER(IntKi), PARAMETER :: N7RAYl = 233 - INTEGER(IntKi), PARAMETER :: N7RAZl = 234 - INTEGER(IntKi), PARAMETER :: N8RAXl = 235 - INTEGER(IntKi), PARAMETER :: N8RAYl = 236 - INTEGER(IntKi), PARAMETER :: N8RAZl = 237 - INTEGER(IntKi), PARAMETER :: N9RAXl = 238 - INTEGER(IntKi), PARAMETER :: N9RAYl = 239 - INTEGER(IntKi), PARAMETER :: N9RAZl = 240 + INTEGER(IntKi), PARAMETER :: N1TDxr = 79 + INTEGER(IntKi), PARAMETER :: N1TDyr = 80 + INTEGER(IntKi), PARAMETER :: N1TDzr = 81 + INTEGER(IntKi), PARAMETER :: N2TDxr = 82 + INTEGER(IntKi), PARAMETER :: N2TDyr = 83 + INTEGER(IntKi), PARAMETER :: N2TDzr = 84 + INTEGER(IntKi), PARAMETER :: N3TDxr = 85 + INTEGER(IntKi), PARAMETER :: N3TDyr = 86 + INTEGER(IntKi), PARAMETER :: N3TDzr = 87 + INTEGER(IntKi), PARAMETER :: N4TDxr = 88 + INTEGER(IntKi), PARAMETER :: N4TDyr = 89 + INTEGER(IntKi), PARAMETER :: N4TDzr = 90 + INTEGER(IntKi), PARAMETER :: N5TDxr = 91 + INTEGER(IntKi), PARAMETER :: N5TDyr = 92 + INTEGER(IntKi), PARAMETER :: N5TDzr = 93 + INTEGER(IntKi), PARAMETER :: N6TDxr = 94 + INTEGER(IntKi), PARAMETER :: N6TDyr = 95 + INTEGER(IntKi), PARAMETER :: N6TDzr = 96 + INTEGER(IntKi), PARAMETER :: N7TDxr = 97 + INTEGER(IntKi), PARAMETER :: N7TDyr = 98 + INTEGER(IntKi), PARAMETER :: N7TDzr = 99 + INTEGER(IntKi), PARAMETER :: N8TDxr = 100 + INTEGER(IntKi), PARAMETER :: N8TDyr = 101 + INTEGER(IntKi), PARAMETER :: N8TDzr = 102 + INTEGER(IntKi), PARAMETER :: N9TDxr = 103 + INTEGER(IntKi), PARAMETER :: N9TDyr = 104 + INTEGER(IntKi), PARAMETER :: N9TDzr = 105 + INTEGER(IntKi), PARAMETER :: N1RDxr = 106 + INTEGER(IntKi), PARAMETER :: N1RDyr = 107 + INTEGER(IntKi), PARAMETER :: N1RDzr = 108 + INTEGER(IntKi), PARAMETER :: N2RDxr = 109 + INTEGER(IntKi), PARAMETER :: N2RDyr = 110 + INTEGER(IntKi), PARAMETER :: N2RDzr = 111 + INTEGER(IntKi), PARAMETER :: N3RDxr = 112 + INTEGER(IntKi), PARAMETER :: N3RDyr = 113 + INTEGER(IntKi), PARAMETER :: N3RDzr = 114 + INTEGER(IntKi), PARAMETER :: N4RDxr = 115 + INTEGER(IntKi), PARAMETER :: N4RDyr = 116 + INTEGER(IntKi), PARAMETER :: N4RDzr = 117 + INTEGER(IntKi), PARAMETER :: N5RDxr = 118 + INTEGER(IntKi), PARAMETER :: N5RDyr = 119 + INTEGER(IntKi), PARAMETER :: N5RDzr = 120 + INTEGER(IntKi), PARAMETER :: N6RDxr = 121 + INTEGER(IntKi), PARAMETER :: N6RDyr = 122 + INTEGER(IntKi), PARAMETER :: N6RDzr = 123 + INTEGER(IntKi), PARAMETER :: N7RDxr = 124 + INTEGER(IntKi), PARAMETER :: N7RDyr = 125 + INTEGER(IntKi), PARAMETER :: N7RDzr = 126 + INTEGER(IntKi), PARAMETER :: N8RDxr = 127 + INTEGER(IntKi), PARAMETER :: N8RDyr = 128 + INTEGER(IntKi), PARAMETER :: N8RDzr = 129 + INTEGER(IntKi), PARAMETER :: N9RDxr = 130 + INTEGER(IntKi), PARAMETER :: N9RDyr = 131 + INTEGER(IntKi), PARAMETER :: N9RDzr = 132 + INTEGER(IntKi), PARAMETER :: N1TVXg = 133 + INTEGER(IntKi), PARAMETER :: N1TVYg = 134 + INTEGER(IntKi), PARAMETER :: N1TVZg = 135 + INTEGER(IntKi), PARAMETER :: N2TVXg = 136 + INTEGER(IntKi), PARAMETER :: N2TVYg = 137 + INTEGER(IntKi), PARAMETER :: N2TVZg = 138 + INTEGER(IntKi), PARAMETER :: N3TVXg = 139 + INTEGER(IntKi), PARAMETER :: N3TVYg = 140 + INTEGER(IntKi), PARAMETER :: N3TVZg = 141 + INTEGER(IntKi), PARAMETER :: N4TVXg = 142 + INTEGER(IntKi), PARAMETER :: N4TVYg = 143 + INTEGER(IntKi), PARAMETER :: N4TVZg = 144 + INTEGER(IntKi), PARAMETER :: N5TVXg = 145 + INTEGER(IntKi), PARAMETER :: N5TVYg = 146 + INTEGER(IntKi), PARAMETER :: N5TVZg = 147 + INTEGER(IntKi), PARAMETER :: N6TVXg = 148 + INTEGER(IntKi), PARAMETER :: N6TVYg = 149 + INTEGER(IntKi), PARAMETER :: N6TVZg = 150 + INTEGER(IntKi), PARAMETER :: N7TVXg = 151 + INTEGER(IntKi), PARAMETER :: N7TVYg = 152 + INTEGER(IntKi), PARAMETER :: N7TVZg = 153 + INTEGER(IntKi), PARAMETER :: N8TVXg = 154 + INTEGER(IntKi), PARAMETER :: N8TVYg = 155 + INTEGER(IntKi), PARAMETER :: N8TVZg = 156 + INTEGER(IntKi), PARAMETER :: N9TVXg = 157 + INTEGER(IntKi), PARAMETER :: N9TVYg = 158 + INTEGER(IntKi), PARAMETER :: N9TVZg = 159 + INTEGER(IntKi), PARAMETER :: N1RVXg = 160 + INTEGER(IntKi), PARAMETER :: N1RVYg = 161 + INTEGER(IntKi), PARAMETER :: N1RVZg = 162 + INTEGER(IntKi), PARAMETER :: N2RVXg = 163 + INTEGER(IntKi), PARAMETER :: N2RVYg = 164 + INTEGER(IntKi), PARAMETER :: N2RVZg = 165 + INTEGER(IntKi), PARAMETER :: N3RVXg = 166 + INTEGER(IntKi), PARAMETER :: N3RVYg = 167 + INTEGER(IntKi), PARAMETER :: N3RVZg = 168 + INTEGER(IntKi), PARAMETER :: N4RVXg = 169 + INTEGER(IntKi), PARAMETER :: N4RVYg = 170 + INTEGER(IntKi), PARAMETER :: N4RVZg = 171 + INTEGER(IntKi), PARAMETER :: N5RVXg = 172 + INTEGER(IntKi), PARAMETER :: N5RVYg = 173 + INTEGER(IntKi), PARAMETER :: N5RVZg = 174 + INTEGER(IntKi), PARAMETER :: N6RVXg = 175 + INTEGER(IntKi), PARAMETER :: N6RVYg = 176 + INTEGER(IntKi), PARAMETER :: N6RVZg = 177 + INTEGER(IntKi), PARAMETER :: N7RVXg = 178 + INTEGER(IntKi), PARAMETER :: N7RVYg = 179 + INTEGER(IntKi), PARAMETER :: N7RVZg = 180 + INTEGER(IntKi), PARAMETER :: N8RVXg = 181 + INTEGER(IntKi), PARAMETER :: N8RVYg = 182 + INTEGER(IntKi), PARAMETER :: N8RVZg = 183 + INTEGER(IntKi), PARAMETER :: N9RVXg = 184 + INTEGER(IntKi), PARAMETER :: N9RVYg = 185 + INTEGER(IntKi), PARAMETER :: N9RVZg = 186 + INTEGER(IntKi), PARAMETER :: N1TAXl = 187 + INTEGER(IntKi), PARAMETER :: N1TAYl = 188 + INTEGER(IntKi), PARAMETER :: N1TAZl = 189 + INTEGER(IntKi), PARAMETER :: N2TAXl = 190 + INTEGER(IntKi), PARAMETER :: N2TAYl = 191 + INTEGER(IntKi), PARAMETER :: N2TAZl = 192 + INTEGER(IntKi), PARAMETER :: N3TAXl = 193 + INTEGER(IntKi), PARAMETER :: N3TAYl = 194 + INTEGER(IntKi), PARAMETER :: N3TAZl = 195 + INTEGER(IntKi), PARAMETER :: N4TAXl = 196 + INTEGER(IntKi), PARAMETER :: N4TAYl = 197 + INTEGER(IntKi), PARAMETER :: N4TAZl = 198 + INTEGER(IntKi), PARAMETER :: N5TAXl = 199 + INTEGER(IntKi), PARAMETER :: N5TAYl = 200 + INTEGER(IntKi), PARAMETER :: N5TAZl = 201 + INTEGER(IntKi), PARAMETER :: N6TAXl = 202 + INTEGER(IntKi), PARAMETER :: N6TAYl = 203 + INTEGER(IntKi), PARAMETER :: N6TAZl = 204 + INTEGER(IntKi), PARAMETER :: N7TAXl = 205 + INTEGER(IntKi), PARAMETER :: N7TAYl = 206 + INTEGER(IntKi), PARAMETER :: N7TAZl = 207 + INTEGER(IntKi), PARAMETER :: N8TAXl = 208 + INTEGER(IntKi), PARAMETER :: N8TAYl = 209 + INTEGER(IntKi), PARAMETER :: N8TAZl = 210 + INTEGER(IntKi), PARAMETER :: N9TAXl = 211 + INTEGER(IntKi), PARAMETER :: N9TAYl = 212 + INTEGER(IntKi), PARAMETER :: N9TAZl = 213 + INTEGER(IntKi), PARAMETER :: N1RAXl = 214 + INTEGER(IntKi), PARAMETER :: N1RAYl = 215 + INTEGER(IntKi), PARAMETER :: N1RAZl = 216 + INTEGER(IntKi), PARAMETER :: N2RAXl = 217 + INTEGER(IntKi), PARAMETER :: N2RAYl = 218 + INTEGER(IntKi), PARAMETER :: N2RAZl = 219 + INTEGER(IntKi), PARAMETER :: N3RAXl = 220 + INTEGER(IntKi), PARAMETER :: N3RAYl = 221 + INTEGER(IntKi), PARAMETER :: N3RAZl = 222 + INTEGER(IntKi), PARAMETER :: N4RAXl = 223 + INTEGER(IntKi), PARAMETER :: N4RAYl = 224 + INTEGER(IntKi), PARAMETER :: N4RAZl = 225 + INTEGER(IntKi), PARAMETER :: N5RAXl = 226 + INTEGER(IntKi), PARAMETER :: N5RAYl = 227 + INTEGER(IntKi), PARAMETER :: N5RAZl = 228 + INTEGER(IntKi), PARAMETER :: N6RAXl = 229 + INTEGER(IntKi), PARAMETER :: N6RAYl = 230 + INTEGER(IntKi), PARAMETER :: N6RAZl = 231 + INTEGER(IntKi), PARAMETER :: N7RAXl = 232 + INTEGER(IntKi), PARAMETER :: N7RAYl = 233 + INTEGER(IntKi), PARAMETER :: N7RAZl = 234 + INTEGER(IntKi), PARAMETER :: N8RAXl = 235 + INTEGER(IntKi), PARAMETER :: N8RAYl = 236 + INTEGER(IntKi), PARAMETER :: N8RAZl = 237 + INTEGER(IntKi), PARAMETER :: N9RAXl = 238 + INTEGER(IntKi), PARAMETER :: N9RAYl = 239 + INTEGER(IntKi), PARAMETER :: N9RAZl = 240 ! Applied Loads: - INTEGER(IntKi), PARAMETER :: N1PFxl = 241 - INTEGER(IntKi), PARAMETER :: N1PFyl = 242 - INTEGER(IntKi), PARAMETER :: N1PFzl = 243 - INTEGER(IntKi), PARAMETER :: N2PFxl = 244 - INTEGER(IntKi), PARAMETER :: N2PFyl = 245 - INTEGER(IntKi), PARAMETER :: N2PFzl = 246 - INTEGER(IntKi), PARAMETER :: N3PFxl = 247 - INTEGER(IntKi), PARAMETER :: N3PFyl = 248 - INTEGER(IntKi), PARAMETER :: N3PFzl = 249 - INTEGER(IntKi), PARAMETER :: N4PFxl = 250 - INTEGER(IntKi), PARAMETER :: N4PFyl = 251 - INTEGER(IntKi), PARAMETER :: N4PFzl = 252 - INTEGER(IntKi), PARAMETER :: N5PFxl = 253 - INTEGER(IntKi), PARAMETER :: N5PFyl = 254 - INTEGER(IntKi), PARAMETER :: N5PFzl = 255 - INTEGER(IntKi), PARAMETER :: N6PFxl = 256 - INTEGER(IntKi), PARAMETER :: N6PFyl = 257 - INTEGER(IntKi), PARAMETER :: N6PFzl = 258 - INTEGER(IntKi), PARAMETER :: N7PFxl = 259 - INTEGER(IntKi), PARAMETER :: N7PFyl = 260 - INTEGER(IntKi), PARAMETER :: N7PFzl = 261 - INTEGER(IntKi), PARAMETER :: N8PFxl = 262 - INTEGER(IntKi), PARAMETER :: N8PFyl = 263 - INTEGER(IntKi), PARAMETER :: N8PFzl = 264 - INTEGER(IntKi), PARAMETER :: N9PFxl = 265 - INTEGER(IntKi), PARAMETER :: N9PFyl = 266 - INTEGER(IntKi), PARAMETER :: N9PFzl = 267 - INTEGER(IntKi), PARAMETER :: N1PMxl = 268 - INTEGER(IntKi), PARAMETER :: N1PMyl = 269 - INTEGER(IntKi), PARAMETER :: N1PMzl = 270 - INTEGER(IntKi), PARAMETER :: N2PMxl = 271 - INTEGER(IntKi), PARAMETER :: N2PMyl = 272 - INTEGER(IntKi), PARAMETER :: N2PMzl = 273 - INTEGER(IntKi), PARAMETER :: N3PMxl = 274 - INTEGER(IntKi), PARAMETER :: N3PMyl = 275 - INTEGER(IntKi), PARAMETER :: N3PMzl = 276 - INTEGER(IntKi), PARAMETER :: N4PMxl = 277 - INTEGER(IntKi), PARAMETER :: N4PMyl = 278 - INTEGER(IntKi), PARAMETER :: N4PMzl = 279 - INTEGER(IntKi), PARAMETER :: N5PMxl = 280 - INTEGER(IntKi), PARAMETER :: N5PMyl = 281 - INTEGER(IntKi), PARAMETER :: N5PMzl = 282 - INTEGER(IntKi), PARAMETER :: N6PMxl = 283 - INTEGER(IntKi), PARAMETER :: N6PMyl = 284 - INTEGER(IntKi), PARAMETER :: N6PMzl = 285 - INTEGER(IntKi), PARAMETER :: N7PMxl = 286 - INTEGER(IntKi), PARAMETER :: N7PMyl = 287 - INTEGER(IntKi), PARAMETER :: N7PMzl = 288 - INTEGER(IntKi), PARAMETER :: N8PMxl = 289 - INTEGER(IntKi), PARAMETER :: N8PMyl = 290 - INTEGER(IntKi), PARAMETER :: N8PMzl = 291 - INTEGER(IntKi), PARAMETER :: N9PMxl = 292 - INTEGER(IntKi), PARAMETER :: N9PMyl = 293 - INTEGER(IntKi), PARAMETER :: N9PMzl = 294 - INTEGER(IntKi), PARAMETER :: N1DFxl = 295 - INTEGER(IntKi), PARAMETER :: N1DFyl = 296 - INTEGER(IntKi), PARAMETER :: N1DFzl = 297 - INTEGER(IntKi), PARAMETER :: N2DFxl = 298 - INTEGER(IntKi), PARAMETER :: N2DFyl = 299 - INTEGER(IntKi), PARAMETER :: N2DFzl = 300 - INTEGER(IntKi), PARAMETER :: N3DFxl = 301 - INTEGER(IntKi), PARAMETER :: N3DFyl = 302 - INTEGER(IntKi), PARAMETER :: N3DFzl = 303 - INTEGER(IntKi), PARAMETER :: N4DFxl = 304 - INTEGER(IntKi), PARAMETER :: N4DFyl = 305 - INTEGER(IntKi), PARAMETER :: N4DFzl = 306 - INTEGER(IntKi), PARAMETER :: N5DFxl = 307 - INTEGER(IntKi), PARAMETER :: N5DFyl = 308 - INTEGER(IntKi), PARAMETER :: N5DFzl = 309 - INTEGER(IntKi), PARAMETER :: N6DFxl = 310 - INTEGER(IntKi), PARAMETER :: N6DFyl = 311 - INTEGER(IntKi), PARAMETER :: N6DFzl = 312 - INTEGER(IntKi), PARAMETER :: N7DFxl = 313 - INTEGER(IntKi), PARAMETER :: N7DFyl = 314 - INTEGER(IntKi), PARAMETER :: N7DFzl = 315 - INTEGER(IntKi), PARAMETER :: N8DFxl = 316 - INTEGER(IntKi), PARAMETER :: N8DFyl = 317 - INTEGER(IntKi), PARAMETER :: N8DFzl = 318 - INTEGER(IntKi), PARAMETER :: N9DFxl = 319 - INTEGER(IntKi), PARAMETER :: N9DFyl = 320 - INTEGER(IntKi), PARAMETER :: N9DFzl = 321 - INTEGER(IntKi), PARAMETER :: N1DMxl = 322 - INTEGER(IntKi), PARAMETER :: N1DMyl = 323 - INTEGER(IntKi), PARAMETER :: N1DMzl = 324 - INTEGER(IntKi), PARAMETER :: N2DMxl = 325 - INTEGER(IntKi), PARAMETER :: N2DMyl = 326 - INTEGER(IntKi), PARAMETER :: N2DMzl = 327 - INTEGER(IntKi), PARAMETER :: N3DMxl = 328 - INTEGER(IntKi), PARAMETER :: N3DMyl = 329 - INTEGER(IntKi), PARAMETER :: N3DMzl = 330 - INTEGER(IntKi), PARAMETER :: N4DMxl = 331 - INTEGER(IntKi), PARAMETER :: N4DMyl = 332 - INTEGER(IntKi), PARAMETER :: N4DMzl = 333 - INTEGER(IntKi), PARAMETER :: N5DMxl = 334 - INTEGER(IntKi), PARAMETER :: N5DMyl = 335 - INTEGER(IntKi), PARAMETER :: N5DMzl = 336 - INTEGER(IntKi), PARAMETER :: N6DMxl = 337 - INTEGER(IntKi), PARAMETER :: N6DMyl = 338 - INTEGER(IntKi), PARAMETER :: N6DMzl = 339 - INTEGER(IntKi), PARAMETER :: N7DMxl = 340 - INTEGER(IntKi), PARAMETER :: N7DMyl = 341 - INTEGER(IntKi), PARAMETER :: N7DMzl = 342 - INTEGER(IntKi), PARAMETER :: N8DMxl = 343 - INTEGER(IntKi), PARAMETER :: N8DMyl = 344 - INTEGER(IntKi), PARAMETER :: N8DMzl = 345 - INTEGER(IntKi), PARAMETER :: N9DMxl = 346 - INTEGER(IntKi), PARAMETER :: N9DMyl = 347 - INTEGER(IntKi), PARAMETER :: N9DMzl = 348 + INTEGER(IntKi), PARAMETER :: N1PFxl = 241 + INTEGER(IntKi), PARAMETER :: N1PFyl = 242 + INTEGER(IntKi), PARAMETER :: N1PFzl = 243 + INTEGER(IntKi), PARAMETER :: N2PFxl = 244 + INTEGER(IntKi), PARAMETER :: N2PFyl = 245 + INTEGER(IntKi), PARAMETER :: N2PFzl = 246 + INTEGER(IntKi), PARAMETER :: N3PFxl = 247 + INTEGER(IntKi), PARAMETER :: N3PFyl = 248 + INTEGER(IntKi), PARAMETER :: N3PFzl = 249 + INTEGER(IntKi), PARAMETER :: N4PFxl = 250 + INTEGER(IntKi), PARAMETER :: N4PFyl = 251 + INTEGER(IntKi), PARAMETER :: N4PFzl = 252 + INTEGER(IntKi), PARAMETER :: N5PFxl = 253 + INTEGER(IntKi), PARAMETER :: N5PFyl = 254 + INTEGER(IntKi), PARAMETER :: N5PFzl = 255 + INTEGER(IntKi), PARAMETER :: N6PFxl = 256 + INTEGER(IntKi), PARAMETER :: N6PFyl = 257 + INTEGER(IntKi), PARAMETER :: N6PFzl = 258 + INTEGER(IntKi), PARAMETER :: N7PFxl = 259 + INTEGER(IntKi), PARAMETER :: N7PFyl = 260 + INTEGER(IntKi), PARAMETER :: N7PFzl = 261 + INTEGER(IntKi), PARAMETER :: N8PFxl = 262 + INTEGER(IntKi), PARAMETER :: N8PFyl = 263 + INTEGER(IntKi), PARAMETER :: N8PFzl = 264 + INTEGER(IntKi), PARAMETER :: N9PFxl = 265 + INTEGER(IntKi), PARAMETER :: N9PFyl = 266 + INTEGER(IntKi), PARAMETER :: N9PFzl = 267 + INTEGER(IntKi), PARAMETER :: N1PMxl = 268 + INTEGER(IntKi), PARAMETER :: N1PMyl = 269 + INTEGER(IntKi), PARAMETER :: N1PMzl = 270 + INTEGER(IntKi), PARAMETER :: N2PMxl = 271 + INTEGER(IntKi), PARAMETER :: N2PMyl = 272 + INTEGER(IntKi), PARAMETER :: N2PMzl = 273 + INTEGER(IntKi), PARAMETER :: N3PMxl = 274 + INTEGER(IntKi), PARAMETER :: N3PMyl = 275 + INTEGER(IntKi), PARAMETER :: N3PMzl = 276 + INTEGER(IntKi), PARAMETER :: N4PMxl = 277 + INTEGER(IntKi), PARAMETER :: N4PMyl = 278 + INTEGER(IntKi), PARAMETER :: N4PMzl = 279 + INTEGER(IntKi), PARAMETER :: N5PMxl = 280 + INTEGER(IntKi), PARAMETER :: N5PMyl = 281 + INTEGER(IntKi), PARAMETER :: N5PMzl = 282 + INTEGER(IntKi), PARAMETER :: N6PMxl = 283 + INTEGER(IntKi), PARAMETER :: N6PMyl = 284 + INTEGER(IntKi), PARAMETER :: N6PMzl = 285 + INTEGER(IntKi), PARAMETER :: N7PMxl = 286 + INTEGER(IntKi), PARAMETER :: N7PMyl = 287 + INTEGER(IntKi), PARAMETER :: N7PMzl = 288 + INTEGER(IntKi), PARAMETER :: N8PMxl = 289 + INTEGER(IntKi), PARAMETER :: N8PMyl = 290 + INTEGER(IntKi), PARAMETER :: N8PMzl = 291 + INTEGER(IntKi), PARAMETER :: N9PMxl = 292 + INTEGER(IntKi), PARAMETER :: N9PMyl = 293 + INTEGER(IntKi), PARAMETER :: N9PMzl = 294 + INTEGER(IntKi), PARAMETER :: N1DFxl = 295 + INTEGER(IntKi), PARAMETER :: N1DFyl = 296 + INTEGER(IntKi), PARAMETER :: N1DFzl = 297 + INTEGER(IntKi), PARAMETER :: N2DFxl = 298 + INTEGER(IntKi), PARAMETER :: N2DFyl = 299 + INTEGER(IntKi), PARAMETER :: N2DFzl = 300 + INTEGER(IntKi), PARAMETER :: N3DFxl = 301 + INTEGER(IntKi), PARAMETER :: N3DFyl = 302 + INTEGER(IntKi), PARAMETER :: N3DFzl = 303 + INTEGER(IntKi), PARAMETER :: N4DFxl = 304 + INTEGER(IntKi), PARAMETER :: N4DFyl = 305 + INTEGER(IntKi), PARAMETER :: N4DFzl = 306 + INTEGER(IntKi), PARAMETER :: N5DFxl = 307 + INTEGER(IntKi), PARAMETER :: N5DFyl = 308 + INTEGER(IntKi), PARAMETER :: N5DFzl = 309 + INTEGER(IntKi), PARAMETER :: N6DFxl = 310 + INTEGER(IntKi), PARAMETER :: N6DFyl = 311 + INTEGER(IntKi), PARAMETER :: N6DFzl = 312 + INTEGER(IntKi), PARAMETER :: N7DFxl = 313 + INTEGER(IntKi), PARAMETER :: N7DFyl = 314 + INTEGER(IntKi), PARAMETER :: N7DFzl = 315 + INTEGER(IntKi), PARAMETER :: N8DFxl = 316 + INTEGER(IntKi), PARAMETER :: N8DFyl = 317 + INTEGER(IntKi), PARAMETER :: N8DFzl = 318 + INTEGER(IntKi), PARAMETER :: N9DFxl = 319 + INTEGER(IntKi), PARAMETER :: N9DFyl = 320 + INTEGER(IntKi), PARAMETER :: N9DFzl = 321 + INTEGER(IntKi), PARAMETER :: N1DMxl = 322 + INTEGER(IntKi), PARAMETER :: N1DMyl = 323 + INTEGER(IntKi), PARAMETER :: N1DMzl = 324 + INTEGER(IntKi), PARAMETER :: N2DMxl = 325 + INTEGER(IntKi), PARAMETER :: N2DMyl = 326 + INTEGER(IntKi), PARAMETER :: N2DMzl = 327 + INTEGER(IntKi), PARAMETER :: N3DMxl = 328 + INTEGER(IntKi), PARAMETER :: N3DMyl = 329 + INTEGER(IntKi), PARAMETER :: N3DMzl = 330 + INTEGER(IntKi), PARAMETER :: N4DMxl = 331 + INTEGER(IntKi), PARAMETER :: N4DMyl = 332 + INTEGER(IntKi), PARAMETER :: N4DMzl = 333 + INTEGER(IntKi), PARAMETER :: N5DMxl = 334 + INTEGER(IntKi), PARAMETER :: N5DMyl = 335 + INTEGER(IntKi), PARAMETER :: N5DMzl = 336 + INTEGER(IntKi), PARAMETER :: N6DMxl = 337 + INTEGER(IntKi), PARAMETER :: N6DMyl = 338 + INTEGER(IntKi), PARAMETER :: N6DMzl = 339 + INTEGER(IntKi), PARAMETER :: N7DMxl = 340 + INTEGER(IntKi), PARAMETER :: N7DMyl = 341 + INTEGER(IntKi), PARAMETER :: N7DMzl = 342 + INTEGER(IntKi), PARAMETER :: N8DMxl = 343 + INTEGER(IntKi), PARAMETER :: N8DMyl = 344 + INTEGER(IntKi), PARAMETER :: N8DMzl = 345 + INTEGER(IntKi), PARAMETER :: N9DMxl = 346 + INTEGER(IntKi), PARAMETER :: N9DMyl = 347 + INTEGER(IntKi), PARAMETER :: N9DMzl = 348 + + + ! Applied loads mapped to root (includes distributed and point): + + INTEGER(IntKi), PARAMETER :: RootAppliedFxr = 349 + INTEGER(IntKi), PARAMETER :: RootAppliedFyr = 350 + INTEGER(IntKi), PARAMETER :: RootAppliedFzr = 351 + INTEGER(IntKi), PARAMETER :: RootAppliedMxr = 352 + INTEGER(IntKi), PARAMETER :: RootAppliedMyr = 353 + INTEGER(IntKi), PARAMETER :: RootAppliedMzr = 354 + INTEGER(IntKi), PARAMETER :: RootAppliedFxg = 355 + INTEGER(IntKi), PARAMETER :: RootAppliedFyg = 356 + INTEGER(IntKi), PARAMETER :: RootAppliedFzg = 357 + INTEGER(IntKi), PARAMETER :: RootAppliedMxg = 358 + INTEGER(IntKi), PARAMETER :: RootAppliedMyg = 359 + INTEGER(IntKi), PARAMETER :: RootAppliedMzg = 360 ! Pitch Actuator: - INTEGER(IntKi), PARAMETER :: PAngInp = 349 - INTEGER(IntKi), PARAMETER :: PAngAct = 350 - INTEGER(IntKi), PARAMETER :: PRatAct = 351 - INTEGER(IntKi), PARAMETER :: PAccAct = 352 + INTEGER(IntKi), PARAMETER :: PAngInp = 361 + INTEGER(IntKi), PARAMETER :: PAngAct = 362 + INTEGER(IntKi), PARAMETER :: PRatAct = 363 + INTEGER(IntKi), PARAMETER :: PAccAct = 364 ! The maximum number of output channels which can be output by the code. - INTEGER(IntKi), PARAMETER :: MaxOutPts = 352 + INTEGER(IntKi), PARAMETER :: MaxOutPts = 364 !End of code generated by Matlab script ! =================================================================================================== @@ -1159,15 +1175,16 @@ END SUBROUTINE BD_ReadBladeFile !---------------------------------------------------------------------------------------------------------------------------------- !********************************************************************************************************************************** ! 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 29-Sep-2015 10:23:41. +! 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 routine checks to see if any requested output channel names (stored in the OutList(:)) are invalid. It returns a +!> This routine checks to see if any requested output channel names (stored in the OutList(:)) are invalid. It returns a !! warning if any of the channels are not available outputs from the module. !! It assigns the settings for OutParam(:) (i.e, the index, name, and units of the output channels, WriteOutput(:)). !! the sign is set to 0 if the channel is invalid. !! It sets assumes the value p%NumOuts has been set before this routine has been called, and it sets the values of p%OutParam here. +!! +!! This routine was generated by Write_ChckOutLst.m using the parameters listed in OutListParameters.xlsx at 08-May-2025 15:51:30. SUBROUTINE SetOutParam(OutList, p, ErrStat, ErrMsg ) IMPLICIT NONE @@ -1191,162 +1208,232 @@ SUBROUTINE SetOutParam(OutList, p, ErrStat, ErrMsg ) CHARACTER(ChanLen) :: OutListTmp ! A string to temporarily hold OutList(I) CHARACTER(*), PARAMETER :: RoutineName = "SetOutParam" - CHARACTER(OutStrLenM1), PARAMETER :: ValidParamAry(352) = (/ & ! This lists the names of the allowed parameters, which must be sorted alphabetically - "N1DFXL ","N1DFYL ","N1DFZL ","N1DMXL ","N1DMYL ","N1DMZL ","N1FXL ", & - "N1FYL ","N1FZL ","N1MXL ","N1MYL ","N1MZL ","N1PFXL ","N1PFYL ", & - "N1PFZL ","N1PMXL ","N1PMYL ","N1PMZL ","N1RAXL ","N1RAYL ","N1RAZL ", & - "N1RDXR ","N1RDYR ","N1RDZR ","N1RVXG ","N1RVYG ","N1RVZG ","N1TAXL ", & - "N1TAYL ","N1TAZL ","N1TDXR ","N1TDYR ","N1TDZR ","N1TVXG ","N1TVYG ", & - "N1TVZG ","N2DFXL ","N2DFYL ","N2DFZL ","N2DMXL ","N2DMYL ","N2DMZL ", & - "N2FXL ","N2FYL ","N2FZL ","N2MXL ","N2MYL ","N2MZL ","N2PFXL ", & - "N2PFYL ","N2PFZL ","N2PMXL ","N2PMYL ","N2PMZL ","N2RAXL ","N2RAYL ", & - "N2RAZL ","N2RDXR ","N2RDYR ","N2RDZR ","N2RVXG ","N2RVYG ","N2RVZG ", & - "N2TAXL ","N2TAYL ","N2TAZL ","N2TDXR ","N2TDYR ","N2TDZR ","N2TVXG ", & - "N2TVYG ","N2TVZG ","N3DFXL ","N3DFYL ","N3DFZL ","N3DMXL ","N3DMYL ", & - "N3DMZL ","N3FXL ","N3FYL ","N3FZL ","N3MXL ","N3MYL ","N3MZL ", & - "N3PFXL ","N3PFYL ","N3PFZL ","N3PMXL ","N3PMYL ","N3PMZL ","N3RAXL ", & - "N3RAYL ","N3RAZL ","N3RDXR ","N3RDYR ","N3RDZR ","N3RVXG ","N3RVYG ", & - "N3RVZG ","N3TAXL ","N3TAYL ","N3TAZL ","N3TDXR ","N3TDYR ","N3TDZR ", & - "N3TVXG ","N3TVYG ","N3TVZG ","N4DFXL ","N4DFYL ","N4DFZL ","N4DMXL ", & - "N4DMYL ","N4DMZL ","N4FXL ","N4FYL ","N4FZL ","N4MXL ","N4MYL ", & - "N4MZL ","N4PFXL ","N4PFYL ","N4PFZL ","N4PMXL ","N4PMYL ","N4PMZL ", & - "N4RAXL ","N4RAYL ","N4RAZL ","N4RDXR ","N4RDYR ","N4RDZR ","N4RVXG ", & - "N4RVYG ","N4RVZG ","N4TAXL ","N4TAYL ","N4TAZL ","N4TDXR ","N4TDYR ", & - "N4TDZR ","N4TVXG ","N4TVYG ","N4TVZG ","N5DFXL ","N5DFYL ","N5DFZL ", & - "N5DMXL ","N5DMYL ","N5DMZL ","N5FXL ","N5FYL ","N5FZL ","N5MXL ", & - "N5MYL ","N5MZL ","N5PFXL ","N5PFYL ","N5PFZL ","N5PMXL ","N5PMYL ", & - "N5PMZL ","N5RAXL ","N5RAYL ","N5RAZL ","N5RDXR ","N5RDYR ","N5RDZR ", & - "N5RVXG ","N5RVYG ","N5RVZG ","N5TAXL ","N5TAYL ","N5TAZL ","N5TDXR ", & - "N5TDYR ","N5TDZR ","N5TVXG ","N5TVYG ","N5TVZG ","N6DFXL ","N6DFYL ", & - "N6DFZL ","N6DMXL ","N6DMYL ","N6DMZL ","N6FXL ","N6FYL ","N6FZL ", & - "N6MXL ","N6MYL ","N6MZL ","N6PFXL ","N6PFYL ","N6PFZL ","N6PMXL ", & - "N6PMYL ","N6PMZL ","N6RAXL ","N6RAYL ","N6RAZL ","N6RDXR ","N6RDYR ", & - "N6RDZR ","N6RVXG ","N6RVYG ","N6RVZG ","N6TAXL ","N6TAYL ","N6TAZL ", & - "N6TDXR ","N6TDYR ","N6TDZR ","N6TVXG ","N6TVYG ","N6TVZG ","N7DFXL ", & - "N7DFYL ","N7DFZL ","N7DMXL ","N7DMYL ","N7DMZL ","N7FXL ","N7FYL ", & - "N7FZL ","N7MXL ","N7MYL ","N7MZL ","N7PFXL ","N7PFYL ","N7PFZL ", & - "N7PMXL ","N7PMYL ","N7PMZL ","N7RAXL ","N7RAYL ","N7RAZL ","N7RDXR ", & - "N7RDYR ","N7RDZR ","N7RVXG ","N7RVYG ","N7RVZG ","N7TAXL ","N7TAYL ", & - "N7TAZL ","N7TDXR ","N7TDYR ","N7TDZR ","N7TVXG ","N7TVYG ","N7TVZG ", & - "N8DFXL ","N8DFYL ","N8DFZL ","N8DMXL ","N8DMYL ","N8DMZL ","N8FXL ", & - "N8FYL ","N8FZL ","N8MXL ","N8MYL ","N8MZL ","N8PFXL ","N8PFYL ", & - "N8PFZL ","N8PMXL ","N8PMYL ","N8PMZL ","N8RAXL ","N8RAYL ","N8RAZL ", & - "N8RDXR ","N8RDYR ","N8RDZR ","N8RVXG ","N8RVYG ","N8RVZG ","N8TAXL ", & - "N8TAYL ","N8TAZL ","N8TDXR ","N8TDYR ","N8TDZR ","N8TVXG ","N8TVYG ", & - "N8TVZG ","N9DFXL ","N9DFYL ","N9DFZL ","N9DMXL ","N9DMYL ","N9DMZL ", & - "N9FXL ","N9FYL ","N9FZL ","N9MXL ","N9MYL ","N9MZL ","N9PFXL ", & - "N9PFYL ","N9PFZL ","N9PMXL ","N9PMYL ","N9PMZL ","N9RAXL ","N9RAYL ", & - "N9RAZL ","N9RDXR ","N9RDYR ","N9RDZR ","N9RVXG ","N9RVYG ","N9RVZG ", & - "N9TAXL ","N9TAYL ","N9TAZL ","N9TDXR ","N9TDYR ","N9TDZR ","N9TVXG ", & - "N9TVYG ","N9TVZG ","PACCACT ","PANGACT ","PANGINP ","PRATACT ","ROOTFXR ", & - "ROOTFYR ","ROOTFZR ","ROOTMXR ","ROOTMYR ","ROOTMZR ","TIPRAXL ","TIPRAYL ", & - "TIPRAZL ","TIPRDXR ","TIPRDYR ","TIPRDZR ","TIPRVXG ","TIPRVYG ","TIPRVZG ", & - "TIPTAXL ","TIPTAYL ","TIPTAZL ","TIPTDXR ","TIPTDYR ","TIPTDZR ","TIPTVXG ", & - "TIPTVYG ","TIPTVZG "/) - INTEGER(IntKi), PARAMETER :: ParamIndxAry(352) = (/ & ! This lists the index into AllOuts(:) of the allowed parameters ValidParamAry(:) - N1DFxl , N1DFyl , N1DFzl , N1DMxl , N1DMyl , N1DMzl , N1Fxl , & - N1Fyl , N1Fzl , N1Mxl , N1Myl , N1Mzl , N1PFxl , N1PFyl , & - N1PFzl , N1PMxl , N1PMyl , N1PMzl , N1RAXl , N1RAYl , N1RAZl , & - N1RDxr , N1RDyr , N1RDzr , N1RVXg , N1RVYg , N1RVZg , N1TAXl , & - N1TAYl , N1TAZl , N1TDxr , N1TDyr , N1TDzr , N1TVXg , N1TVYg , & - N1TVZg , N2DFxl , N2DFyl , N2DFzl , N2DMxl , N2DMyl , N2DMzl , & - N2Fxl , N2Fyl , N2Fzl , N2Mxl , N2Myl , N2Mzl , N2PFxl , & - N2PFyl , N2PFzl , N2PMxl , N2PMyl , N2PMzl , N2RAXl , N2RAYl , & - N2RAZl , N2RDxr , N2RDyr , N2RDzr , N2RVXg , N2RVYg , N2RVZg , & - N2TAXl , N2TAYl , N2TAZl , N2TDxr , N2TDyr , N2TDzr , N2TVXg , & - N2TVYg , N2TVZg , N3DFxl , N3DFyl , N3DFzl , N3DMxl , N3DMyl , & - N3DMzl , N3Fxl , N3Fyl , N3Fzl , N3Mxl , N3Myl , N3Mzl , & - N3PFxl , N3PFyl , N3PFzl , N3PMxl , N3PMyl , N3PMzl , N3RAXl , & - N3RAYl , N3RAZl , N3RDxr , N3RDyr , N3RDzr , N3RVXg , N3RVYg , & - N3RVZg , N3TAXl , N3TAYl , N3TAZl , N3TDxr , N3TDyr , N3TDzr , & - N3TVXg , N3TVYg , N3TVZg , N4DFxl , N4DFyl , N4DFzl , N4DMxl , & - N4DMyl , N4DMzl , N4Fxl , N4Fyl , N4Fzl , N4Mxl , N4Myl , & - N4Mzl , N4PFxl , N4PFyl , N4PFzl , N4PMxl , N4PMyl , N4PMzl , & - N4RAXl , N4RAYl , N4RAZl , N4RDxr , N4RDyr , N4RDzr , N4RVXg , & - N4RVYg , N4RVZg , N4TAXl , N4TAYl , N4TAZl , N4TDxr , N4TDyr , & - N4TDzr , N4TVXg , N4TVYg , N4TVZg , N5DFxl , N5DFyl , N5DFzl , & - N5DMxl , N5DMyl , N5DMzl , N5Fxl , N5Fyl , N5Fzl , N5Mxl , & - N5Myl , N5Mzl , N5PFxl , N5PFyl , N5PFzl , N5PMxl , N5PMyl , & - N5PMzl , N5RAXl , N5RAYl , N5RAZl , N5RDxr , N5RDyr , N5RDzr , & - N5RVXg , N5RVYg , N5RVZg , N5TAXl , N5TAYl , N5TAZl , N5TDxr , & - N5TDyr , N5TDzr , N5TVXg , N5TVYg , N5TVZg , N6DFxl , N6DFyl , & - N6DFzl , N6DMxl , N6DMyl , N6DMzl , N6Fxl , N6Fyl , N6Fzl , & - N6Mxl , N6Myl , N6Mzl , N6PFxl , N6PFyl , N6PFzl , N6PMxl , & - N6PMyl , N6PMzl , N6RAXl , N6RAYl , N6RAZl , N6RDxr , N6RDyr , & - N6RDzr , N6RVXg , N6RVYg , N6RVZg , N6TAXl , N6TAYl , N6TAZl , & - N6TDxr , N6TDyr , N6TDzr , N6TVXg , N6TVYg , N6TVZg , N7DFxl , & - N7DFyl , N7DFzl , N7DMxl , N7DMyl , N7DMzl , N7Fxl , N7Fyl , & - N7Fzl , N7Mxl , N7Myl , N7Mzl , N7PFxl , N7PFyl , N7PFzl , & - N7PMxl , N7PMyl , N7PMzl , N7RAXl , N7RAYl , N7RAZl , N7RDxr , & - N7RDyr , N7RDzr , N7RVXg , N7RVYg , N7RVZg , N7TAXl , N7TAYl , & - N7TAZl , N7TDxr , N7TDyr , N7TDzr , N7TVXg , N7TVYg , N7TVZg , & - N8DFxl , N8DFyl , N8DFzl , N8DMxl , N8DMyl , N8DMzl , N8Fxl , & - N8Fyl , N8Fzl , N8Mxl , N8Myl , N8Mzl , N8PFxl , N8PFyl , & - N8PFzl , N8PMxl , N8PMyl , N8PMzl , N8RAXl , N8RAYl , N8RAZl , & - N8RDxr , N8RDyr , N8RDzr , N8RVXg , N8RVYg , N8RVZg , N8TAXl , & - N8TAYl , N8TAZl , N8TDxr , N8TDyr , N8TDzr , N8TVXg , N8TVYg , & - N8TVZg , N9DFxl , N9DFyl , N9DFzl , N9DMxl , N9DMyl , N9DMzl , & - N9Fxl , N9Fyl , N9Fzl , N9Mxl , N9Myl , N9Mzl , N9PFxl , & - N9PFyl , N9PFzl , N9PMxl , N9PMyl , N9PMzl , N9RAXl , N9RAYl , & - N9RAZl , N9RDxr , N9RDyr , N9RDzr , N9RVXg , N9RVYg , N9RVZg , & - N9TAXl , N9TAYl , N9TAZl , N9TDxr , N9TDyr , N9TDzr , N9TVXg , & - N9TVYg , N9TVZg , PAccAct , PAngAct , PAngInp , PRatAct , RootFxr , & - RootFyr , RootFzr , RootMxr , RootMyr , RootMzr , TipRAXl , TipRAYl , & - TipRAZl , TipRDxr , TipRDyr , TipRDzr , TipRVXg , TipRVYg , TipRVZg , & - TipTAXl , TipTAYl , TipTAZl , TipTDxr , TipTDyr , TipTDzr , TipTVXg , & - TipTVYg , TipTVZg /) - CHARACTER(ChanLen), PARAMETER :: ParamUnitsAry(352) = (/ & ! This lists the units corresponding to the allowed parameters - "(N/m) ","(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N) ", & - "(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ","(N) ","(N) ", & - "(N) ","(N-m) ","(N-m) ","(N-m) ","(deg/s^2) ","(deg/s^2) ","(deg/s^2) ", & - "(-) ","(-) ","(-) ","(deg/s) ","(deg/s) ","(deg/s) ","(m/s^2) ", & - "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(m/s) ","(m/s) ", & - "(m/s) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N) ","(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ","(N) ", & - "(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ","(deg/s^2) ","(deg/s^2) ", & - "(deg/s^2) ","(-) ","(-) ","(-) ","(deg/s) ","(deg/s) ","(deg/s) ", & - "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(m/s) ", & - "(m/s) ","(m/s) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ", & - "(N-m/m) ","(N) ","(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ", & - "(N) ","(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ","(deg/s^2) ", & - "(deg/s^2) ","(deg/s^2) ","(-) ","(-) ","(-) ","(deg/s) ","(deg/s) ", & - "(deg/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & - "(m/s) ","(m/s) ","(m/s) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m) ", & - "(N-m/m) ","(N-m/m) ","(N) ","(N) ","(N) ","(N-m) ","(N-m) ", & - "(N-m) ","(N) ","(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ", & - "(deg/s^2) ","(deg/s^2) ","(deg/s^2) ","(-) ","(-) ","(-) ","(deg/s) ", & - "(deg/s) ","(deg/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & - "(m) ","(m/s) ","(m/s) ","(m/s) ","(N/m) ","(N/m) ","(N/m) ", & - "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N) ","(N) ","(N) ","(N-m) ", & - "(N-m) ","(N-m) ","(N) ","(N) ","(N) ","(N-m) ","(N-m) ", & - "(N-m) ","(deg/s^2) ","(deg/s^2) ","(deg/s^2) ","(-) ","(-) ","(-) ", & - "(deg/s) ","(deg/s) ","(deg/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & - "(m) ","(m) ","(m/s) ","(m/s) ","(m/s) ","(N/m) ","(N/m) ", & - "(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N) ","(N) ","(N) ", & - "(N-m) ","(N-m) ","(N-m) ","(N) ","(N) ","(N) ","(N-m) ", & - "(N-m) ","(N-m) ","(deg/s^2) ","(deg/s^2) ","(deg/s^2) ","(-) ","(-) ", & - "(-) ","(deg/s) ","(deg/s) ","(deg/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & - "(m) ","(m) ","(m) ","(m/s) ","(m/s) ","(m/s) ","(N/m) ", & - "(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N) ","(N) ", & - "(N) ","(N-m) ","(N-m) ","(N-m) ","(N) ","(N) ","(N) ", & - "(N-m) ","(N-m) ","(N-m) ","(deg/s^2) ","(deg/s^2) ","(deg/s^2) ","(-) ", & - "(-) ","(-) ","(deg/s) ","(deg/s) ","(deg/s) ","(m/s^2) ","(m/s^2) ", & - "(m/s^2) ","(m) ","(m) ","(m) ","(m/s) ","(m/s) ","(m/s) ", & - "(N/m) ","(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N) ", & - "(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ","(N) ","(N) ", & - "(N) ","(N-m) ","(N-m) ","(N-m) ","(deg/s^2) ","(deg/s^2) ","(deg/s^2) ", & - "(-) ","(-) ","(-) ","(deg/s) ","(deg/s) ","(deg/s) ","(m/s^2) ", & - "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(m/s) ","(m/s) ", & - "(m/s) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & - "(N) ","(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ","(N) ", & - "(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ","(deg/s^2) ","(deg/s^2) ", & - "(deg/s^2) ","(-) ","(-) ","(-) ","(deg/s) ","(deg/s) ","(deg/s) ", & - "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(m/s) ", & - "(m/s) ","(m/s) ","(deg/s^2) ","(deg) ","(deg) ","(deg/s) ","(N) ", & - "(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ","(deg/s^2) ","(deg/s^2) ", & - "(deg/s^2) ","(-) ","(-) ","(-) ","(deg/s) ","(deg/s) ","(deg/s) ", & - "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ","(m/s) ", & - "(m/s) ","(m/s) "/) + CHARACTER(OutStrLenM1), PARAMETER :: ValidParamAry(364) = (/ & ! This lists the names of the allowed parameters, which must be sorted alphabetically + "N1DFXL ","N1DFYL ","N1DFZL ","N1DMXL ","N1DMYL ", & + "N1DMZL ","N1FXL ","N1FYL ","N1FZL ","N1MXL ", & + "N1MYL ","N1MZL ","N1PFXL ","N1PFYL ","N1PFZL ", & + "N1PMXL ","N1PMYL ","N1PMZL ","N1RAXL ","N1RAYL ", & + "N1RAZL ","N1RDXR ","N1RDYR ","N1RDZR ","N1RVXG ", & + "N1RVYG ","N1RVZG ","N1TAXL ","N1TAYL ","N1TAZL ", & + "N1TDXR ","N1TDYR ","N1TDZR ","N1TVXG ","N1TVYG ", & + "N1TVZG ","N2DFXL ","N2DFYL ","N2DFZL ","N2DMXL ", & + "N2DMYL ","N2DMZL ","N2FXL ","N2FYL ","N2FZL ", & + "N2MXL ","N2MYL ","N2MZL ","N2PFXL ","N2PFYL ", & + "N2PFZL ","N2PMXL ","N2PMYL ","N2PMZL ","N2RAXL ", & + "N2RAYL ","N2RAZL ","N2RDXR ","N2RDYR ","N2RDZR ", & + "N2RVXG ","N2RVYG ","N2RVZG ","N2TAXL ","N2TAYL ", & + "N2TAZL ","N2TDXR ","N2TDYR ","N2TDZR ","N2TVXG ", & + "N2TVYG ","N2TVZG ","N3DFXL ","N3DFYL ","N3DFZL ", & + "N3DMXL ","N3DMYL ","N3DMZL ","N3FXL ","N3FYL ", & + "N3FZL ","N3MXL ","N3MYL ","N3MZL ","N3PFXL ", & + "N3PFYL ","N3PFZL ","N3PMXL ","N3PMYL ","N3PMZL ", & + "N3RAXL ","N3RAYL ","N3RAZL ","N3RDXR ","N3RDYR ", & + "N3RDZR ","N3RVXG ","N3RVYG ","N3RVZG ","N3TAXL ", & + "N3TAYL ","N3TAZL ","N3TDXR ","N3TDYR ","N3TDZR ", & + "N3TVXG ","N3TVYG ","N3TVZG ","N4DFXL ","N4DFYL ", & + "N4DFZL ","N4DMXL ","N4DMYL ","N4DMZL ","N4FXL ", & + "N4FYL ","N4FZL ","N4MXL ","N4MYL ","N4MZL ", & + "N4PFXL ","N4PFYL ","N4PFZL ","N4PMXL ","N4PMYL ", & + "N4PMZL ","N4RAXL ","N4RAYL ","N4RAZL ","N4RDXR ", & + "N4RDYR ","N4RDZR ","N4RVXG ","N4RVYG ","N4RVZG ", & + "N4TAXL ","N4TAYL ","N4TAZL ","N4TDXR ","N4TDYR ", & + "N4TDZR ","N4TVXG ","N4TVYG ","N4TVZG ","N5DFXL ", & + "N5DFYL ","N5DFZL ","N5DMXL ","N5DMYL ","N5DMZL ", & + "N5FXL ","N5FYL ","N5FZL ","N5MXL ","N5MYL ", & + "N5MZL ","N5PFXL ","N5PFYL ","N5PFZL ","N5PMXL ", & + "N5PMYL ","N5PMZL ","N5RAXL ","N5RAYL ","N5RAZL ", & + "N5RDXR ","N5RDYR ","N5RDZR ","N5RVXG ","N5RVYG ", & + "N5RVZG ","N5TAXL ","N5TAYL ","N5TAZL ","N5TDXR ", & + "N5TDYR ","N5TDZR ","N5TVXG ","N5TVYG ","N5TVZG ", & + "N6DFXL ","N6DFYL ","N6DFZL ","N6DMXL ","N6DMYL ", & + "N6DMZL ","N6FXL ","N6FYL ","N6FZL ","N6MXL ", & + "N6MYL ","N6MZL ","N6PFXL ","N6PFYL ","N6PFZL ", & + "N6PMXL ","N6PMYL ","N6PMZL ","N6RAXL ","N6RAYL ", & + "N6RAZL ","N6RDXR ","N6RDYR ","N6RDZR ","N6RVXG ", & + "N6RVYG ","N6RVZG ","N6TAXL ","N6TAYL ","N6TAZL ", & + "N6TDXR ","N6TDYR ","N6TDZR ","N6TVXG ","N6TVYG ", & + "N6TVZG ","N7DFXL ","N7DFYL ","N7DFZL ","N7DMXL ", & + "N7DMYL ","N7DMZL ","N7FXL ","N7FYL ","N7FZL ", & + "N7MXL ","N7MYL ","N7MZL ","N7PFXL ","N7PFYL ", & + "N7PFZL ","N7PMXL ","N7PMYL ","N7PMZL ","N7RAXL ", & + "N7RAYL ","N7RAZL ","N7RDXR ","N7RDYR ","N7RDZR ", & + "N7RVXG ","N7RVYG ","N7RVZG ","N7TAXL ","N7TAYL ", & + "N7TAZL ","N7TDXR ","N7TDYR ","N7TDZR ","N7TVXG ", & + "N7TVYG ","N7TVZG ","N8DFXL ","N8DFYL ","N8DFZL ", & + "N8DMXL ","N8DMYL ","N8DMZL ","N8FXL ","N8FYL ", & + "N8FZL ","N8MXL ","N8MYL ","N8MZL ","N8PFXL ", & + "N8PFYL ","N8PFZL ","N8PMXL ","N8PMYL ","N8PMZL ", & + "N8RAXL ","N8RAYL ","N8RAZL ","N8RDXR ","N8RDYR ", & + "N8RDZR ","N8RVXG ","N8RVYG ","N8RVZG ","N8TAXL ", & + "N8TAYL ","N8TAZL ","N8TDXR ","N8TDYR ","N8TDZR ", & + "N8TVXG ","N8TVYG ","N8TVZG ","N9DFXL ","N9DFYL ", & + "N9DFZL ","N9DMXL ","N9DMYL ","N9DMZL ","N9FXL ", & + "N9FYL ","N9FZL ","N9MXL ","N9MYL ","N9MZL ", & + "N9PFXL ","N9PFYL ","N9PFZL ","N9PMXL ","N9PMYL ", & + "N9PMZL ","N9RAXL ","N9RAYL ","N9RAZL ","N9RDXR ", & + "N9RDYR ","N9RDZR ","N9RVXG ","N9RVYG ","N9RVZG ", & + "N9TAXL ","N9TAYL ","N9TAZL ","N9TDXR ","N9TDYR ", & + "N9TDZR ","N9TVXG ","N9TVYG ","N9TVZG ","PACCACT ", & + "PANGACT ","PANGINP ","PRATACT ","ROOTAPPLIEDFXG","ROOTAPPLIEDFXR", & + "ROOTAPPLIEDFYG","ROOTAPPLIEDFYR","ROOTAPPLIEDFZG","ROOTAPPLIEDFZR","ROOTAPPLIEDMXG", & + "ROOTAPPLIEDMXR","ROOTAPPLIEDMYG","ROOTAPPLIEDMYR","ROOTAPPLIEDMZG","ROOTAPPLIEDMZR", & + "ROOTFXR ","ROOTFYR ","ROOTFZR ","ROOTMXR ","ROOTMYR ", & + "ROOTMZR ","TIPRAXL ","TIPRAYL ","TIPRAZL ","TIPRDXR ", & + "TIPRDYR ","TIPRDZR ","TIPRVXG ","TIPRVYG ","TIPRVZG ", & + "TIPTAXL ","TIPTAYL ","TIPTAZL ","TIPTDXR ","TIPTDYR ", & + "TIPTDZR ","TIPTVXG ","TIPTVYG ","TIPTVZG "/) + INTEGER(IntKi), PARAMETER :: ParamIndxAry(364) = (/ & ! This lists the index into AllOuts(:) of the allowed parameters ValidParamAry(:) + N1DFxl , N1DFyl , N1DFzl , N1DMxl , N1DMyl , & + N1DMzl , N1Fxl , N1Fyl , N1Fzl , N1Mxl , & + N1Myl , N1Mzl , N1PFxl , N1PFyl , N1PFzl , & + N1PMxl , N1PMyl , N1PMzl , N1RAXl , N1RAYl , & + N1RAZl , N1RDxr , N1RDyr , N1RDzr , N1RVXg , & + N1RVYg , N1RVZg , N1TAXl , N1TAYl , N1TAZl , & + N1TDxr , N1TDyr , N1TDzr , N1TVXg , N1TVYg , & + N1TVZg , N2DFxl , N2DFyl , N2DFzl , N2DMxl , & + N2DMyl , N2DMzl , N2Fxl , N2Fyl , N2Fzl , & + N2Mxl , N2Myl , N2Mzl , N2PFxl , N2PFyl , & + N2PFzl , N2PMxl , N2PMyl , N2PMzl , N2RAXl , & + N2RAYl , N2RAZl , N2RDxr , N2RDyr , N2RDzr , & + N2RVXg , N2RVYg , N2RVZg , N2TAXl , N2TAYl , & + N2TAZl , N2TDxr , N2TDyr , N2TDzr , N2TVXg , & + N2TVYg , N2TVZg , N3DFxl , N3DFyl , N3DFzl , & + N3DMxl , N3DMyl , N3DMzl , N3Fxl , N3Fyl , & + N3Fzl , N3Mxl , N3Myl , N3Mzl , N3PFxl , & + N3PFyl , N3PFzl , N3PMxl , N3PMyl , N3PMzl , & + N3RAXl , N3RAYl , N3RAZl , N3RDxr , N3RDyr , & + N3RDzr , N3RVXg , N3RVYg , N3RVZg , N3TAXl , & + N3TAYl , N3TAZl , N3TDxr , N3TDyr , N3TDzr , & + N3TVXg , N3TVYg , N3TVZg , N4DFxl , N4DFyl , & + N4DFzl , N4DMxl , N4DMyl , N4DMzl , N4Fxl , & + N4Fyl , N4Fzl , N4Mxl , N4Myl , N4Mzl , & + N4PFxl , N4PFyl , N4PFzl , N4PMxl , N4PMyl , & + N4PMzl , N4RAXl , N4RAYl , N4RAZl , N4RDxr , & + N4RDyr , N4RDzr , N4RVXg , N4RVYg , N4RVZg , & + N4TAXl , N4TAYl , N4TAZl , N4TDxr , N4TDyr , & + N4TDzr , N4TVXg , N4TVYg , N4TVZg , N5DFxl , & + N5DFyl , N5DFzl , N5DMxl , N5DMyl , N5DMzl , & + N5Fxl , N5Fyl , N5Fzl , N5Mxl , N5Myl , & + N5Mzl , N5PFxl , N5PFyl , N5PFzl , N5PMxl , & + N5PMyl , N5PMzl , N5RAXl , N5RAYl , N5RAZl , & + N5RDxr , N5RDyr , N5RDzr , N5RVXg , N5RVYg , & + N5RVZg , N5TAXl , N5TAYl , N5TAZl , N5TDxr , & + N5TDyr , N5TDzr , N5TVXg , N5TVYg , N5TVZg , & + N6DFxl , N6DFyl , N6DFzl , N6DMxl , N6DMyl , & + N6DMzl , N6Fxl , N6Fyl , N6Fzl , N6Mxl , & + N6Myl , N6Mzl , N6PFxl , N6PFyl , N6PFzl , & + N6PMxl , N6PMyl , N6PMzl , N6RAXl , N6RAYl , & + N6RAZl , N6RDxr , N6RDyr , N6RDzr , N6RVXg , & + N6RVYg , N6RVZg , N6TAXl , N6TAYl , N6TAZl , & + N6TDxr , N6TDyr , N6TDzr , N6TVXg , N6TVYg , & + N6TVZg , N7DFxl , N7DFyl , N7DFzl , N7DMxl , & + N7DMyl , N7DMzl , N7Fxl , N7Fyl , N7Fzl , & + N7Mxl , N7Myl , N7Mzl , N7PFxl , N7PFyl , & + N7PFzl , N7PMxl , N7PMyl , N7PMzl , N7RAXl , & + N7RAYl , N7RAZl , N7RDxr , N7RDyr , N7RDzr , & + N7RVXg , N7RVYg , N7RVZg , N7TAXl , N7TAYl , & + N7TAZl , N7TDxr , N7TDyr , N7TDzr , N7TVXg , & + N7TVYg , N7TVZg , N8DFxl , N8DFyl , N8DFzl , & + N8DMxl , N8DMyl , N8DMzl , N8Fxl , N8Fyl , & + N8Fzl , N8Mxl , N8Myl , N8Mzl , N8PFxl , & + N8PFyl , N8PFzl , N8PMxl , N8PMyl , N8PMzl , & + N8RAXl , N8RAYl , N8RAZl , N8RDxr , N8RDyr , & + N8RDzr , N8RVXg , N8RVYg , N8RVZg , N8TAXl , & + N8TAYl , N8TAZl , N8TDxr , N8TDyr , N8TDzr , & + N8TVXg , N8TVYg , N8TVZg , N9DFxl , N9DFyl , & + N9DFzl , N9DMxl , N9DMyl , N9DMzl , N9Fxl , & + N9Fyl , N9Fzl , N9Mxl , N9Myl , N9Mzl , & + N9PFxl , N9PFyl , N9PFzl , N9PMxl , N9PMyl , & + N9PMzl , N9RAXl , N9RAYl , N9RAZl , N9RDxr , & + N9RDyr , N9RDzr , N9RVXg , N9RVYg , N9RVZg , & + N9TAXl , N9TAYl , N9TAZl , N9TDxr , N9TDyr , & + N9TDzr , N9TVXg , N9TVYg , N9TVZg , PAccAct , & + PAngAct , PAngInp , PRatAct , RootAppliedFxg , RootAppliedFxr , & + RootAppliedFyg , RootAppliedFyr , RootAppliedFzg , RootAppliedFzr , RootAppliedMxg , & + RootAppliedMxr , RootAppliedMyg , RootAppliedMyr , RootAppliedMzg , RootAppliedMzr , & + RootFxr , RootFyr , RootFzr , RootMxr , RootMyr , & + RootMzr , TipRAXl , TipRAYl , TipRAZl , TipRDxr , & + TipRDyr , TipRDzr , TipRVXg , TipRVYg , TipRVZg , & + TipTAXl , TipTAYl , TipTAZl , TipTDxr , TipTDyr , & + TipTDzr , TipTVXg , TipTVYg , TipTVZg /) + CHARACTER(ChanLen), PARAMETER :: ParamUnitsAry(364) = (/ & ! This lists the units corresponding to the allowed parameters + "(N/m) ","(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ", & + "(N-m/m) ","(N) ","(N) ","(N) ","(N-m) ", & + "(N-m) ","(N-m) ","(N) ","(N) ","(N) ", & + "(N-m) ","(N-m) ","(N-m) ","(deg/s^2)","(deg/s^2)", & + "(deg/s^2)","(-) ","(-) ","(-) ","(deg/s) ", & + "(deg/s) ","(deg/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(m/s) ","(m/s) ", & + "(m/s) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m) ", & + "(N-m/m) ","(N-m/m) ","(N) ","(N) ","(N) ", & + "(N-m) ","(N-m) ","(N-m) ","(N) ","(N) ", & + "(N) ","(N-m) ","(N-m) ","(N-m) ","(deg/s^2)", & + "(deg/s^2)","(deg/s^2)","(-) ","(-) ","(-) ", & + "(deg/s) ","(deg/s) ","(deg/s) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(m/s) ", & + "(m/s) ","(m/s) ","(N/m) ","(N/m) ","(N/m) ", & + "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N) ","(N) ", & + "(N) ","(N-m) ","(N-m) ","(N-m) ","(N) ", & + "(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ", & + "(deg/s^2)","(deg/s^2)","(deg/s^2)","(-) ","(-) ", & + "(-) ","(deg/s) ","(deg/s) ","(deg/s) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(m/s) ","(m/s) ","(m/s) ","(N/m) ","(N/m) ", & + "(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N) ", & + "(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ", & + "(N) ","(N) ","(N) ","(N-m) ","(N-m) ", & + "(N-m) ","(deg/s^2)","(deg/s^2)","(deg/s^2)","(-) ", & + "(-) ","(-) ","(deg/s) ","(deg/s) ","(deg/s) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(m/s) ","(m/s) ","(m/s) ","(N/m) ", & + "(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ", & + "(N) ","(N) ","(N) ","(N-m) ","(N-m) ", & + "(N-m) ","(N) ","(N) ","(N) ","(N-m) ", & + "(N-m) ","(N-m) ","(deg/s^2)","(deg/s^2)","(deg/s^2)", & + "(-) ","(-) ","(-) ","(deg/s) ","(deg/s) ", & + "(deg/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ", & + "(m) ","(m) ","(m/s) ","(m/s) ","(m/s) ", & + "(N/m) ","(N/m) ","(N/m) ","(N-m/m) ","(N-m/m) ", & + "(N-m/m) ","(N) ","(N) ","(N) ","(N-m) ", & + "(N-m) ","(N-m) ","(N) ","(N) ","(N) ", & + "(N-m) ","(N-m) ","(N-m) ","(deg/s^2)","(deg/s^2)", & + "(deg/s^2)","(-) ","(-) ","(-) ","(deg/s) ", & + "(deg/s) ","(deg/s) ","(m/s^2) ","(m/s^2) ","(m/s^2) ", & + "(m) ","(m) ","(m) ","(m/s) ","(m/s) ", & + "(m/s) ","(N/m) ","(N/m) ","(N/m) ","(N-m/m) ", & + "(N-m/m) ","(N-m/m) ","(N) ","(N) ","(N) ", & + "(N-m) ","(N-m) ","(N-m) ","(N) ","(N) ", & + "(N) ","(N-m) ","(N-m) ","(N-m) ","(deg/s^2)", & + "(deg/s^2)","(deg/s^2)","(-) ","(-) ","(-) ", & + "(deg/s) ","(deg/s) ","(deg/s) ","(m/s^2) ","(m/s^2) ", & + "(m/s^2) ","(m) ","(m) ","(m) ","(m/s) ", & + "(m/s) ","(m/s) ","(N/m) ","(N/m) ","(N/m) ", & + "(N-m/m) ","(N-m/m) ","(N-m/m) ","(N) ","(N) ", & + "(N) ","(N-m) ","(N-m) ","(N-m) ","(N) ", & + "(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ", & + "(deg/s^2)","(deg/s^2)","(deg/s^2)","(-) ","(-) ", & + "(-) ","(deg/s) ","(deg/s) ","(deg/s) ","(m/s^2) ", & + "(m/s^2) ","(m/s^2) ","(m) ","(m) ","(m) ", & + "(m/s) ","(m/s) ","(m/s) ","(N/m) ","(N/m) ", & + "(N/m) ","(N-m/m) ","(N-m/m) ","(N-m/m) ","(N) ", & + "(N) ","(N) ","(N-m) ","(N-m) ","(N-m) ", & + "(N) ","(N) ","(N) ","(N-m) ","(N-m) ", & + "(N-m) ","(deg/s^2)","(deg/s^2)","(deg/s^2)","(-) ", & + "(-) ","(-) ","(deg/s) ","(deg/s) ","(deg/s) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(m/s) ","(m/s) ","(m/s) ","(deg/s^2)", & + "(deg) ","(deg) ","(deg/s) ","(N) ","(N) ", & + "(N) ","(N) ","(N) ","(N) ","(N-m) ", & + "(N-m) ","(N-m) ","(N-m) ","(N-m) ","(N-m) ", & + "(N) ","(N) ","(N) ","(N-m) ","(N-m) ", & + "(N-m) ","(deg/s^2)","(deg/s^2)","(deg/s^2)","(-) ", & + "(-) ","(-) ","(deg/s) ","(deg/s) ","(deg/s) ", & + "(m/s^2) ","(m/s^2) ","(m/s^2) ","(m) ","(m) ", & + "(m) ","(m/s) ","(m/s) ","(m/s) "/) + + INTEGER, PARAMETER :: RootAppliedLd(12) = (/ & ! all applied load mapped to root outputs. For convenience in setting calculation flag + RootAppliedFxr, RootAppliedFyr, RootAppliedFzr, RootAppliedMxr, RootAppliedMyr, RootAppliedMzr, & + RootAppliedFxg, RootAppliedFyg, RootAppliedFzg, RootAppliedMxg, RootAppliedMyg, RootAppliedMzg /) ! Initialize values @@ -1357,7 +1444,7 @@ SUBROUTINE SetOutParam(OutList, p, ErrStat, ErrMsg ) ! ..... Developer must add checking for invalid inputs here: ..... DO I = p%NNodeOuts+1,9 ! Invalid nodes - + InvalidOutput( NFl( i,:) ) = .true. InvalidOutput( NMl( i,:) ) = .true. InvalidOutput( NTDr(i,:) ) = .true. @@ -1458,6 +1545,7 @@ SUBROUTINE SetOutParam(OutList, p, ErrStat, ErrMsg ) p%OutParam(I)%Units = ParamUnitsAry(Indx) ! it's a valid output if ( p%OutParam(I)%Indx >= N1DFxl .and. p%OutParam(I)%Indx <= N9DMzl ) p%OutInputs = .true. + if ( any(RootAppliedLd==p%OutParam(I)%Indx) ) p%CompAppliedLdAtRoot = .true. ! need to setup meshes END IF ELSE ! this channel isn't valid p%OutParam(I)%Indx = Time ! pick any valid channel (I just picked "Time" here because it's universal) diff --git a/modules/beamdyn/src/BeamDyn_Types.f90 b/modules/beamdyn/src/BeamDyn_Types.f90 index 81632c30ff..58e2895b43 100644 --- a/modules/beamdyn/src/BeamDyn_Types.f90 +++ b/modules/beamdyn/src/BeamDyn_Types.f90 @@ -237,6 +237,7 @@ MODULE BeamDyn_Types LOGICAL :: RotStates = .false. !< Orient states in rotating frame during linearization? (flag) [-] LOGICAL :: RelStates = .false. !< Define states relative to root motion during linearization? (flag) [-] LOGICAL :: CompAeroMaps = .FALSE. !< flag to determine if BeamDyn is computing aero maps (true) or running a normal simulation (false) [-] + LOGICAL :: CompAppliedLdAtRoot = .FALSE. !< flag to determine if BeamDyn should compute the applied loads at root [-] END TYPE BD_ParameterType ! ======================= ! ========= BD_InputType ======= @@ -295,8 +296,11 @@ MODULE BeamDyn_Types TYPE, PUBLIC :: BD_MiscVarType TYPE(MeshType) :: u_DistrLoad_at_y !< input loads at output node locations [-] TYPE(MeshType) :: y_BldMotion_at_u !< output motions at input node locations (displacements necessary for mapping loads) [-] + TYPE(MeshType) :: LoadsAtRoot !< Applied loads mapped to root [-] TYPE(MeshMapType) :: Map_u_DistrLoad_to_y !< mapping of input loads to output node locations [-] TYPE(MeshMapType) :: Map_y_BldMotion_to_u !< mapping of output motions to input node locations (for load transfer) [-] + TYPE(MeshMapType) :: Map_u_DistrLoad_to_R !< mapping of input loads to root location [-] + TYPE(MeshMapType) :: Map_u_PtLoad_to_R !< mapping of input loads to root location [-] INTEGER(IntKi) :: Un_Sum = 0_IntKi !< unit number of summary file [-] TYPE(EqMotionQP) :: qp !< Quadrature point calculation info [-] REAL(R8Ki) , DIMENSION(:,:), ALLOCATABLE :: lin_A !< A (dXdx) matrix used in linearization (before RotState is applied) [-] @@ -1685,6 +1689,7 @@ subroutine BD_CopyParam(SrcParamData, DstParamData, CtrlCode, ErrStat, ErrMsg) DstParamData%RotStates = SrcParamData%RotStates DstParamData%RelStates = SrcParamData%RelStates DstParamData%CompAeroMaps = SrcParamData%CompAeroMaps + DstParamData%CompAppliedLdAtRoot = SrcParamData%CompAppliedLdAtRoot end subroutine subroutine BD_DestroyParam(ParamData, ErrStat, ErrMsg) @@ -1899,6 +1904,7 @@ subroutine BD_PackParam(RF, Indata) call RegPack(RF, InData%RotStates) call RegPack(RF, InData%RelStates) call RegPack(RF, InData%CompAeroMaps) + call RegPack(RF, InData%CompAppliedLdAtRoot) if (RegCheckErr(RF, RoutineName)) return end subroutine @@ -2013,6 +2019,7 @@ subroutine BD_UnPackParam(RF, OutData) call RegUnpack(RF, OutData%RotStates); if (RegCheckErr(RF, RoutineName)) return call RegUnpack(RF, OutData%RelStates); if (RegCheckErr(RF, RoutineName)) return call RegUnpack(RF, OutData%CompAeroMaps); if (RegCheckErr(RF, RoutineName)) return + call RegUnpack(RF, OutData%CompAppliedLdAtRoot); if (RegCheckErr(RF, RoutineName)) return end subroutine subroutine BD_CopyInput(SrcInputData, DstInputData, CtrlCode, ErrStat, ErrMsg) @@ -2747,12 +2754,21 @@ subroutine BD_CopyMisc(SrcMiscData, DstMiscData, CtrlCode, ErrStat, ErrMsg) call MeshCopy(SrcMiscData%y_BldMotion_at_u, DstMiscData%y_BldMotion_at_u, CtrlCode, ErrStat2, ErrMsg2 ) call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) if (ErrStat >= AbortErrLev) return + call MeshCopy(SrcMiscData%LoadsAtRoot, DstMiscData%LoadsAtRoot, CtrlCode, ErrStat2, ErrMsg2 ) + call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + if (ErrStat >= AbortErrLev) return call NWTC_Library_CopyMeshMapType(SrcMiscData%Map_u_DistrLoad_to_y, DstMiscData%Map_u_DistrLoad_to_y, CtrlCode, ErrStat2, ErrMsg2) call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) if (ErrStat >= AbortErrLev) return call NWTC_Library_CopyMeshMapType(SrcMiscData%Map_y_BldMotion_to_u, DstMiscData%Map_y_BldMotion_to_u, CtrlCode, ErrStat2, ErrMsg2) call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) if (ErrStat >= AbortErrLev) return + call NWTC_Library_CopyMeshMapType(SrcMiscData%Map_u_DistrLoad_to_R, DstMiscData%Map_u_DistrLoad_to_R, CtrlCode, ErrStat2, ErrMsg2) + call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + if (ErrStat >= AbortErrLev) return + call NWTC_Library_CopyMeshMapType(SrcMiscData%Map_u_PtLoad_to_R, DstMiscData%Map_u_PtLoad_to_R, CtrlCode, ErrStat2, ErrMsg2) + call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + if (ErrStat >= AbortErrLev) return DstMiscData%Un_Sum = SrcMiscData%Un_Sum call BD_CopyEqMotionQP(SrcMiscData%qp, DstMiscData%qp, CtrlCode, ErrStat2, ErrMsg2) call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) @@ -3138,10 +3154,16 @@ subroutine BD_DestroyMisc(MiscData, ErrStat, ErrMsg) call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) call MeshDestroy( MiscData%y_BldMotion_at_u, ErrStat2, ErrMsg2) call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + call MeshDestroy( MiscData%LoadsAtRoot, ErrStat2, ErrMsg2) + call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) call NWTC_Library_DestroyMeshMapType(MiscData%Map_u_DistrLoad_to_y, ErrStat2, ErrMsg2) call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) call NWTC_Library_DestroyMeshMapType(MiscData%Map_y_BldMotion_to_u, ErrStat2, ErrMsg2) call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + call NWTC_Library_DestroyMeshMapType(MiscData%Map_u_DistrLoad_to_R, ErrStat2, ErrMsg2) + call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) + call NWTC_Library_DestroyMeshMapType(MiscData%Map_u_PtLoad_to_R, ErrStat2, ErrMsg2) + call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) call BD_DestroyEqMotionQP(MiscData%qp, ErrStat2, ErrMsg2) call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) if (allocated(MiscData%lin_A)) then @@ -3247,8 +3269,11 @@ subroutine BD_PackMisc(RF, Indata) if (RF%ErrStat >= AbortErrLev) return call MeshPack(RF, InData%u_DistrLoad_at_y) call MeshPack(RF, InData%y_BldMotion_at_u) + call MeshPack(RF, InData%LoadsAtRoot) call NWTC_Library_PackMeshMapType(RF, InData%Map_u_DistrLoad_to_y) call NWTC_Library_PackMeshMapType(RF, InData%Map_y_BldMotion_to_u) + call NWTC_Library_PackMeshMapType(RF, InData%Map_u_DistrLoad_to_R) + call NWTC_Library_PackMeshMapType(RF, InData%Map_u_PtLoad_to_R) call RegPack(RF, InData%Un_Sum) call BD_PackEqMotionQP(RF, InData%qp) call RegPackAlloc(RF, InData%lin_A) @@ -3296,8 +3321,11 @@ subroutine BD_UnPackMisc(RF, OutData) if (RF%ErrStat /= ErrID_None) return call MeshUnpack(RF, OutData%u_DistrLoad_at_y) ! u_DistrLoad_at_y call MeshUnpack(RF, OutData%y_BldMotion_at_u) ! y_BldMotion_at_u + call MeshUnpack(RF, OutData%LoadsAtRoot) ! LoadsAtRoot call NWTC_Library_UnpackMeshMapType(RF, OutData%Map_u_DistrLoad_to_y) ! Map_u_DistrLoad_to_y call NWTC_Library_UnpackMeshMapType(RF, OutData%Map_y_BldMotion_to_u) ! Map_y_BldMotion_to_u + call NWTC_Library_UnpackMeshMapType(RF, OutData%Map_u_DistrLoad_to_R) ! Map_u_DistrLoad_to_R + call NWTC_Library_UnpackMeshMapType(RF, OutData%Map_u_PtLoad_to_R) ! Map_u_PtLoad_to_R call RegUnpack(RF, OutData%Un_Sum); if (RegCheckErr(RF, RoutineName)) return call BD_UnpackEqMotionQP(RF, OutData%qp) ! qp call RegUnpackAlloc(RF, OutData%lin_A); if (RegCheckErr(RF, RoutineName)) return diff --git a/modules/beamdyn/src/Registry_BeamDyn.txt b/modules/beamdyn/src/Registry_BeamDyn.txt index 448cd81abe..bd90a2a168 100644 --- a/modules/beamdyn/src/Registry_BeamDyn.txt +++ b/modules/beamdyn/src/Registry_BeamDyn.txt @@ -250,6 +250,7 @@ typedef ^ ParameterType Integer Jac_nx - typedef ^ ParameterType logical RotStates - - - "Orient states in rotating frame during linearization? (flag)" - typedef ^ ParameterType Logical RelStates - - - "Define states relative to root motion during linearization? (flag)" - typedef ^ ParameterType LOGICAL CompAeroMaps - .FALSE. - "flag to determine if BeamDyn is computing aero maps (true) or running a normal simulation (false)" - +typedef ^ ParameterType LOGICAL CompAppliedLdAtRoot - .FALSE. - "flag to determine if BeamDyn should compute the applied loads at root" - # ..... Inputs @@ -330,8 +331,11 @@ typedef ^ EqMotionQP ^ Yd :::: - - "Dissipative # e.g. indices for searching in an array, large arrays that are local variables in any routine called multiple times, etc. typedef ^ MiscVarType MeshType u_DistrLoad_at_y - - - "input loads at output node locations" - typedef ^ MiscVarType MeshType y_BldMotion_at_u - - - "output motions at input node locations (displacements necessary for mapping loads)" - +typedef ^ MiscVarType MeshType LoadsAtRoot - - - "Applied loads mapped to root" - typedef ^ MiscVarType MeshMapType Map_u_DistrLoad_to_y - - - "mapping of input loads to output node locations" - typedef ^ MiscVarType MeshMapType Map_y_BldMotion_to_u - - - "mapping of output motions to input node locations (for load transfer)" - +typedef ^ MiscVarType MeshMapType Map_u_DistrLoad_to_R - - - "mapping of input loads to root location" - +typedef ^ MiscVarType MeshMapType Map_u_PtLoad_to_R - - - "mapping of input loads to root location" - typedef ^ MiscVarType IntKi Un_Sum - - - "unit number of summary file" - typedef ^ MiscVarType EqMotionQP qp - - - "Quadrature point calculation info" - typedef ^ MiscVarType R8Ki lin_A {:}{:} - - "A (dXdx) matrix used in linearization (before RotState is applied)" - From d8efcb4a5978fb285a646da7299a90aeb8743433 Mon Sep 17 00:00:00 2001 From: andrew-platt Date: Thu, 8 May 2025 17:08:00 -0600 Subject: [PATCH 2/6] BD: add calculations for mapping loads to root outputs --- modules/beamdyn/src/BeamDyn.f90 | 20 ++++++++++++++++++++ modules/beamdyn/src/BeamDyn_IO.f90 | 29 +++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/modules/beamdyn/src/BeamDyn.f90 b/modules/beamdyn/src/BeamDyn.f90 index 86d3382a47..b65fb0d636 100644 --- a/modules/beamdyn/src/BeamDyn.f90 +++ b/modules/beamdyn/src/BeamDyn.f90 @@ -1746,6 +1746,26 @@ subroutine Init_MiscVars( p, u, y, m, ErrStat, ErrMsg ) CALL BD_CopyInput(u, m%u2, MESH_NEWCOPY, ErrStat2, ErrMsg2) CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + ! compute mapping of all applied loads to the root location + if (p%CompAppliedLdAtRoot) then + ! create point mesh at root (cousin of rootmotion) + CALL MeshCopy( SrcMesh = u%RootMotion & + , DestMesh = m%LoadsAtRoot & + , CtrlCode = MESH_SIBLING & + , IOS = COMPONENT_OUTPUT & + , Force = .TRUE. & + , Moment = .TRUE. & + , ErrStat = ErrStat2 & + , ErrMess = ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + if (ErrStat>=AbortErrLev) RETURN + ! mapping of distributed loads to LoadsAtRoot + CALL MeshMapCreate( u%DistrLoad, m%LoadsAtRoot, m%Map_u_DistrLoad_to_R, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + ! mapping of point loads to LoadsAtRoot + CALL MeshMapCreate( u%PointLoad, m%LoadsAtRoot, m%Map_u_PtLoad_to_R, ErrStat2, ErrMsg2 ) + CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + endif end subroutine Init_MiscVars !----------------------------------------------------------------------------------------------------------------------------------- diff --git a/modules/beamdyn/src/BeamDyn_IO.f90 b/modules/beamdyn/src/BeamDyn_IO.f90 index 4e4ccd0db5..05fd686715 100644 --- a/modules/beamdyn/src/BeamDyn_IO.f90 +++ b/modules/beamdyn/src/BeamDyn_IO.f90 @@ -2000,6 +2000,35 @@ SUBROUTINE Calc_WriteOutput( p, AllOuts, y, m, ErrStat, ErrMsg, CalcWriteOutput end if + ! compute mapping of all applied loads to the root location + if (p%CompAppliedLdAtRoot) then +!FIXME: check if should be using u2 or u + ! mapping of distributed loads to LoadsAtRoot + call Transfer_Line2_to_Point( m%u2%DistrLoad, m%LoadsAtRoot, m%Map_u_DistrLoad_to_R, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) +!FIXME: might need temp copy here to avoid clobbering all the forces with second transfer. + ! mapping of point loads to LoadsAtRoot + call Transfer_Point_to_Point( m%u2%PointLoad, m%LoadsAtRoot, m%Map_u_PtLoad_to_R, ErrStat2, ErrMsg2 ) + call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + + ! Global coords + AllOuts( RootAppliedFxg ) = m%LoadsAtRoot%Force(1,1) + AllOuts( RootAppliedFyg ) = m%LoadsAtRoot%Force(2,1) + AllOuts( RootAppliedFzg ) = m%LoadsAtRoot%Force(3,1) + AllOuts( RootAppliedMxg ) = m%LoadsAtRoot%Moment(1,1) + AllOuts( RootAppliedMyg ) = m%LoadsAtRoot%Moment(2,1) + AllOuts( RootAppliedMzg ) = m%LoadsAtRoot%Moment(3,1) + + ! Root coords + temp_vec = MATMUL(m%u2%RootMotion%Orientation(:,:,1),m%LoadsAtRoot%Force(:,1)) + AllOuts( RootAppliedFxr ) = temp_vec(1) + AllOuts( RootAppliedFyr ) = temp_vec(2) + AllOuts( RootAppliedFzr ) = temp_vec(3) + temp_vec = MATMUL(m%u2%RootMotion%Orientation(:,:,1),m%LoadsAtRoot%Moment(:,1)) + AllOuts( RootAppliedMxr ) = temp_vec(1) + AllOuts( RootAppliedMyr ) = temp_vec(2) + AllOuts( RootAppliedMzr ) = temp_vec(3) + endif end if From d3093168f046bff0cfa148e719b395936a269eb2 Mon Sep 17 00:00:00 2001 From: andrew-platt Date: Fri, 9 May 2025 07:12:15 -0600 Subject: [PATCH 3/6] BD: LoadsAtRoot - sum forces/moments from distr and point --- modules/beamdyn/src/BeamDyn.f90 | 4 ++++ modules/beamdyn/src/BeamDyn_IO.f90 | 30 ++++++++++++++++++++---------- 2 files changed, 24 insertions(+), 10 deletions(-) diff --git a/modules/beamdyn/src/BeamDyn.f90 b/modules/beamdyn/src/BeamDyn.f90 index b65fb0d636..069485b8f0 100644 --- a/modules/beamdyn/src/BeamDyn.f90 +++ b/modules/beamdyn/src/BeamDyn.f90 @@ -1759,12 +1759,16 @@ subroutine Init_MiscVars( p, u, y, m, ErrStat, ErrMsg ) , ErrMess = ErrMsg2 ) CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) if (ErrStat>=AbortErrLev) RETURN + ! mapping of distributed loads to LoadsAtRoot CALL MeshMapCreate( u%DistrLoad, m%LoadsAtRoot, m%Map_u_DistrLoad_to_R, ErrStat2, ErrMsg2 ) CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + ! mapping of point loads to LoadsAtRoot CALL MeshMapCreate( u%PointLoad, m%LoadsAtRoot, m%Map_u_PtLoad_to_R, ErrStat2, ErrMsg2 ) CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + + m%LoadsAtRoot%remapFlag = .false. endif end subroutine Init_MiscVars diff --git a/modules/beamdyn/src/BeamDyn_IO.f90 b/modules/beamdyn/src/BeamDyn_IO.f90 index 05fd686715..560b9a3730 100644 --- a/modules/beamdyn/src/BeamDyn_IO.f90 +++ b/modules/beamdyn/src/BeamDyn_IO.f90 @@ -1742,6 +1742,8 @@ SUBROUTINE Calc_WriteOutput( p, AllOuts, y, m, ErrStat, ErrMsg, CalcWriteOutput INTEGER(IntKi) :: j,beta,j_BldMotion REAL(BDKi) :: temp_vec(3) REAL(BDKi) :: temp_vec2(3) + REAL(ReKi) :: temp_frc(3) + REAL(ReKi) :: temp_mom(3) REAL(BDKi) :: temp33(3,3) REAL(BDKi) :: temp33_2(3,3) @@ -2002,29 +2004,37 @@ SUBROUTINE Calc_WriteOutput( p, AllOuts, y, m, ErrStat, ErrMsg, CalcWriteOutput ! compute mapping of all applied loads to the root location if (p%CompAppliedLdAtRoot) then -!FIXME: check if should be using u2 or u + ! mapping of distributed loads to LoadsAtRoot call Transfer_Line2_to_Point( m%u2%DistrLoad, m%LoadsAtRoot, m%Map_u_DistrLoad_to_R, ErrStat2, ErrMsg2 ) call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) -!FIXME: might need temp copy here to avoid clobbering all the forces with second transfer. + + ! a second transfer will zero out the forces, and moments, so store them elsewhere + temp_frc = m%LoadsAtRoot%Force(:,1) + temp_mom = m%LoadsAtRoot%Moment(:,1) + ! mapping of point loads to LoadsAtRoot call Transfer_Point_to_Point( m%u2%PointLoad, m%LoadsAtRoot, m%Map_u_PtLoad_to_R, ErrStat2, ErrMsg2 ) call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + ! add the distributed loads + temp_frc = temp_frc + m%LoadsAtRoot%Force(:,1) + temp_mom = temp_mom + m%LoadsAtRoot%Moment(:,1) + ! Global coords - AllOuts( RootAppliedFxg ) = m%LoadsAtRoot%Force(1,1) - AllOuts( RootAppliedFyg ) = m%LoadsAtRoot%Force(2,1) - AllOuts( RootAppliedFzg ) = m%LoadsAtRoot%Force(3,1) - AllOuts( RootAppliedMxg ) = m%LoadsAtRoot%Moment(1,1) - AllOuts( RootAppliedMyg ) = m%LoadsAtRoot%Moment(2,1) - AllOuts( RootAppliedMzg ) = m%LoadsAtRoot%Moment(3,1) + AllOuts( RootAppliedFxg ) = temp_frc(1) + AllOuts( RootAppliedFyg ) = temp_frc(2) + AllOuts( RootAppliedFzg ) = temp_frc(3) + AllOuts( RootAppliedMxg ) = temp_mom(1) + AllOuts( RootAppliedMyg ) = temp_mom(2) + AllOuts( RootAppliedMzg ) = temp_mom(3) ! Root coords - temp_vec = MATMUL(m%u2%RootMotion%Orientation(:,:,1),m%LoadsAtRoot%Force(:,1)) + temp_vec = MATMUL(m%u2%RootMotion%Orientation(:,:,1),temp_frc) AllOuts( RootAppliedFxr ) = temp_vec(1) AllOuts( RootAppliedFyr ) = temp_vec(2) AllOuts( RootAppliedFzr ) = temp_vec(3) - temp_vec = MATMUL(m%u2%RootMotion%Orientation(:,:,1),m%LoadsAtRoot%Moment(:,1)) + temp_vec = MATMUL(m%u2%RootMotion%Orientation(:,:,1),temp_mom) AllOuts( RootAppliedMxr ) = temp_vec(1) AllOuts( RootAppliedMyr ) = temp_vec(2) AllOuts( RootAppliedMzr ) = temp_vec(3) From 185a092030d48e6dbeb73c49e664079a1d2e7354 Mon Sep 17 00:00:00 2001 From: andrew-platt Date: Fri, 9 May 2025 07:41:56 -0600 Subject: [PATCH 4/6] BD: Loads at root -- change mesh from sibling to cousin --- modules/beamdyn/src/BeamDyn.f90 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/beamdyn/src/BeamDyn.f90 b/modules/beamdyn/src/BeamDyn.f90 index 069485b8f0..4361954328 100644 --- a/modules/beamdyn/src/BeamDyn.f90 +++ b/modules/beamdyn/src/BeamDyn.f90 @@ -1751,7 +1751,7 @@ subroutine Init_MiscVars( p, u, y, m, ErrStat, ErrMsg ) ! create point mesh at root (cousin of rootmotion) CALL MeshCopy( SrcMesh = u%RootMotion & , DestMesh = m%LoadsAtRoot & - , CtrlCode = MESH_SIBLING & + , CtrlCode = MESH_COUSIN & , IOS = COMPONENT_OUTPUT & , Force = .TRUE. & , Moment = .TRUE. & From cfeb2d5148172badae5a2c223713ca4105951472 Mon Sep 17 00:00:00 2001 From: andrew-platt Date: Tue, 13 May 2025 18:14:27 -0600 Subject: [PATCH 5/6] BD: aero loads at root - remove point load mapping Only using distributed loads (StC maps to distributed loads if MESH_QP right now. Point loads in the driver map to the FE nodes) --- modules/beamdyn/src/BeamDyn.f90 | 11 ++--- modules/beamdyn/src/BeamDyn_IO.f90 | 54 +++++++++++------------- modules/beamdyn/src/BeamDyn_Types.f90 | 8 ---- modules/beamdyn/src/Registry_BeamDyn.txt | 1 - 4 files changed, 29 insertions(+), 45 deletions(-) diff --git a/modules/beamdyn/src/BeamDyn.f90 b/modules/beamdyn/src/BeamDyn.f90 index 4361954328..8a4dd5411e 100644 --- a/modules/beamdyn/src/BeamDyn.f90 +++ b/modules/beamdyn/src/BeamDyn.f90 @@ -1746,8 +1746,9 @@ subroutine Init_MiscVars( p, u, y, m, ErrStat, ErrMsg ) CALL BD_CopyInput(u, m%u2, MESH_NEWCOPY, ErrStat2, ErrMsg2) CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) - ! compute mapping of all applied loads to the root location - if (p%CompAppliedLdAtRoot) then + ! compute mapping of applied distributed loads to the root location + ! NOTE: PtLoads are not handled at present. See comments in BeamDyn_IO.f90 for changes required. + if (p%CompAppliedLdAtRoot .and. p%BldMotionNodeLoc == BD_MESH_QP) then ! create point mesh at root (cousin of rootmotion) CALL MeshCopy( SrcMesh = u%RootMotion & , DestMesh = m%LoadsAtRoot & @@ -1763,12 +1764,8 @@ subroutine Init_MiscVars( p, u, y, m, ErrStat, ErrMsg ) ! mapping of distributed loads to LoadsAtRoot CALL MeshMapCreate( u%DistrLoad, m%LoadsAtRoot, m%Map_u_DistrLoad_to_R, ErrStat2, ErrMsg2 ) CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) - - ! mapping of point loads to LoadsAtRoot - CALL MeshMapCreate( u%PointLoad, m%LoadsAtRoot, m%Map_u_PtLoad_to_R, ErrStat2, ErrMsg2 ) - CALL SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) - m%LoadsAtRoot%remapFlag = .false. + endif end subroutine Init_MiscVars diff --git a/modules/beamdyn/src/BeamDyn_IO.f90 b/modules/beamdyn/src/BeamDyn_IO.f90 index 560b9a3730..5840b4b160 100644 --- a/modules/beamdyn/src/BeamDyn_IO.f90 +++ b/modules/beamdyn/src/BeamDyn_IO.f90 @@ -1742,8 +1742,6 @@ SUBROUTINE Calc_WriteOutput( p, AllOuts, y, m, ErrStat, ErrMsg, CalcWriteOutput INTEGER(IntKi) :: j,beta,j_BldMotion REAL(BDKi) :: temp_vec(3) REAL(BDKi) :: temp_vec2(3) - REAL(ReKi) :: temp_frc(3) - REAL(ReKi) :: temp_mom(3) REAL(BDKi) :: temp33(3,3) REAL(BDKi) :: temp33_2(3,3) @@ -2001,48 +1999,46 @@ SUBROUTINE Calc_WriteOutput( p, AllOuts, y, m, ErrStat, ErrMsg, CalcWriteOutput end do ! nodes end if + end if - ! compute mapping of all applied loads to the root location - if (p%CompAppliedLdAtRoot) then - - ! mapping of distributed loads to LoadsAtRoot - call Transfer_Line2_to_Point( m%u2%DistrLoad, m%LoadsAtRoot, m%Map_u_DistrLoad_to_R, ErrStat2, ErrMsg2 ) - call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) + ! compute mapping of applied distributed loads to the root location + ! FIXME: currently not mapping the PointLoads over since there is no motion mesh associated with the PointLoad + ! To get the PointLoads mapped, the following is necessary + ! 1. create a y%BldMotionFE mesh at the finite element points (this would be very useful someday) + ! - take position info directly from uuu and state information etc. + ! - Add output channels for this for comparison + ! 2. make u%PointLoad a sibling of y%BldMotionFE + ! 3. Setup m%Map_u_PtLoad_to_R + ! 4. map loads and do summation here (remember Transfer zero's out forces/moments, so add temp arrays to hold those) + if (p%CompAppliedLdAtRoot .and. p%BldMotionNodeLoc == BD_MESH_QP) then - ! a second transfer will zero out the forces, and moments, so store them elsewhere - temp_frc = m%LoadsAtRoot%Force(:,1) - temp_mom = m%LoadsAtRoot%Moment(:,1) + ! shorthand to simplify life + associate(RF => m%LoadsAtRoot%Force, RM => m%LoadsAtRoot%Moment) - ! mapping of point loads to LoadsAtRoot - call Transfer_Point_to_Point( m%u2%PointLoad, m%LoadsAtRoot, m%Map_u_PtLoad_to_R, ErrStat2, ErrMsg2 ) + ! mapping of distributed loads to LoadsAtRoot + call Transfer_Line2_to_Point( m%u2%DistrLoad, m%LoadsAtRoot, m%Map_u_DistrLoad_to_R, ErrStat2, ErrMsg2, y%BldMotion, m%u2%RootMotion ) call SetErrStat( ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName ) - ! add the distributed loads - temp_frc = temp_frc + m%LoadsAtRoot%Force(:,1) - temp_mom = temp_mom + m%LoadsAtRoot%Moment(:,1) - ! Global coords - AllOuts( RootAppliedFxg ) = temp_frc(1) - AllOuts( RootAppliedFyg ) = temp_frc(2) - AllOuts( RootAppliedFzg ) = temp_frc(3) - AllOuts( RootAppliedMxg ) = temp_mom(1) - AllOuts( RootAppliedMyg ) = temp_mom(2) - AllOuts( RootAppliedMzg ) = temp_mom(3) + AllOuts( RootAppliedFxg ) = RF(1,1) + AllOuts( RootAppliedFyg ) = RF(2,1) + AllOuts( RootAppliedFzg ) = RF(3,1) + AllOuts( RootAppliedMxg ) = RM(1,1) + AllOuts( RootAppliedMyg ) = RM(2,1) + AllOuts( RootAppliedMzg ) = RM(3,1) ! Root coords - temp_vec = MATMUL(m%u2%RootMotion%Orientation(:,:,1),temp_frc) + temp_vec = MATMUL(m%u2%RootMotion%Orientation(:,:,1),RF(:,1)) AllOuts( RootAppliedFxr ) = temp_vec(1) AllOuts( RootAppliedFyr ) = temp_vec(2) AllOuts( RootAppliedFzr ) = temp_vec(3) - temp_vec = MATMUL(m%u2%RootMotion%Orientation(:,:,1),temp_mom) + temp_vec = MATMUL(m%u2%RootMotion%Orientation(:,:,1),RM(:,1)) AllOuts( RootAppliedMxr ) = temp_vec(1) AllOuts( RootAppliedMyr ) = temp_vec(2) AllOuts( RootAppliedMzr ) = temp_vec(3) - endif - - end if - + end associate + endif END SUBROUTINE Calc_WriteOutput diff --git a/modules/beamdyn/src/BeamDyn_Types.f90 b/modules/beamdyn/src/BeamDyn_Types.f90 index 58e2895b43..81b34982b8 100644 --- a/modules/beamdyn/src/BeamDyn_Types.f90 +++ b/modules/beamdyn/src/BeamDyn_Types.f90 @@ -300,7 +300,6 @@ MODULE BeamDyn_Types TYPE(MeshMapType) :: Map_u_DistrLoad_to_y !< mapping of input loads to output node locations [-] TYPE(MeshMapType) :: Map_y_BldMotion_to_u !< mapping of output motions to input node locations (for load transfer) [-] TYPE(MeshMapType) :: Map_u_DistrLoad_to_R !< mapping of input loads to root location [-] - TYPE(MeshMapType) :: Map_u_PtLoad_to_R !< mapping of input loads to root location [-] INTEGER(IntKi) :: Un_Sum = 0_IntKi !< unit number of summary file [-] TYPE(EqMotionQP) :: qp !< Quadrature point calculation info [-] REAL(R8Ki) , DIMENSION(:,:), ALLOCATABLE :: lin_A !< A (dXdx) matrix used in linearization (before RotState is applied) [-] @@ -2766,9 +2765,6 @@ subroutine BD_CopyMisc(SrcMiscData, DstMiscData, CtrlCode, ErrStat, ErrMsg) call NWTC_Library_CopyMeshMapType(SrcMiscData%Map_u_DistrLoad_to_R, DstMiscData%Map_u_DistrLoad_to_R, CtrlCode, ErrStat2, ErrMsg2) call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) if (ErrStat >= AbortErrLev) return - call NWTC_Library_CopyMeshMapType(SrcMiscData%Map_u_PtLoad_to_R, DstMiscData%Map_u_PtLoad_to_R, CtrlCode, ErrStat2, ErrMsg2) - call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - if (ErrStat >= AbortErrLev) return DstMiscData%Un_Sum = SrcMiscData%Un_Sum call BD_CopyEqMotionQP(SrcMiscData%qp, DstMiscData%qp, CtrlCode, ErrStat2, ErrMsg2) call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) @@ -3162,8 +3158,6 @@ subroutine BD_DestroyMisc(MiscData, ErrStat, ErrMsg) call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) call NWTC_Library_DestroyMeshMapType(MiscData%Map_u_DistrLoad_to_R, ErrStat2, ErrMsg2) call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) - call NWTC_Library_DestroyMeshMapType(MiscData%Map_u_PtLoad_to_R, ErrStat2, ErrMsg2) - call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) call BD_DestroyEqMotionQP(MiscData%qp, ErrStat2, ErrMsg2) call SetErrStat(ErrStat2, ErrMsg2, ErrStat, ErrMsg, RoutineName) if (allocated(MiscData%lin_A)) then @@ -3273,7 +3267,6 @@ subroutine BD_PackMisc(RF, Indata) call NWTC_Library_PackMeshMapType(RF, InData%Map_u_DistrLoad_to_y) call NWTC_Library_PackMeshMapType(RF, InData%Map_y_BldMotion_to_u) call NWTC_Library_PackMeshMapType(RF, InData%Map_u_DistrLoad_to_R) - call NWTC_Library_PackMeshMapType(RF, InData%Map_u_PtLoad_to_R) call RegPack(RF, InData%Un_Sum) call BD_PackEqMotionQP(RF, InData%qp) call RegPackAlloc(RF, InData%lin_A) @@ -3325,7 +3318,6 @@ subroutine BD_UnPackMisc(RF, OutData) call NWTC_Library_UnpackMeshMapType(RF, OutData%Map_u_DistrLoad_to_y) ! Map_u_DistrLoad_to_y call NWTC_Library_UnpackMeshMapType(RF, OutData%Map_y_BldMotion_to_u) ! Map_y_BldMotion_to_u call NWTC_Library_UnpackMeshMapType(RF, OutData%Map_u_DistrLoad_to_R) ! Map_u_DistrLoad_to_R - call NWTC_Library_UnpackMeshMapType(RF, OutData%Map_u_PtLoad_to_R) ! Map_u_PtLoad_to_R call RegUnpack(RF, OutData%Un_Sum); if (RegCheckErr(RF, RoutineName)) return call BD_UnpackEqMotionQP(RF, OutData%qp) ! qp call RegUnpackAlloc(RF, OutData%lin_A); if (RegCheckErr(RF, RoutineName)) return diff --git a/modules/beamdyn/src/Registry_BeamDyn.txt b/modules/beamdyn/src/Registry_BeamDyn.txt index bd90a2a168..1500bd2a20 100644 --- a/modules/beamdyn/src/Registry_BeamDyn.txt +++ b/modules/beamdyn/src/Registry_BeamDyn.txt @@ -335,7 +335,6 @@ typedef ^ MiscVarType MeshType LoadsAtRoot - - - "Applie typedef ^ MiscVarType MeshMapType Map_u_DistrLoad_to_y - - - "mapping of input loads to output node locations" - typedef ^ MiscVarType MeshMapType Map_y_BldMotion_to_u - - - "mapping of output motions to input node locations (for load transfer)" - typedef ^ MiscVarType MeshMapType Map_u_DistrLoad_to_R - - - "mapping of input loads to root location" - -typedef ^ MiscVarType MeshMapType Map_u_PtLoad_to_R - - - "mapping of input loads to root location" - typedef ^ MiscVarType IntKi Un_Sum - - - "unit number of summary file" - typedef ^ MiscVarType EqMotionQP qp - - - "Quadrature point calculation info" - typedef ^ MiscVarType R8Ki lin_A {:}{:} - - "A (dXdx) matrix used in linearization (before RotState is applied)" - From b13fa618c7df8a403b392c2e713981ce5ad2e104 Mon Sep 17 00:00:00 2001 From: andrew-platt Date: Tue, 13 May 2025 18:16:59 -0600 Subject: [PATCH 6/6] OF: correct description of BStC to beamdyn --- modules/openfast-library/src/FAST_Registry.txt | 2 +- modules/openfast-library/src/FAST_Types.f90 | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/modules/openfast-library/src/FAST_Registry.txt b/modules/openfast-library/src/FAST_Registry.txt index 2cbaa53e41..95f2410ecb 100644 --- a/modules/openfast-library/src/FAST_Registry.txt +++ b/modules/openfast-library/src/FAST_Registry.txt @@ -720,7 +720,7 @@ typedef ^ FAST_ModuleMapType MeshMapType TStC_P_2_ED_P_T {:} - - "Map ServoDyn/T typedef ^ FAST_ModuleMapType MeshMapType ED_L_2_BStC_P_B {:}{:} - - "Map ElastoDyn blade line2 mesh to ServoDyn/BStC point mesh" typedef ^ FAST_ModuleMapType MeshMapType BStC_P_2_ED_P_B {:}{:} - - "Map ServoDyn/BStC point mesh to ElastoDyn point load mesh on the blade" typedef ^ FAST_ModuleMapType MeshMapType BD_L_2_BStC_P_B {:}{:} - - "Map BeamDyn blade line2 mesh to ServoDyn/BStC point mesh" -typedef ^ FAST_ModuleMapType MeshMapType BStC_P_2_BD_P_B {:}{:} - - "Map ServoDyn/BStC point mesh to BeamDyn point load mesh on the blade" +typedef ^ FAST_ModuleMapType MeshMapType BStC_P_2_BD_P_B {:}{:} - - "Map ServoDyn/BStC point mesh to BeamDyn distributed load mesh on the blade" # ED/SD <-> SrvD/StC -- Platform TMD typedef ^ FAST_ModuleMapType MeshMapType SStC_P_P_2_SubStructure {:} - - "Map ServoDyn/SStC platform point mesh load to SubDyn/ElastoDyn point load mesh" typedef ^ FAST_ModuleMapType MeshMapType SubStructure_2_SStC_P_P {:} - - "Map SubDyn y3mesh or ED platform mesh motion to ServoDyn/SStC point mesh" diff --git a/modules/openfast-library/src/FAST_Types.f90 b/modules/openfast-library/src/FAST_Types.f90 index 125d2a0643..858f538a4f 100644 --- a/modules/openfast-library/src/FAST_Types.f90 +++ b/modules/openfast-library/src/FAST_Types.f90 @@ -743,7 +743,7 @@ MODULE FAST_Types TYPE(MeshMapType) , DIMENSION(:,:), ALLOCATABLE :: ED_L_2_BStC_P_B !< Map ElastoDyn blade line2 mesh to ServoDyn/BStC point mesh [-] TYPE(MeshMapType) , DIMENSION(:,:), ALLOCATABLE :: BStC_P_2_ED_P_B !< Map ServoDyn/BStC point mesh to ElastoDyn point load mesh on the blade [-] TYPE(MeshMapType) , DIMENSION(:,:), ALLOCATABLE :: BD_L_2_BStC_P_B !< Map BeamDyn blade line2 mesh to ServoDyn/BStC point mesh [-] - TYPE(MeshMapType) , DIMENSION(:,:), ALLOCATABLE :: BStC_P_2_BD_P_B !< Map ServoDyn/BStC point mesh to BeamDyn point load mesh on the blade [-] + TYPE(MeshMapType) , DIMENSION(:,:), ALLOCATABLE :: BStC_P_2_BD_P_B !< Map ServoDyn/BStC point mesh to BeamDyn distributed load mesh on the blade [-] TYPE(MeshMapType) , DIMENSION(:), ALLOCATABLE :: SStC_P_P_2_SubStructure !< Map ServoDyn/SStC platform point mesh load to SubDyn/ElastoDyn point load mesh [-] TYPE(MeshMapType) , DIMENSION(:), ALLOCATABLE :: SubStructure_2_SStC_P_P !< Map SubDyn y3mesh or ED platform mesh motion to ServoDyn/SStC point mesh [-] TYPE(MeshMapType) :: ED_P_2_SrvD_P_P !< Map ElastoDyn/Simplified-ElastoDyn platform point mesh motion to ServoDyn point mesh -- for passing to controller [-]