Учебный курс по открытым пакетам М.Крапошин, О. Самоваров, С.Стрижак Задачи МСС Автомобилестроение Нефтегазовая промышленность Энергомашиностроение Гидродинамика судна Климат контроль Гидравлика русла Ядерная энергетика Биомеханика Двигателестроение Космонавтика Свободное Программное Обеспечение для задач МСС Основные этапы и модули при решении задач МСС ОpenFOAM — свободно распространяемое программное обеспечение для проведения численных расчетов. OpenFOAM — объектно-ориентированная платформа, реализованная на языке программирования С++. ОpenFOAM – перспективное и динамично развивающиеся открытое программное обеспечение для моделирования задач механики сплошных сред. В его разработке и развитии принимают участие десятки организаций и сотни разработчиков по всему миру. OpenFOAM – обладает большой функциональностью и удовлетворяет всем основным требованиями, предъявляемым к современному программному обеспечению для расчета промышленных задач Разработан в Imperial College of Science. London. UK. 1991-2003 Открытие кода OpenFOAM в 2004 г. на условиях GPL Входит в состав CAE Linux Форум на www.cfd-online.com Всего около 3000 пользователей в мире. Основные возможности пакета OpenFoam • Mетод контрольного объема на базе многогранных ячеек c поддержкой подвижных сеток; • URANS/LES/DNS моделирование; * SIMPLE/PISO/PIMPLE алгоритмы для связи уравнений скорости и давления; * Несжимаемые/сжимаемые и стационарные/нестационарные потоки ; * Однофазные, двухфазные и многофазные потоки; * Лагранжева модель для расчета движения частиц; * Модели турбулентности: k-e, k-w, k-w SST, SA, LES, DES. Всего 15 моделей; * Модели теплообмена, испарения, горения, распыливания топлива; • Различные термо-физические свойства среды, учет реальных свойств газов; • Сопряженные задачи (жидкость – тело); • Решение уравнений движения тела с 6 степенями свободы; • Решение задач динамики разряженного газа; * Многоблочная сетка и декомпозиция расчетной области (Metis, Scotch); * Параллельная версия (до 2000 ядер), поддержка версий MPI. ; * Поддержка структурированной/неструктурированной сетки; * Импорт сеток из различных коммерческих и открытых пакетов. OpenFoam. История. • Предшественник текущей системы – Коммерческий код FOAM. Продавался в UK компанией Nabla Ltd • Разработчиком указанного пакета являются ученики профессора Imperial College, London А. Госмена: H. Weller и H. Jasak • • • • • • • • • • • • • • • • Литература: - Госмен А.М. и др. Численные методы исследования течений вязкой жидкости. М.: Мир., 1972, 323 с. - Weller, H.G.; Tabor G.; Jasak, H. and Fureby, C.: A Tensorial Approach to CFD using Object Orientated Techniques, Computers in Physics, 1998 v. 12 n. 6, pp 620 – 631 - Ferziger J.H., Peric M., Computational Methods for Fluid Dynamics. Springer-Verlag, Berlin et al.: Springer, 2002. – 423p Дальнейшая разработка компанией OpenCFD, UK http://www.openfoam.com Компания OpenCFD. Ltd. UK проводит консалтинг и обучение по всему миру Альтернативная версия “extend”. Разрабатывается научным сообществом. Конференции пользователей: 1 конференция - Загреб 2006 4 конференция – Монреаль 2009 2 конференция - Загреб 2007 5 конференция– Гетеборг 2010 3 конференция - Милан 2008 6 конференция – Penn State University 2011 Летняя школа для аспирантов в Загребе 2008,2009,2010. Подготовлено около 20 диссертаций. Выполняются магистерские работы. Open Source Conferences при участии OpenCFD, Ltd - 2007,2008, 2009, 2010 Различные версии OpenFoam • OpenFoam-1.7 www.openfoam.org. Разработчик OpenCFD Ltd. • OpeFoam-1.7.x – исправленная версия с патчами. www.openfoam.org. Разработчик OpenCFD Ltd. • http://Git – git.or.cz • OpenFOAM-1.6-dev. Расширенная версия, разрабатывается H.Jasak. http://openfoam-extend.svn.sourceforge.net/ • OpenFOAM-1.6-extend. Разрабатывается пользователями. http://openfoam-extend.svn.sourceforge.net/ OpenFOAM (Field Operation and Manipulation) Открытое «ядро» и доступность кода • Установка на LINUX (RHEL,SUSE,OpenSuse, Dеbian, Ubuntu, CentOS, CAELinux) • • • Использование возможностей объектно-ориентированного программирования на C++; В программном коде используется базовая единица: класс. Основные исследуемые объекты: расчетная область, преобразования в тензорной и линейной алгебре, решатели, математические операции для УРЧП (дискретизация, дифференцирование, интегрирование, интерполяция); Представление уравнений МСС с помощью естественного языка программирования; Решение уравнений эллиптического, параболического, гиперболического типа; Разбиение кода на небольшие самостоятельные единицы; Совместимость с доступными открытыми кодами и компиляторами (gcc,python); Возможность разработки собственных модулей (граничные условия, библиотеки модели среды, решатели, утилиты). Около 1 миллиона строк исходного кода • • • • • • Инсталляция OpenFoam $cd OpenFOAM/ $tar xzf OpenFOAM-1.6.General.gtgz $tar xzf OpenFOAM-1.6.linux64GccDPOpt.gtgz $tar xzf ThirdParty-1.6.General.gtgz $tar xzf ThirdParty-1.6.linux64Gcc.gtgz Настройка окружения: [user1@WorkStation ~]$ cat .bashrc # .bashrc # Source global definitions if [ -f /etc/bashrc ]; then . /etc/bashrcfi # User specific aliases and functions export FOAM_INST_DIR=/home/user1/OpenFOAM foamDotFile=$FOAM_INST_DIR/OpenFOAM-1.6/etc/bashrc if [ -f $foamDotFile ]; then . $foamDotFile fi Инсталляция OpenFoam [cfd1@master ~]$ foamInstallationTest Executing /home/cfd1/OpenFOAM/OpenFOAM-1.6/bin/foamInstallationTest: Checking basic setup... ------------------------------------------------------------------------------Shell: bash Host: master.bmstu.ru OS: Linux version 2.6.18-92.el5xen ------------------------------------------------------------------------------Checking main OpenFOAM env variables... ------------------------------------------------------------------------------Environment_variable Set_to_file_or_directory Valid Crit ------------------------------------------------------------------------------$WM_PROJECT_INST_DIR /home/cfd1/OpenFOAM yes yes $WM_PROJECT_USER_DIR /home/cfd1/OpenFOAM/cfd1-1.6 no no $WM_THIRD_PARTY_DIR /home/cfd1/OpenFOAM/ThirdParty-1.6 yes yes ------------------------------------------------------------------------------Checking the OpenFOAM env variables set on the PATH... ------------------------------------------------------------------------------Environment_variable Set_to_file_or_directory Valid Path Crit ------------------------------------------------------------------------------$WM_PROJECT_DIR /home/cfd1/OpenFOAM/OpenFOAM-1.6 yes yes yes $FOAM_APPBIN ...1.6/applications/bin/linux64GccDPOpt yes yes yes $FOAM_SITE_APPBIN ...penFOAM/site/1.6/bin/linux64GccDPOpt no no $FOAM_USER_APPBIN ...1.6/applications/bin/linux64GccDPOpt no no $WM_DIR /home/cfd1/OpenFOAM/OpenFOAM-1.6/wmake yes yes yes ------------------------------------------------------------------------------- Структура OpenFOAM * * * * * * * * applications: исходные и исполняемые файлы - Solvers - Utilities - Bin - Test bin: базовые исполняемые скрипты doc: pdf и Doxygen файлы - Doxygen - Guides-a4 lib: откомпилированные библиотеки src – исходные файлы test – тестовые файлы tutorials – примеры Wmakes – утилиты для компиляции Некоторые стандартные решатели в OpenFOAM 1) boundaryFoam – 1D решатель для создания пограничного слоя 2) icoFoam – решатель для несжимаемого, ламинарного потока 3) laplacianFoam – решение уравнение Лапласа 4) rhoCentralFoam - решатель для невязкого сжимаемого потока centralupwind schemes of Kurganov and Tadmor 5) simpleFoam - решатель для стационарного несжимаемого, турбулентного потока. Алгоритм SIMPLE. 6) pisoFoam – решатель для нестационарного несжимаемого турбулентного потока. Алгоритм PISO. 7) sonicFoam - решатель для нестационарного сжимаемого турбулентного потока. 8) buoyantSimpleFoam – решатель для моделирования конвективных потоков 9) fireFoam – решатель для моделирования турбулентного пламени 10) dsmcFoam DSMC= Direct Simulation Monte-Carlo – решатель для моделирования динамики разряженного газа 11) channelFoam – LES solver for channel only 12) dnsFoam – прямое численное моделирование изотропной турбулентности Некоторые стандартные решатели в OpenFOAM 13) pimpleFoam - Large time-step transient solver for incompressible, flow using the PIMPLE (merged PISO-SIMPLE) algorithm 14) pimpleDymFoam - Transient solver for incompressible, flow of Newtonian fluids on a moving mesh using the PIMPLE (merged PISO-SIMPLE) algorithm 15) nonNewtonianicoFoam – icoFaom для неньютоновсих жидкостей 16) MRFsimpleFOAM – решатель для вращающихся сеток 17) rhopisoFoam – Transient PISO solver for compressible, laminar or turbulent flow 18) rhopimpleFoam - Transient solver for laminar or turbulent flow of c ompressible fluids for HVAC and similar applications 19) rhosimpleFoam - Steady-state SIMPLE solver for laminar or turbulent RANS flow of compressible fluids 20) rhoSonicFoam - Density-based compressible flow solver 21) sonicDymSonic - Transient solver for trans-sonic/supersonic, laminar or turbulent flow of a compressible gas with mesh motion 23) rhoPoroussimpleFoam - Steady-state solver for turbulent flow of compressible fluids with RANS turbulence modelling, and implicit or explicit porosity treatment 24) rhoReactingFoam - Density-based thermodynamics variant of the reactingFoam solver Схемы дискретизации в OpenFOAM • Дискретизация конвективных членов: Центральные схемы: - Linear – central differencing (CD) ( Second order, unbounded ) Midpoint Схемы по потоку: Upwind differencing (UD) ( First order, bounded ) LinearUpwind skewLinear QUICK ( First/second order, bounded ) • Схемы дискретизации по времени: - Эйлера ( 1и 2 порядок); Кранка-Никольсона (2 порядок); Обратная (backward); Ограниченная обратная Схемы дискретизации диффузионных членов: Схемы минимизации полной вариации - TVD: - LimitedLinear vanLear MUSCL limitedCubic Схемы нормализации переменных (NVD – normalized variable diagram) SFCD (self-filtered central differencing ) ( Second order, bounded ) - Gamma & GammaV (Схемы H.Jasak) ( First/second order, bounded ) - Gauss linear – 2 порядок Gauss limited linear leastSquares Fourth – 4 порядок Более 50 различных комбинаций расчетных схем Схемы дискретизации для неструктурированных сеток - Центральная схема. Второй порядок точности, но дает осцилляции - Схемы высокого порядка, учитывающие транспортные свойства течения Информация поступает из области вверх по потоку. Отсутствие осцилляций. Но могут быть привнесены неточности расчета. - Существует большое количество точных схем: TVD, NVD семейство. Схема Gamma f f CD 1 f UD egamma 0 1 Решатели СЛАУ Для симметричных матриц: - метод сопряженных градиентов с предобуславливанием типа неполной факторизации; - ICCG (метод неполного разложения Холецкого); - метод сопряженных градиентов с диагональным предобуславливанием – DCG. - алгебраический многосеточный метод – GAMG (для p). Для несимметричных матриц: - метод био-сопряженных градиентов с предобуславливанием - ICCG (метод неполного разложения Холецкого); - метод Гаусса-Зейделя. Описание метода сопряжённых градиентов Постановка задачи Будем строить следующий вычислительный алгоритм МСГ: r 0 f Ax0 Решение систем линейных алгебраических уравнений – классическая задача вычислительных методов. Особый интерес представляют матрицы разреженного вида, которые получаются в результате конечноразностной,конечно-элементной или конечнообъемной аппроксимации. Такие матрицы приходится хранить в каком-то особом формате, так как даже при аппроксимации небольших задач размерность матрицы системы становится непосильной задачей для современных параллельных компьютеров. В рамках работы остановимся на решении СЛАУ итерационными методами, где основной операцией является умножение матрицы на вектор. В качестве метода решения рассмотрим метод сопряжённых градиентов с диагональным предобуславливанием для ускорения сходимости системы уравнений. В качестве аппроксимации будем рассматривать метод конечных объемов. z 0 d 1r 0 Далее для k=1,2,… производятся следующие вычисления: d r Az 1 k 1 k k 1 , r k 1 , z k 1 x k x k 1 k z k 1 r k r k 1 k Az k 1 k d d r , rk 1 k 1 k 1 r , r k 1 z k d 1r k k z k 1 Выход из итерационного процесса будем осуществлять по достижении большого количества итераций или по достижению малости относительной невязки: r f Основные утилиты • • • • • • • • • • • • • • • • • • • foamInstallationTest – проверка инсталляции OF checkMesh -allTopology –all Geometry – проверка сетки mirrorMesh – построение зеркальной сетки makeAxialMesh -axis ... -wedge ... foamLog log – скрипт, использующий grep, awk , sed, для извлечения данных из log файла. foamJob <solver> - утилита для контроля заданий yPlusRAS/yPlusLES – определение значения yPlus для RANS/ LES foamCalc – расчет различных параметров поля Mach – расчет локального числа Маха в каждый момент времени streamFunction – расcчитывает линии тока по значениям U particleTracks - generate particle tracks for lagrangian calculations. decomposePar – декомпозиция расчетной области reconstructPar – объединение расчетных областей fluentMeshToFoam, fluent3DMeshToFoam – трансляция сетки из формата Fluent Sample – построение графиков Gnuplot – построение графиков с помощью доп. утилиты Linux foamToVTK – подготовка файлов для обработки в Paraview в формате VTK pyFoam – построение графиков во время счета. Утилита написана на Python. polyDualMesh – утилита для построения сеток на базе многогранников Примеры граничных условий Название ГУ Описание Граничные условия, дочерние (derived) по отношению к смешанному fixedValue ГУ 1-го рода. Необходимо задать фиксированное значение на входе. Условие Дирихле. fixedGradient ГУ 2-го рода. Необходимо задать градиент величины на границе. zeroGradient ГУ 2-го рода. Нулевой градиент на границе. Условие Неймана. inletOutlet действует как ГУ 1-ого рода, если массовый (объемный) поток входит в расчетную область и как ГУ 2-ого рода, если поток выходит из расчетной области. Иными словами, zeroGradient если жидкость выходит из расчетной области и фиксированное значение (inletValue) если входит outletInlet обратно inletOutlet Иными словами, zeroGradient если жидкость входит в расчетную область и фиксированное значение (outletValue) если выходит из нее Mixed, symmentry plane, periodic and cyclic Смешанное условие, условие симметрии, переодическое и циклическое условие freestream, frestreamPressure Условие свободного потока Примеры граничных условий Название ГУ Описание Граничные условия, дочерние (derived) по отношению к смешанному rotation ГУ 1-го рода. Необходимо задать значение вращения, данные вокруг оси. Условие Дирихле. profile1DfixedValue ГУ 1-го рода. Необходимо задать файл с данными. Можно использовать для закрутки. activeBaffleVelocity Combines cyclic and wall patches so that the flow throught the patch can be controlled buoyantPressureFvPatch ScalarField New Buoyancy pressure boundary condition now supports =pd= to =p= uniformDensityHydrostatic Pressure Boundary condition for pressure to aid the transition from = pd= to =p= jumpCyclic Cyclic condition with an additional jum in value fan Specialisation of jumpCyclic, applying prescibed jump in pressure to simulate a fan within a mesh Turbulent flow inlet Mixing length and frequency Модели турбулентности для несжимаемых течений 1) kEpsilon Standard high- model 2) kOmega Standard high- model -SST model 3) kOmegaSST 4) RNGkEpsilon RNG 5) NonlinearKEShih Non-linear Shih 6) LienCubicKE Lien cubic 7) qZeta model model model model 8) LaunderSharmaKE Launder-Sharma low- model 9) LamBremhorstKE Lam-Bremhorst low- 10) LienCubicKELowRe Lien cubic low- 11)LienLeschzinerLowRe Lien-Leschziner low- 12) LRR Launder-Reece-Rodi RSTM model model model 13) LaunderGibsonRSTM Launder-Gibson RSTM with wall-reflection terms 14) realizableKE Realizable model 15) SpalartAllmaras Spalart-Allmaras 1-eqn mixing-length model Модели пристеночных функций Для различных величин: – – – – – – nut: nutWallFunction, mut: muWallFunction, epsilon: epsilonWallFunction, omega: omegaWallFunction, k, q, R: kqRWallFunction. nut – nutSpalartAllmarasWallFunction. Для температуры: – alphat: alphatWallFunction. Модели турбулентности для LES 1) Smagorinsky Smagorinsky model 2) Smagorinsky2 Smagorinsky model with 3-D filter 3) dynSmagorinsky Dynamic Smagorinsky 4) scaleSimilarity Scale similarity model 5) mixedSmagorinsky Mixed Smagorinsky/scale similarity model 6) dynMixedSmagorinsky Dynamic mixed Smagorinsky/scale similarity model 7) kOmegaSST 8) oneEqEddy -SST scale adaptive simulation (SAS) model -equation eddy-viscosity model 9) dynOneEqEddy Dynamic -equation eddy-viscosity model 10) locDynOneEqEddy Localised dynamic 11) spectEddyVisc Spectral eddy viscosity model 12) LRDDiffStress LRR differential stress model 13) DeardorffDiffStress Deardorff differential stress model 14) SpalartAllmaras Spalart-Allmaras model 15) SpalartAllmarasDDES Spalart-Allmaras delayed detached eddy simulation (DDES) model 16) SpalartAllmarasIDDES Spalart-Allmaras improved DDES (IDDES) model -equation eddy-viscosity model LES параметры LES deltas PrandtlDelta Prandtl delta cubeRootVol Delta Cube root of cell volume delta smoothDelta Smoothing of delta LES filters laplaceFilter Laplace filters simpleFilter Simple filter anisotropicFilter Anisotropic filter Различные граничные условия для входа потока: Random fluctuations Литература. Волков К.Н., Емельянов В.Н.. Моделирование крупных вихрей в расчетах турбулентных течений. – М.: Физматлит. 2008. – 368 с. RAS turbulence models for compressible fluids • • • • • • • • • laminar Dummy turbulence model for laminar flow kEpsilon Standard model kOmegaSST model RNGkEpsilon RNG model LaunderSharmaKE Launder-Sharma low- model LRR Launder-Reece-Rodi RSTM LaunderGibsonRSTM Launder-Gibson RSTM realizableKE Realizable model SpalartAllmaras Spalart-Allmaras 1-eqn mixing-length model Размерность физических величин No. Характеристика Единица измерения Символ 1 Масса килограмм Кг 2 Длина Метр М 3 Время секунда С 4 Температура Кельвин К 5 Количество вещества моль Моль 6 Ток Ампер A 7 Сила света кандела Кд Утилиты для работкой с сеткой blockMesh - A multi-block mesh generator extrude2DMesh - Takes 2D mesh (all faces 2 points only, no front and back faces) and creates a 3D mesh by extruding with specified thickness Extrude Mesh - Extrude mesh from existing patch (by default outwards facing normals; optional flips faces) or from patch read from file snappyHex Mesh - Automatic split hex mesher. Refines and snaps to surface Трансляторы результатов расчета foamDataToFluent Translates OPENFOAM®data to Fluent format foamToEnsight Translates OPENFOAM®data to EnSight format foamToEnsightParts Translates OPENFOAM®data to Ensight format. An Ensight part is created for each cellZone and patch foamToFieldview9 Write out the OPENFOAM®mesh in Version 3.0 Fieldview-UNS format (binary) foamToGMV Translates foam output to GMV readable files foamToVTK Legacy VTK file format writer foamToTecplot Translates OPENFOAM®data to Tecplot format Пример структуры директории задачи Основные уравнения • Основные уравнения: законы сохранения массы, импульса, скаляров и объема в интегральной форме (справедливы для любой сплошной среды – различаются только замыкающие законы): Метод контрольного объема в OpenFOAM Метод конечных объемов, I • Метод конечных объемов (FVM) используется для аппроксимации законов сохранения • Вычислительная область разбивается на конечное число непересекающихся контрольных объемов произвольной многогранной формы • Структура данных: – Вершины – Ребра (соединяют вершины) – Грани (замкнутый многоугольник из ребер) – Ячейки (объемы ограниченные гранями) Метод конечных объемов, II • В методе конечных объемов используется три уровня аппроксимации: – Аппроксимация интегралов по поверхности, объему и времени – Интерполяция в точках, отличных от расчетных (центры ячеек) – Численное дифференцирование (аппроксимация градиентов) • Простейшие аппроксимации второго порядка точности (применимые для контрольного объема произвольной формы): – Метод средней точки для интегралов (Midpoint rule), – Линейная интерполяция, – Центральные разности (линейные функции формы). Метод решения • Конвективные потоки требуют линеаризации: • Отложенная коррекция (“deferred correction”) используется для упрощения применения схем высокого порядка, для неортогональных сеток и т.д. • Градиенты аппроксимируются с помощью формулы ГауссаОстроградского или с помощью полиномов Метод решения • Для каждой ячейки получается одно алгебраическое уравнение, связывающее значение переменной в центре ячейки с переменными в соседних ячейках • Для всей вычислительной области получается система линейных уравнений • Используется связанный (“coupled”; все переменные образуют один вектор неизвестных) или последовательный (“segregated”; уравнения для каждой переменной решаются по очереди) метод решения • В последовательном методе решения для связи скорости, давления и плотности используются алгоритмы PISO или SIMPLE • Системы линейных уравнений решаются либо методом сопряженных градиентов, либо алгебраическим многосеточным методом МКО. Многогранники МКО. Основы метода. Расчетная ячейка • Объем ячейки – Vp • Узел P располагается в центре ячейки xp • Для каждой ячейки существует ячейка-сосед, граничащая с каждой стороной. Соседняя ячейка – N • Центр стороны – f. Используется теорема о среднем • Вектор к стороне f определяется как Df=PN • Поверхностный вектор Sf равен величине площади стороны • Sf рассчитывается с помощью интеграла • Центр ячейки (узел P) должен находится внутри ячейки • Объем ячейки и площадь стороны рассчитываются путем декомпозиции на пирамиды и треугольники • Типы сторон в сетке: внутренние и граничные • Дискретизация базируется на интегральной форме транспортного уравнения для каждой ячейки Литература. Патанкар С. Численные методы решения задач теплообмена и динамики жидкости. М., Энергоатомиздат, 1984, 152 с. МКО. Основы метода. • • • • • • • Операции с поверхностными и векторными интегралы Выбор P и f обеспечивает второй порядок точности Дискретизация второго порядка для переменной Ф по пространству Дискретизация второго порядка для переменной Ф по времени Наличие специальной функции для FVM “shape function” Поддержка многогранных ячеек Нет спецификации на тип ячеек (тетраэдры, призмы, пятигранники и т.д. ) • Использование теоремы Гаусса для аппроксимации объемных интегралов над дивергенцией и градиент операторами. • Дискретизация производной по времени, конвективного члена, оператора градиент, диффузионного члена, источникового члена Литература Ferziger J.H., Peric M., Computational Methods for Fluid Dynamics. Springer-Verlag, Berlin et al.: Springer, 2002. – 423p Основы МКО • Как структура сетки влияет на алгоритм? • Фf зависит от значений в узлах P, N. Расчет поверхностного интеграла? • Структурированная сетка: Восток, Запад, Север, Юг. Нумерация индексов: n+1, n-1, n+colDim, ncolDim • Блочно-структурированная и адаптивная сетки : 2 опции • Сетка на базе тетраэдров: для каждого тетраэдра сохранить 4 индекса соседних ячеек для 4 сторон в нужном порядке • Неструктурированная сетка: забыть о блоках, для каждой ячейки хранить индексы соседних ячеек • Смешанная сетка: тетраэдры имеют только 4 соседа, “кирпич” имеет шесть. 2 опции. • Сетка на базе многогранников: МКО. Основы метода. • Процедура интерполяции для получения значения Фf для конвективного слагаемого • Фf зависит от двух узлов: P и N. Решение в узле P зависит от N, и наоборот. Мы получаем матрицу с недиогональными коэффициентами • Центральная схема. Второй порядок точности, но осцилляции • Схемы высокого порядка, учитывающие транспортные свойства течения. Информация поступает из области вверх по потоку. Отсутствие осцилляций. Но могут быть привнесены неточности расчета • Существует большое количество точных схем: TVD, NVD семейство. Реализация слагаемых для ДУ Различные операторы Основные классы в OpenFoam • • • • • • • • • • Классы для тензорного исчисления : scalarField, vectorField, tensorField. Класс – space & time Классы для геометрических тензорных полей: volScalarField, volVectorField, volTensorField. Класс tensor-derivative: finiteVolumeCalculus (fvc) - дифференцирование, finiteVolumeMethod (fvm)- дискретизация. Классы для дифференциальных уравнений: fvMatrixScalar, fvMatrixVector Класс для геометрических полей: fvMesh – поддерживает FVM дискретизацию, polyMesh – многогранные сетки (комбинация всех точек, сторон, ячеек, граничных сторон); dynamicFvMesh , dynamicMotionSolverFvMesh - динамические сетки; Класс для граничных условий: patchField Класс для матриц: lduMatrix Пример класса на C++ class name { public: declaration of public member functions and member data private: declaration of hidden member functions and member data }; public признаки видимы снаружи класса private признаки видимы внутри класса Пример класса на C++ в OF class vector { // Private Data // Components double V[3]; public: //component labeling enumeration enum components {X, Y,Z}; // Constructors //Construct null vector () {} // Construct given three scalars vector (const double & Vx, const double& Vy, const double & Vz) { V[X]=Vx ; V[Y]=Vy ; V[Z]=Vz ; } //Destructor ~vector []; Тестовые примеры в OpenFOAM. Обратный уступ. LES model. 1 equation. Р.В. Питц, Дж.У. Дейли. Горение в турбулентном слое смешения за уступом. Аэрокосмическая техника. 1984. N7. с.74-82 Пример pitzDailyParallel [cfd1@master simpleFoam]$ cd pitzDailyParallel/ [cfd1@master pitzDailyParallel]$ ll total 12 drwxr-xr-x 2 cfd1 sm3 4096 Dec 22 16:43 0 drwxr-xr-x 3 cfd1 sm3 4096 Dec 22 16:43 constant drwxr-xr-x 2 cfd1 sm3 4096 Dec 22 16:48 system [cfd1@master pitzDailyParallel]$ [cfd1@master pitzDailyParallel]$ cd system/ [cfd1@master system]$ ll total 16 -rw-r----- 1 cfd1 sm3 1222 Dec 22 16:43 controlDict -rw-r----- 1 cfd1 sm3 1206 Dec 22 16:48 decomposeParDict -rw-r----- 1 cfd1 sm3 1877 Dec 22 16:43 fvSchemes -rw-r----- 1 cfd1 sm3 1940 Dec 22 16:43 fvSolution Подготовка задачи. Требует времени! [cfd1@master system]$ more controlDict /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | \\ / O peration | Version: 1.6 | | \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile { version 2.0; format ascii; class dictionary; location "system"; object controlDict; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // application icoFoam; startFrom startTime; startTime 0; stopAt endTime; endTime 5; deltaT 0.005; writeControl timeStep; writeInterval 100; purgeWrite 0; writeFormat ascii; writePrecision 6; writeCompression uncompressed; timeFormat general; timePrecision 6; runTimeModifiable yes; | Файл fvSolutions. Выбор решателей для СЛАУ. |\*---------------------------------------------------------------------------*/ FoamFile{ version 2.0; format ascii; class dictionary; location "system"; object fvSolution;} // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // Solvers p { solver PCG; preconditioner DIC; tolerance 1e-06; relTol 0.01; } U { solver PBiCG; preconditioner DILU; tolerance 1e-05; relTol 0.1; } k { solver PBiCG; preconditioner DILU; tolerance 1e-05; relTol 0.1; } Файл fvSchemes. Определение схем дискретизации. ddtSchemes { default steadyState;} gradSchemes { default Gauss linear; grad(p) Gauss linear; grad(U) Gauss linear;} divSchemes { default none; div(phi,U) Gauss upwind; div(phi,k) Gauss upwind; div(phi,epsilon) Gauss upwind; div(phi,R) Gauss upwind; div(R) Gauss linear; div(phi,nuTilda) Gauss upwind; div((nuEff*dev(grad(U).T()))) Gauss linear;} laplacianSchemes { default none; laplacian(nuEff,U) Gauss linear corrected; laplacian((1|A(U)),p) Gauss linear corrected; laplacian(DkEff,k) Gauss linear corrected; laplacian(DepsilonEff,epsilon) Gauss linear corrected; laplacian(DREff,R) Gauss linear corrected; laplacian(DnuTildaEff,nuTilda) Gauss linear corrected;} interpolationSchemes { default linear; snGradSchemes { fluxRequired { interpolate(U) linear;} default default corrected;} no; p ;} [user1@SM3 forwardStep]$ foamLog log Using: log : log database : /home/user1/OpenFOAM/OpenFOAM-1.6/bin/foamLog.db awk file : ./logs/foamLog.awk files to : ./logsExecuting: awk -f ./logs/foamLog.awk log Generated XY files for: executionTime Rho rhoE rhoE FinalRes rhoEIters rhoFinalResrhoIters rhoUx rhoUx FinalRes rhoUx Iters rhoUy rhoUy FinalRes rhoUy ItersSeparator Time Утилита checkMesh Create time Create polyMesh for time = 0 Time = 0 Mesh stats points: 62054 faces: 672802 internal faces: 649206 cells: 330502 boundary patches: 3 point zones: 0 face zones: 1 cell zones: 1 Overall number of cells of each type: hexahedra: 0 prisms: 0 wedges: 0 pyramids: 0 tet wedges: 0 tetrahedra: 330502 polyhedra: 0 Checking topology... Boundary definition OK. Point usage OK. Upper triangular ordering OK. Face vertices OK. Number of regions: 1 (OK). Утилита checkMesh Checking patch topology for multiply connected surfaces ... Patch Faces Points Surface topology inlet 412 232 ok (non-closed singly connected) outlet 5736 2894 ok (non-closed singly connected) SOL 17448 8726 ok (closed singly connected) Checking geometry... Overall domain bounding box (-2 -0.679981 -0.679997) (2 0.68 0.68) Mesh (non-empty, non-wedge) directions (1 1 1) Mesh (non-empty) directions (1 1 1) Boundary openness (-2.18538e-19 4.49199e-19 -2.47128e-19) OK. Max cell openness = 1.65939e-16 OK. Max aspect ratio = 11.0456 OK. Minumum face area = 1.26182e-07. Maximum face area = 0.00694694. Face area magnitudes OK. Min volume = 5.42529e-11. Max volume = 0.000201659. Total volume = 5.79848. Cell volumes OK. Mesh non-orthogonality Max: 61.0149 average: 13.3286 Non-orthogonality check OK. Face pyramids OK. Max skewness = 0.913121 OK. Mesh OK. End Невязки Time = 0.2 Courant Number mean: 0.100721 max: 13.8157 DILUPBiCG: Solving for Ux, Initial residual = 2.46858e-06, Final residual = 2.46858e-06, No Iterations 0 DILUPBiCG: Solving for Uy, Initial residual = 0.000207349, Final residual = 1.28247e-05, No Iterations 1 DILUPBiCG: Solving for Uz, Initial residual = 0.000175251, Final residual = 1.0187e-05, No Iterations 1 DICPCG: Solving for p, Initial residual = 0.00113702, Final residual = 1.11777e-05, No Iterations 25time step continuity errors : sum local = 8.16859e-09, global = -2.35699e-11, cumulative = 1.34233e-06 DICPCG: Solving for p, Initial residual = 0.000384734, Final residual = 9.696e-07, No Iterations 56time step continuity errors : sum local = 7.08705e-10, global = -5.94421e-11, cumulative = 1.34227e-06 DILUPBiCG: Solving for omega, Initial residual = 9.80641e-06, Final residual = 9.80641e-06, No Iterations 0 DILUPBiCG: Solving for k, Initial residual = 2.54185e-05, Final residual = 6.81117e-07, No Iterations 1 bounding k, min: -3.21164 max: 256.226 average: 5.59675 ExecutionTime = 11256.6 s ClockTime = 11294 sEnd Gnuplot. Скрипты. set logscale y set title "Residuals“ set ylabel 'Residual‘ set xlabel 'Iteration‘ plot "< cat log | grep 'Solving for Ux' | cut -d' ' -f9 | tr -d ','" title 'Ux' with lines,\ "< cat log | grep 'Solving for Uy' | cut -d' ' -f9 | tr -d ','" title 'Uy' with lines,\ "< cat log | grep 'Solving for Uz' | cut -d' ' -f9 | tr -d ','" title 'Uz' with lines,\ "< cat log | grep 'Solving for omega' | cut -d' ' -f9 | tr -d ','" title 'omega' with lines,\ "< cat log | grep 'Solving for k' | cut -d' ' -f9 | tr -d ','" title 'k' with lines,\ "< cat log | grep 'Solving for p' | cut -d' ' -f9 | tr -d ','" title 'p' with lines pause 1 reread set yr [0:1] set xr [0:0.01] set key bottom right set xlabel "Simulationtime [s]“ set ylabel "forceCoeff [-]“ set title "Plot of forceCoeffs over simulationtime“ set gridplot "./forceCoeffs/0.0005/forceCoeffs. dat" using ($1):($3) with lines title "lift_coeff",\ "./forceCoeffs/0.0005/forceCoeffs. dat" using ($1):($2) with lines title "drag_coeff“ pause 1 reread Построение графиков с помощью gnuplot Расчет выполнен с pisoFoam, SA модель турбулентности Невязки для Ux,Uy,Uz, p, nuTilda Утилита ‘yPlusRAS’ Time = 0.2 Reading field U Reading/calculating face flux field phi Selecting incompressible transport model Newtonian Selecting RAS turbulence model kOmegaSST kOmegaSSTCoeffs { alphaK1 0.85034; alphaK2 1; alphaOmega1 0.5; alphaOmega2 0.85616; gamma1 0.5532; gamma2 0.4403; beta1 0.075; beta2 0.0828; betaStar 0.09; a1 0.31; c1 10; } Patch 2 named SOL y+ : min: 0.282185 max: 200.545 average: 19.758 Writing yPlus to field yPlus End Запуск задач pitzDaily счет в параллельном режиме - Копирование примера и файла $cp –r pitzDaily $FOAM_RUN/pitzDailyParallel $cp pitzDailyExptInlet/system/decomposePartDict pitzDailyParallel/system - Настройка файла system/decomposeParDict Выбор метода декомпозиции области Сформировать файл ‘machines’ Использовать утилиты decomposePar, reconstructPar $ decomposePar [cfd1@master cavityParallel]$ more machines n3 cpu=8 n4 cpu=8 $ mpirun --hostfile machines -np 16 icoFoam -parallel > log & $ reconstructPar на Декомпозиция расчетной области. Выбор модели. [cfd1@master system]$ more decomposeParDict /*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | \\ / O peration | Version: 1.6 | | \\ / A nd | Web: www.OpenFOAM.org | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile { version 2.0; format ascii; class dictionary; location "system"; object decomposeParDict; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // numberOfSubdomains 4; method hierarchical; simpleCoeffs { n ( 2 1 1 ); delta 0.001; } hierarchicalCoeffs { n ( 2 2 1 ); delta 0.001; order xyz; } metisCoeffs { } manualCoeffs { dataFile ""; } distributed no; roots ( ); // ************************************************************************* // |