帮酷LOGO
0 0 评论
  • 显示原文与译文双语对照的内容
文章标签:BASE  Computation  方法  method  教程  COM  
A simple python-based tutorial on computational methods for hydrodynamics

  • 源代码名称:pyro2
  • 源代码网址:http://www.github.com/zingale/pyro2
  • pyro2源代码文档
  • pyro2源代码下载
  • Git URL:
    git://www.github.com/zingale/pyro2.git
  • Git Clone代码到本地:
    git clone http://www.github.com/zingale/pyro2
  • Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/zingale/pyro2
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
  • pyro logo

    这是一个简单的基于流体动力学计算方法的教程。

    ,是一种计算流体力学代码,它提供了两个平流。可以压缩流体。扩散。不可以压缩的体系。 代码主要是用 python 编写的,并且设计简单。 这些算法被编写用来鼓励实验,并允许自学习这些代码方法。

    pyro的最新版本始终可以在以下位置获得:

    https://github.com/zingale/pyro2

    你将在这里找到文档,绘图,注释,等等的项目网页:

    http://zingale.github.io/pyro2/

    正在启动

    • 默认情况下,我们假定 python 3.4或者更高版本。 下面给出了使用 python 2.7运行的说明,但建议你使用 switch 到 python 3。

    • 需要采取一些步骤来运行这些东西。 你需要确保已经安装 numpyf2pymatplotlibh5py。 在Fedora系统上,可以通过执行以下操作来实现:

      dnf install python3-numpy python3-numpy-f2py python3-matplotlib python3-matplotlib-tk python3-h5py

      ( 注意,对于较旧的Fedora发行版,用 yum 替换 dnf。 对于 python 2. x,,请在包名称中保留 2

    • 你还需要确保gfortran存在于你的系统上。 在Fedora系统上,可以将它的安装为:

      dnf install gcc-gfortran

    • 并不是所有matplotlib后端都允许交互式绘图,因为运行的是 pyro。 一个是TkAgg后端。 通过创建包含以下内容的文件 ~/.matplotlib/matplotlibrc,可以将这里设置为默认值:

      backend: TkAgg

      你可以检查 python 中的当前默认值是什么后端:

      import matplotlib.pyplotprint matplotlib.pyplot.get_backend()
    • 如果要运行单元测试,则需要安装 pytest

    • 剩下的步骤是:

      • PYTHONPATH 环境变量设置为指向 pyro2/ 目录。

      • 定义环境变量 PYRO_HOME 指向 pyro2/ 目录( 仅用于回归测试)

      • 生成Fortran源。在 pyro2/ 类型中

        ./mk.sh

      • 运行对流求解器的快速测试:

        ./pyro.py advection smooth inputs.smooth

        你应该看到一个图形窗口弹出一个平滑脉冲advecting对角的周期域。

    核心数据结构

    描述网格和网格上的数据的主要数据结构在jupyter笔记本中描述:

    https://github.com/zingale/pyro2/blob/master/mesh/mesh-examples.ipynb

    这里的许多方法都依赖多重网格。 在juputer笔记本中演示多重网格解算器:

    https://github.com/zingale/pyro2/blob/master/multigrid/multigrid-examples.ipynb

    解决方案

    pyro提供以下解决程序( 全部 2 -d ):

    • advection: 二阶非分裂线性对流解解。 利用特征跟踪和角点耦合来预测界面状态。 这是了解流体动力学的基本方法。

    • advection_fv4: 采用RK4时间积分的四阶精确有限体积对流解算器。

    • advection_rk: 线性对流的二阶分解解算器,采用runge积分代替特征跟踪。

    • advection_weno: 线性平流的method-of-lines for算法。

    • compressible: 可以压缩流动的欧拉方程的二阶非线性规划。 方法利用特征跟踪和角点耦合来预测界面状态和 2-shock 或者HLLC近似黎曼解。

    • compressible_fv4: 四阶精确有限体积可以压缩水力求解器,采用RK4时间积分。 这是由McCourquodale和 Colella ( 2011 )的方法构建的。

    • compressible_rk: 用runge积分代替特征跟踪的欧拉方程的二阶分解解。

    • incompressible: 一种基于二阶细胞中心近似投影方法的流体流动方程。

    • diffusion: 一种用于恒系数扩散方程的曲柄nicolson时间离散化算法。

    • lm_atm: 大气流低马赫数流体动力学方程解。

    • lm_combustion: ( 在开发中) 为smallscale燃烧低马赫数流动方程的求解方程。

    • multigrid: 一个用于恒系数的多重数字网格求解方程,以及变系数ram方程( 从常数系数解算器继承)。

    处理数据

    除了主程序之外,这里还有许多我们描述的分析工具。 注意:某些问题在仿真结束时写入报告,指定可以用于它的数据的分析例程。

    • compare.py: 将两个模拟输出文件作为输入,并对zone-by-zone进行比较以获得精确的协议。 这是回归测试的一部分。

      用法:./compare.py file1 file2

    • plot.py: 将输出文件作为输入,并使用solver方法的dovis绘制数据。

      用法:./plot.py file

    • analysis/

      • gauss_diffusion_compare.py: 这是解扩散扩散问题的扩散高斯。 它将输出文件序列作为参数,计算角度平均值,并将结果点与解析解相比较。

        用法:./gauss_diffusion_compare.py file*

      • incomp_converge_error.py: 这是求解求解器问题不可压缩的集合。 将单个输出文件作为输入,并将速度场与解析解进行比较,报告错误的L2规范。

        用法:./incomp_converge_error.py file

      • plotvar.py: 它采用单个输出文件和变量 NAME,并打印该变量的数据。

        用法:./plotvar.py file variable

      • sedov_compare.py: 从可以压缩Sedov问题中获取输出文件,计算解的角平均轮廓并将它的与解析数据( 从 cylindrical-sedov.out 读取) 一起绘制。

        用法:./sedov_compare.py file

      • smooth_error.py: 从求解问题的平流平滑处理出输出文件,并与解析解进行比较,输出误差。

        用法:./smooth_error.py file

      • sod_compare.py: 从可以压缩的mda问题获取输出文件,并通过解析解( 从 sod-exact.out 读取)的域打印一个切片。

        用法:./sod_compare.py file

    了解算法

    有一组说明pyro实现的算法的背景和细节的注释:

    http://bender.astro.sunysb.edu/hydro_by_example/CompHydroTutorial.pdf

    这些注释的源代码也可以在github上找到:

    https://github.com/Open-Astrophysics-Bookshelf/numerical_exercises

    回归和单元测试

    test.py 脚本将运行几个问题( 还有一些独立的多重网格测试),并将解决方案与存储的基准测试( ( 在求解器子目录的每个 tests/ 中) ) 进行比较。

    它还将调用 python pytest MODULE 来运行pyro中不同模块的单元测试。

    测试在夜间运行并报告:

    http://bender.astro.sunysb.edu/hydro_by_example/download/_stage/pyro2/tests.out

    python-2.7

    若要使用 python 2.7运行,需要将编译后的代码生成为:

    
    PYTHON=python2./mk.sh
    
    
    
    

    然后显式地在命令行上给出 python 解释器的NAME,例如:

    
    python2./pyro.py compressible sedov inputs.sedov
    
    
    
    

    获取帮助

    加入邮件列表以表示 up-to-date:

    https://groups.google.com/forum/#!forum/pyro-code



    文章标签:COM  BASE  教程  method  方法  Computation  

    Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语