Как загрузить точки данных для аэродинамического профиля NACA в simflow для запуска моделирования cfd?

У меня есть текстовый файл, заполненный точками, состоящими из координат x, y и z аэродинамического профиля NACA. Я хочу в конечном итоге запустить симуляцию cfd для крыла под разными углами атаки, используя программное обеспечение под названием simflow. Как мне импортировать эти данные в программу, чтобы запустить моделирование?


person A. L    schedule 28.06.2017    source источник


Ответы (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 координаты. Профили двумерные. Этот скрипт будет работать с 3D-данными, но будет создавать только вершины.

person Community    schedule 24.11.2017