-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathheadings.py
430 lines (413 loc) · 10.1 KB
/
headings.py
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
#Generating the headers for a BDF file
#Author: Danick Lamoureux
#Project under Frédérick Gosselin and Sébastien Houde's supervision
#Date: 2022-05-05
#All headers are modified from Simcenter's original headers
def headers_hydro(file, P1, nmodes = 10):
"""Headers to use for full hydroelastic analysis. Requires modal and coupled acoustics analysis first
Args:
file: File object obtained with file = open(string, 'w')
P1: AVMI Matrix
nmodes (int, optional): Number of modes used in the vibro-acoustics to aeroelastic transfer. Defaults to 10.
"""
file.write(r"""$*$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$*
$* Aeroelasticity approximation of hydrodynamic damping
$* for Simcenter Nastran version 2020.2
$*
$*
$ EXECUTIVE CONTROL
$*
ID, Aeroelastic analysis, added mass
SOL 145
COMPILE FLUTTER NOLIST NOREF $
$MALTER '$ COUNTER FOR NUMBER OF M/K PAIRS' $
ALTER 1 $""")
for i in range(nmodes):
file.write("\nMATGEN ,/PPP"+str(i+1)+"/1/1 $\n")
file.write("ADD PPP"+str(i+1)+",/PP"+str(i+1)+"/"+str(P1[i,i])+" $")
if i+1>1:
file.write("\nMATGEN ,/ZERO"+str(i)+"/7/"+str(i)+"/1/0 $\n")
file.write("TRNSP ZERO"+str(i)+"/ZEROT"+str(i)+" $\n")
file.write("MATGEN ,/CP"+str(i)+"/6/"+str(i+1)+"/"+str(i)+"/1 $\n")
if i+1==2:
file.write("MERGE PP1,ZEROT1,ZERO1,PP2,CP1,/A1 $")
else:
file.write("MERGE A"+str(i-1)+",ZEROT"+str(i)+",ZERO"+str(i)+",PP"+str(i+1)+",CP"+str(i)+",/A"+str(i)+" $")
file.write("""
EQUIVX A"""+str(nmodes-1)+"""/BETAMAT/ALWAYS $
$Mass matrix scaling
MPYAD MHH,BETAMAT,/MHHX $
MPYAD MHHX,BETAMAT,/MHHNEW $
EQUIVX MHHNEW/MHH/ALWAYS $
$Damping matrix scaling
MPYAD BHH,BETAMAT,/BHHX $
EQUIVX BHHX/BHH/ALWAYS $
ENDALTER
CEND
$*
$ CASE CONTROL
$*
ECHO = NONE
SPC = 100
METHOD = 101
FMETHOD = 200
CMETHOD = 102
OUTPUT
AEROF = ALL
APRESSURE = ALL
DISPLACEMENT(PLOT,REAL) = ALL
EDE(PLOT,AVERAGE,RMAG) = ALL
FORCE(PLOT,REAL,CENTER) = ALL
SPCFORCES(PLOT,REAL) = ALL
STRESS(PLOT,REAL,VONMISES,CENTER) = ALL
$* Step: Subcase - Eigenvalue Method 1
SUBCASE 1
LABEL = Subcase - Eigenvalue Method 1
METHOD = 101
CMETHOD = 102
$*
$* BULK DATA
$*
BEGIN BULK
$*
$* SOLUTION CARDS
$*
$* Modeling Object: Real Eigenvalue - Lanczos1
EIGRL, 101, 10.0000, , """+str(nmodes)+""", 0, 7, , MASS
$* Modeling Object: Complex Eigenvalue - Lanczos
EIGC,102, CLAN, , , , , """+str(nmodes)+"""
$*
$* PARAM CARDS
$*
PARAM K6ROT100.0000
PARAM OIBULK YES
PARAM OMACHPR YES
PARAM POST -2
PARAM POSTEXT YES
PARAM UNITSYS MN-MM
PARAM BAILOUT -1
PARAM, AUTOSPC, NO
$PARAM, EXTOUT, DMIGPCH
$*"""+'\n')
def headers_aero(file):
"""Headers to use for flutter analysis
Args:
file: File object obtained with file = open(string, 'w')
"""
file.write(r"""$*$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$*
$* Aeroelasticity analysis of a hydrofoil
$* for Simcenter Nastran version 2020.2
$*
$*
$ EXECUTIVE CONTROL
$*
ID, Aeroelastic analysis, no added mass
SOL 145
CEND
$*
$* CASE CONTROL
$*
ECHO = NONE
SPC = 100
METHOD = 101
FMETHOD = 200
OUTPUT
AEROF = ALL
APRESSURE = ALL
DISPLACEMENT(PLOT,REAL) = ALL
EDE(PLOT,AVERAGE,RMAG) = ALL
FORCE(PLOT,REAL,CENTER) = ALL
SPCFORCES(PLOT,REAL) = ALL
STRESS(PLOT,REAL,VONMISES,CENTER) = ALL
$* Step: Subcase - Eigenvalue Method 1
SUBCASE 1
LABEL = Subcase - Eigenvalue Method 1
METHOD = 101
$*
$* BULK DATA
$*
BEGIN BULK
$*
$* SOLUTION CARDS
$*
$* Modeling Object: Real Eigenvalue - Lanczos1
EIGRL, 101, 10.0000, 10.0E3, 20, 0, 7, , MASS
$*
$* PARAM CARDS
$*
PARAM K6ROT100.0000
PARAM OIBULK YES
PARAM OMACHPR YES
PARAM POST -2
PARAM POSTEXT YES
PARAM UNITSYS MN-MM
$*"""+'\n')
def headers_acoustics_real(file):
"""Headers to use for uncoupled acoustics analysis (obsolete)
Args:
file: File object obtained with file = open(string, 'w')
"""
file.write(r"""$*$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$*
$* Acoustics analysis of a hydrofoil (uncoupled)
$* for Simcenter Nastran version 2020.2
$*
$*
$ EXECUTIVE CONTROL
$*
ID, Acoustics analysis, no added damping, uncoupled fluid-structure
SOL 103
CEND
$*
$* CASE CONTROL
$*
ECHO = NONE
SPC = 100
MODSEL = ALL
MODSEL(FLUID) = ALL
FLSTCNT ACSYM=NO ACOUT=PEAK ASCOUP=YES PREFDB=0.0 SKINOUT=FREEFACE ,
AGGPCH=YES SFEF70=NO
METHOD(STRUCTURE) = 101
METHOD(FLUID) = 101
OUTPUT
ACVELOCITY(PRINT,REAL) = ALL
BCRESULTS(TRACTION,FORCE,PLOT) = ALL
DISPLACEMENT(PLOT,REAL) = ALL
EDE(PLOT,AVERAGE,RMAG) = ALL
FORCE(PLOT,REAL,CENTER) = ALL
MEFFMASS(PRINT,SUMMARY) = YES
PRESSURE(PLOT,REAL,TOTAL) = ALL
SPCFORCES(PLOT,REAL) = ALL
STRESS(PLOT,REAL,VONMISES,CENTER) = ALL
$* Step: Subcase - Eigenvalue Method 1
SUBCASE 1
LABEL = Subcase - Eigenvalue Method 1
METHOD(STRUCTURE) = 101
METHOD(FLUID) = 101
SPC = 100
OUTPUT
ACVELOCITY(PRINT,REAL) = ALL
BCRESULTS(TRACTION,FORCE,PLOT) = ALL
DISPLACEMENT(PLOT,REAL) = ALL
EDE(PLOT,AVERAGE,RMAG) = ALL
FORCE(PLOT,REAL,CENTER) = ALL
MEFFMASS(PRINT,SUMMARY) = YES
PRESSURE(PLOT,REAL,TOTAL) = ALL
SPCFORCES(PLOT,REAL) = ALL
STRESS(PLOT,REAL,VONMISES,CENTER) = ALL
$*
$* BULK DATA
$*
BEGIN BULK
$*
$* SOLUTION CARDS
$*
TABDMP1 300 G +
+ 0.00000.0000001.000+100.020000 ENDT
$* Modeling Object: Real Eigenvalue - Lanczos
EIGRL, 101, 10.0000, 10.0E3, 20, 0, 7, , MASS
$*
$* PARAM CARDS
$*
PARAM K6ROT100.0000
PARAM OIBULK YES
PARAM OMACHPR YES
PARAM POST -2
PARAM POSTEXT YES
PARAM UNITSYS MN-MM
$*"""+'\n')
def headers_acoustics_complex(file):
"""Headers to use for coupled acoustics analysis
Args:
file: File object obtained with file = open(string, 'w')
"""
file.write(r"""$*$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$*
$* Acoustics analysis of a hydrofoil (coupled)
$* for Simcenter Nastran version 2020.2
$*
$*
$ EXECUTIVE CONTROL
$*
ID, Acoustics analysis, no added damping, coupled fluid-structure
SOL 107
CEND
$*
$* CASE CONTROL
$*
ECHO = NONE
SPC = 100
MODSEL = ALL
MODSEL(FLUID) = ALL
FLSTCNT ACSYM=NO ACOUT=PEAK ASCOUP=YES PREFDB=0.0 SKINOUT=FREEFACE ,
AGGPCH=YES SFEF70=NO
METHOD(STRUCTURE) = 101
METHOD(FLUID) = 101
CMETHOD = 102
OUTPUT
ACVELOCITY(PRINT,REAL) = ALL
BCRESULTS(TRACTION,FORCE,PLOT) = ALL
DISPLACEMENT(PLOT,REAL) = ALL
EDE(PLOT,AVERAGE,RMAG) = ALL
FORCE(PLOT,REAL,CENTER) = ALL
MEFFMASS(PRINT,SUMMARY) = YES
PRESSURE(PLOT,REAL,TOTAL) = ALL
SPCFORCES(PLOT,REAL) = ALL
STRESS(PLOT,REAL,VONMISES,CENTER) = ALL
$* Step: Subcase - Eigenvalue Method 1
SUBCASE 1
LABEL = Subcase - Eigenvalue Method 1
METHOD(STRUCTURE) = 101
METHOD(FLUID) = 101
SPC = 100
OUTPUT
ACVELOCITY(PRINT,REAL) = ALL
BCRESULTS(TRACTION,FORCE,PLOT) = ALL
DISPLACEMENT(PLOT,REAL) = ALL
EDE(PLOT,AVERAGE,RMAG) = ALL
FORCE(PLOT,REAL,CENTER) = ALL
MEFFMASS(PRINT,SUMMARY) = YES
PRESSURE(PLOT,REAL,TOTAL) = ALL
SPCFORCES(PLOT,REAL) = ALL
STRESS(PLOT,REAL,VONMISES,CENTER) = ALL
$*
$* BULK DATA
$*
BEGIN BULK
$*
$* SOLUTION CARDS
$*
TABDMP1 300 G +
+ 0.00000.0000001.000+100.020000 ENDT
$ EIGEN METHODS
$* Modeling Object: Real Eigenvalue - Lanczos
EIGRL, 101, 10.0000, 10.0E3, 50, 0, 7, , MASS
$* Modeling Object: Complex Eigenvalue - Lanczos
EIGC,102, CLAN, , , , , 50
$
$* PARAM CARDS
$*
PARAM K6ROT100.0000
PARAM OIBULK YES
PARAM OMACHPR YES
PARAM POST -2
PARAM POSTEXT YES
PARAM UNITSYS MN-MM
$*"""+'\n')
def headers_modes(file):
"""Headers to use for vacuum modal analysis
Args:
file: File object obtained with file = open(string, 'w')
"""
file.write(r"""
$*$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$*
$* Modal analysis of a hydrofoil
$* for Simcenter Nastran version 2020.2
$*
$*
$ EXECUTIVE CONTROL
$*
ID, modal analysis
SOL 103
CEND
$*
$* CASE CONTROL
$*
ECHO = NONE
SPC = 100
METHOD = 101
OUTPUT
AEROF = ALL
APRESSURE = ALL
DISPLACEMENT(PLOT,REAL) = ALL
EDE(PLOT,AVERAGE,RMAG) = ALL
FORCE(PLOT,REAL,CENTER) = ALL
SPCFORCES(PLOT,REAL) = ALL
STRESS(PLOT,REAL,VONMISES,CENTER) = ALL
$* Step: Subcase - Static Loads 1
SUBCASE 1
LABEL = Subcase - Eigenvalue Method 1
METHOD = 101
OUTPUT
AEROF = ALL
APRESSURE = ALL
DISPLACEMENT(PLOT,REAL) = ALL
EDE(PLOT,AVERAGE,RMAG) = ALL
FORCE(PLOT,REAL,CENTER) = ALL
SPCFORCES(PLOT,REAL) = ALL
STRESS(PLOT,REAL,VONMISES,CENTER) = ALL
$*
$* BULK DATA
$*
BEGIN BULK
$*
$* SOLUTION CARDS
$*
$* Modeling Object: Real Eigenvalue - Lanczos1
EIGRL, 101, 10.0000, 30.0E3, 50, 0, 7, , MASS
$* PARAM CARDS
$*
PARAM K6ROT100.0000
PARAM OIBULK YES
PARAM OMACHPR YES
PARAM POST -2
PARAM POSTEXT YES
PARAM UNITSYS MN-MM
$*"""+"\n")
def headers_bending(file):
"""Used for debugging the structural part of this program
Args:
file: File object obtained with file = open(string, 'w')
"""
file.write(r"""
$*$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
$*
$ Bending analysis of a hydrofoil
$*
$* EXECUTIVE CONTROL
$*
ID, static gravity
SOL 101
CEND
$*
$ CASE CONTROL
$*
ECHO = NONE
SPC = 100
OUTPUT
AEROF = ALL
APRESSURE = ALL
DISPLACEMENT(PLOT,REAL) = ALL
EDE(PLOT,AVERAGE,RMAG) = ALL
FORCE(PLOT,REAL,CENTER) = ALL
SPCFORCES(PLOT,REAL) = ALL
STRESS(PLOT,REAL,VONMISES,CENTER) = ALL
$* Step: Subcase - Static Loads 1
SUBCASE 1
LABEL = Subcase - Static Loads 1
LOAD = 100
$*
$ BULK DATA
$*
BEGIN BULK
$*
$* PARAM CARDS
$*
PARAM K6ROT100.0000
PARAM OIBULK YES
PARAM OMACHPR YES
PARAM POST -2
PARAM POSTEXT YES
PARAM UNITSYS MN-MM
$*"""+"\n")
def footers(file):
"""Finishing the bdf file and closing the file
Args:
file: File object obtained with file = open(string, 'w')
"""
file.write('$*\n')
file.write('$*\nENDDATA')
file.close()