Este artículo es básicamente una traducción del manual oficial Haga clic aquí para ver el texto original .
Donde empezar
El enlace simbólico pyfr
apunta al guión _main_.py
y todo comienza aquí. Específicamente, la process_run
llamada a la función _process_common
, y luego la llamada get_solver
, devuelve un integrador, es decir, un compuesto de controlador y paso a paso. Integrator contiene un método run
, que se llama para ejecutar la simulación.
Controlador
El controlador es responsable de hacer avanzar la simulación a lo largo del tiempo. Específicamente, el controlador contiene un método advance_to
para hacer avanzar la simulación a un tiempo específico. PyFR 1.9.0 proporciona tres controladores de tiempo físicos:
pyfr.integrators.std.controllers.StdNoneController
pyfr.integrators.std.controllers.StdPIController
pyfr.integrators.dual.phys.controllers.DualNoneController
La relación de herencia de varios controladores de tiempo físico se muestra en la figura:
Además del tiempo físico, hay dos controladores de pseudo-tiempo:
pyfr.integrators.dual.pseudo.pseudocontrollers.DualNonePseudoController
pyfr.integrators.dual.pseudo.pseudocontrollers.DualPIPseudoController
La relación de herencia es:
Paso a paso
Stepper es responsable de hacer avanzar la simulación un paso de tiempo. Específicamente, Stepper contiene un método step
para hacer avanzar el sistema a un paso de tiempo. Hay ocho tipos de Stepper:
-
pyfr.integrators.std.steppers.StdEulerStepper
-
pyfr.integrators.std.steppers.StdRK4Stepper
-
pyfr.integrators.std.steppers.StdRK34Stepper
-
pyfr.integrators.std.steppers.StdRK45Stepper
-
pyfr.integrators.std.steppers.StdTVDRK3Stepper
-
pyfr.integrators.dual.phys.steppers.DualBDF2Stepper
-
pyfr.integrators.dual.phys.steppers.DualBDF3Stepper
-
pyfr.integrators.dual.phys.steppers.DualBackwardEulerStepper
La relación de herencia es: también
hay un pseudo Stepper, que avanza la simulación a un pseudo paso de tiempo. Con un formato de paso de tiempo dual, se pueden utilizar para converger el paso de tiempo paso a paso implícito. Hay seis tipos de pseudo Stepper:
-
pyfr.integrators.dual.pseudo.pseudosteppers.DualDenseRKPseudoStepper [fuente]
-
pyfr.integrators.dual.pseudo.pseudosteppers.DualRK4PseudoStepper [fuente]
-
pyfr.integrators.dual.pseudo.pseudosteppers.DualTVDRK3PseudoStepper [fuente]
-
pyfr.integrators.dual.pseudo.pseudosteppers.DualEulerPseudoStepper [fuente]
-
pyfr.integrators.dual.pseudo.pseudosteppers.DualRK34PseudoStepper [fuente]
-
pyfr.integrators.dual.pseudo.pseudosteppers.DualRK45PseudoStepper
Tenga en cuenta que hay DualDenseRKPseudoStepper
un tipo de pseudo Stepper cuyos coeficientes se leen de un .txt
archivo que sigue la siguiente convención de nomenclatura :
{scheme name}-s{stage count}-p{temporal order}-sp{optimal spatial polynomial order}.txt
La relación de herencia es:
Sistema
El sistema contiene información diversa del sistema, incluidos elementos, interfaces y backend. El sistema contiene un método rhs
(abreviatura del lado derecho) para obtener la divergencia de flujo en cada punto de solución (es decir, el término de la derecha de la ecuación). rhs
Inicie varios núcleos que están pregenerados y cargados en la cola. El sistema también contiene un método _gen_kernels
para generar todos los núcleos requeridos por el sistema. El kernel es una instancia de una clase "única" que contiene un método run
para implementar la funcionalidad requerida. Cada kernel es generado por un proveedor de kernel. PyFR tiene muchos tipos de proveedores de kernel. Un proveedor de kernel puntual (proveedor de kernel puntual) genera un kernel puntual, como el solucionador de Riemann y la función de flujo. Estos kernels punto por punto se implementan utilizando una versión modificada de Mako, a saber, PyFR-Mako. Hay una introducción a continuación, consulte el sitio web oficial de Mako para obtener más información . Hay cuatro sistemas para elegir:
pyfr.solvers.aceuler.system.ACEulerSystem
pyfr.solvers.acnavstokes.system.ACNavierStokesSystem
pyfr.solvers.euler.system.EulerSystem
pyfr.solvers.navstokes.system.NavierStokesSystem
La relación de herencia es:
Elementos
Elementos (notas) contiene un conjunto de información de elementos. Hay cuatro tipos de elementos:
pyfr.solvers.aceuler.elements.ACEulerElements
pyfr.solvers.acnavstokes.elements.ACNavierStokesElements
pyfr.solvers.euler.elements.EulerElements
pyfr.solvers.navstokes.elements.NavierStokesElements
La relación de herencia es:
Interfaces
Interfaces (notas) contiene un conjunto de información de interfaz. Hay ocho interfaces (sin límites):
-
pyfr.solvers.aceuler.inters.ACEulerIntInters
-
pyfr.solvers.aceuler.inters.ACEulerMPIInters
-
pyfr.solvers.acnavstokes.inters.ACNavierStokesIntInters
-
pyfr.solvers.acnavstokes.inters.ACNavierStokesMPIInters
-
pyfr.solvers.euler.inters.EulerIntInters
-
pyfr.solvers.euler.inters.EulerMPIInters
-
pyfr.solvers.navstokes.inters.NavierStokesIntInters
-
pyfr.solvers.navstokes.inters.NavierStokesMPIInters
La relación de herencia es:
Backend
El backend contiene información del backend. Hay tres tipos de opciones de backend (el texto original es cuatro, presuntos errores tipográficos):
pyfr.backends.cuda.base.CUDABackend
pyfr.backends.opencl.base.OpenCLBackend
pyfr.backends.openmp.base.OpenMPBackend
La relación de herencia es:
Proveedor de kernel punto por punto
El proveedor de kernel punto por punto (PKP para abreviar) es responsable de generar el kernel punto por punto. Específicamente, PKP contiene un método register
que es responsable de agregar un nuevo método a una instancia de PKP. Este nuevo método devolverá un kernel cuando se lo llame. El llamado kernel es una instancia de una clase "desechable", que contiene métodos run
para implementar las funciones requeridas. PyFR-Mako implementa la función del kernel, por lo que PKP también contiene un método _render_kernel
para representar PyFR-Mako como código subyacente. _render_kernel
Primero configure el contexto para Mako (como los detalles del backend, etc.) y luego use Mako para renderizar el contenido de PyFR-Mako. Cuando Mako encuentra uno pyfr:kernel
, crea una instancia del generador de kernel para representar pyfr:kernel
el contenido principal. Hay tres tipos (cuatro tipos de escritura original, presuntos errores tipográficos) PKP es opcional:
pyfr.backends.cuda.provider.CUDAPointwiseKernelProvider
pyfr.backends.opencl.provider.OpenCLPointwiseKernelProvider
pyfr.backends.openmp.provider.OpenMPPointwiseKernelProvider
La relación de herencia es:
Generador de granos
El generador de kernel pyfr:kernel
muestra PyFR-Mako como código subyacente. Específicamente, el generador de kernel contiene un método render
. Hay tres tipos de generadores de kernel (cuatro tipos de escritura original, presuntos errores tipográficos):
pyfr.backends.cuda.generator.CUDAKernelGenerator
yfr.backends.opencl.generator.OpenCLKernelGenerator
pyfr.backends.openmp.generator.OpenMPKernelGenerator
La relación de herencia es:
posdata
Hay una introducción a PyFR-Mako al final de esta página, que se coloca en la siguiente traducción.