El formato Flux Reconstruction (FR) es un formato numérico fluido compacto de alta precisión. PyFR es un paquete CFD de código abierto que utiliza un formato FR muy preciso para hacer frente a algunos de los problemas de flujo de fluidos más desafiantes del mundo. Especialmente cuando se trata de turbulencias irregulares. Los blogs relacionados se pueden encontrar en el blog de Nvidia . El sitio web oficial de PyFR ofrece descargas y manuales sobre. Este artículo es una guía introductoria basada en el contenido anterior, la plataforma operativa es Ubuntu 19.10.
instalación
- Instale las dependencias básicas, el comando es
sudo pip3 install xxx
Estos xxx
incluyen:
appdirs >= 1.4.0
gimmik >= 2.0
h5py >= 2.6
mako >= 1.0.0
mpi4py >= 2.0
numpy >= 1.8
pytools >= 2016.2.1
- Verifique la versión de gcc :,
gcc --version
no debe ser menor a 4.9. - Instale las dependencias restantes:
sudo apt install python3 python3-pip libopenmpi-dev openmpi-bin
sudo apt install metis libmetis-dev libblas3
pip3 install virtualenv
- Instalar paraview:
sudo apt install paraview
- Configure el entorno virtual:
python3 -m virtualenv ENV3
source ENV3/bin/activate
E instale PyFR en el entorno virtual:pip install pyfr
Ejecutar comando
PyFR usa tres formatos de archivo:
.ini
——Archivo de parámetros.pyfrm
—— Archivo de cuadrícula.pyfrs
-Archivo de solución
PyFR proporciona varios comandos:
pyfr import
——Importe archivos en formato .msh o .pyfrm, que contienen información de cuadrícula. P.ej:pyfr import mesh.msh mesh.pyfrm
pyfr partition
-Divida la cuadrícula existente y sus archivos de solución relacionados. P.ej:pyfr partition 2 mesh.pyfrm solution.pyfrs .
pyfr run
-Ejecutar una simulación. P.ej:pyfr run mesh.pyfrm configuration.ini
pyfr restart
——Reinicie una simulación basada en el archivo de solución existente. P.ej:pyfr restart mesh.pyfrm solution.pyfrs
pyfr export
- La.pyfrs
conversión de archivos VTK.vtu
opvtu
archivos no estructurales .
Para ejecutar PyFR en paralelo, pyfr
use el prefijo antes del comando mpiexec -n <cores/devices>
. Tenga en cuenta que la cuadrícula debe dividirse por adelantado y la cantidad de núcleos o dispositivos debe ser igual a la cantidad de particiones. Luego pyfr run
agregue parámetros paralelos al final: -b cuda
-Cuda paralelo, -b openmp
-OpenMP paralelo, -b opencl
-OpenCL paralelo. Si las operaciones anteriores son correctas, debería poder usar OpenMP directamente en este momento. Cuda y OpenCL deben instalarse por sí mismos.
Ejemplo: vórtice Euler bidimensional
Tome OpenMP como ejemplo. Descargue el código fuente del sitio web de PyFR y examples
copie la carpeta en un directorio de trabajo adecuado. euler_vortex_2d
Abra el terminal en la carpeta.
- Primero, inicie el entorno virtual de Python:
source ~/ENV3/bin/activate
- Convierta el archivo de malla:
pyfr import euler_vortex_2d.msh euler_vortex_2d.pyfrm
- Divida la cuadrícula en dos particiones:
pyfr partition 2 euler_vortex_2d.pyfrm .
- Ejecutar:
mpiexec -n 2 pyfr run -b openmp -p euler_vortex_2d.pyfrm euler_vortex_2d.ini
(Nota: el parámetro paralelo aquí es el-b openmp
texto original del manual-b cuda
.-n 2
Corresponde a las dos particiones en el paso 3.) - Convierta el último fotograma de datos en un
.vtu
archivo de formato. El comando es:pyfr export euler_vortex_2d.pyfrm euler_vortex_2d-100.0.pyfrs euler_vortex_2d-100.0.vtu -d 4
Hay dos puntos a explicar en este comando: uno es traer el archivo .pyfrm, y el otro es usar el último parámetro-d 4
, lo que significa subdividir la unidad en 4 subunidades lineales para mejorar la precisión de visualización. - Abra el
.vtu
archivo con Paraview . El campo de velocidad es el siguiente:
posdata
En particular, debe señalarse que de los ejemplos de cálculo anteriores, la n
velocidad es la más rápida cuando el número de subprocesos paralelos que utilizan OpenMP es exactamente igual al número de núcleos físicos de la computadora; de lo contrario, se ralentizará considerablemente. Por ejemplo, en mi computadora portátil, el -n 2
tiempo de ejecución es de solo 19 segundos, -n 4
o un solo hilo toma unas pocas horas. Para ser honesto, no entendí por qué la diferencia era tan grande.