Как загрузить точки данных для аэродинамического профиля NACA в simflow для запуска симуляции cfd?
У меня есть текстовый файл, заполненный точками, которые состоят из координат x, y и z профиля NACA. В конечном счете, я хочу запустить симуляцию cfd на крыле под разными углами атаки, используя программное обеспечение, называемое simflow. Как мне импортировать эти данные в программное обеспечение, чтобы я мог запустить симуляцию?
1 ответ
Я предполагаю, что ваши данные разделены и не содержат заголовков, например
1.002 -0.001 -0.002
0.986 0.246 0.234
.
.
1.200 0.897 0.672
Предполагая, что вы работаете в UNIX или UNIX-подобной системе с установленным Python, сохраните следующий фрагмент кода в виде нового файла с именем convert_to_obj.py. Этот скрипт преобразует файл.dat аэродинамического профиля в файл.OBJ, который можно вручную импортировать в SimFlow перед созданием сетки.
#!/usr/bin/env python
'''
Script to convert a NACA airfoil in the Selig format into an OBJ file
which can be read by SimFlow.
'''
# Make sure that your airfoil .dat file has the '.dat' extension!!!!
# Argument parser from the command line
import argparse
parser = argparse.ArgumentParser( description='Script to convert a NACA'
'airfoil in the Selig format into an'
' OBJ file that can be read by SimFlow')
parser.add_argument('files', type=str,
help='Choose files to convert, specify path.'
' Enclose entire path in single-quotes')
args = parser.parse_args()
# Import and convert file
import glob
AllFiles = glob.glob( args.files)
for datfile in AllFiles:
InFileID = open( datfile, 'r')
# If you have header files in the .dat file, specify the number of
# header lines below. (for Selig, numheader = 1)
numheader = 0
for i in range(numheader):
InFileID.readline()
# Slurp all the remaining lines of the .dat file and close it
DataLines = InFileID.readlines()
InFileID.close()
# Open a new file to write to (change extension)
OutFileID = open( datfile[:-4] + '.OBJ', 'w')
# Write the name of the group (in our case, its just 'Airfoil')
OutFileID.write('g Airfoil\n')
for line in DataLines:
OutFileID.write('v ' + line )
OutFileID.close()
# This should create an .OBJ file that can be imported into SimFlow.
Для запуска этого скрипта сделайте (из терминала / командной строки)
$ python convert_to_obj.py './relative/path/to/airfoil.dat'
Или вы можете конвертировать кучу файлов одновременно
$ python convert_to_obj.py './relative/path/to/airfoil*.dat'
Обратите внимание, что приведенный выше скрипт создаст вершины. Я также немного озадачен тем, почему ваш профиль имеет 3 координаты. Профиль крыла двухмерный. Этот скрипт будет работать для трехмерных данных, но будет создавать только вершины.