FLASH 模拟程序学习笔记(1)

FLASH 简介

!!! 这个不是大家熟知的动画flash哈~~

FLASH是一个芝加哥大学开发的高性能辐射流体模拟程序,用来模拟等离子体中发生的物理过程。可以在FLASH的主页去申请。申请时需要填写下自己的研究背景,以获得代码的许可。这个程序是用Fortran语言开发的,但是具有良好的数据结构,进行大型的模拟计算还是非常容易入手的。使用FLASH请致谢:

The software used in this work was in part developed by the DOE NNSA-ASC OASCR Flash Center at the University of Chicago.

FLASH提供了非常详细的说明文档,以及许多例子程序:

  • 说明文档: ihsbabc@126.com
  • HEDP模拟
  • 流体/磁流体模拟

FLASH的计算能力包括(从FLASH主页上翻译过来的):

  • 物理求解器:

    • 流体力学
    • 磁流体力学
    • 状态方程
    • 辐射转移
    • 扩散和热传导
    • 激光能量沉积
    • 不透明度
    • 粒子处理
    • 核烧蚀
    • 引力
    • 宇宙学
    • 磁阻/电阻
    • 原初化学
  • 基本结构:

    • Driver:
      – Split
      – Unsplit
    • Grid:
      – Uniform Grid(均匀网格)
      – AMR(自适应网格,PARAMESH)
      – AMR(Chombo)
    • GridParticles:
      – 拉格朗日框架
    • GridSolvers:
      – MultiGrid
      – Multipole
      – Barnes-Hut Tree
      – PFFT
      – Direct Solvers for Uniform Grid
    • IO:
      – HDF5
      – PnetCDF
    • MultiSpecies
    • RuntimeParameters
    • Monitor:
      – Hooks for TAU
      – MPI定时器

FLASH的安装

安装系统要求:

最基本的当然需要一个linux计算机(具有多核的服务器最好啦):

  • F90(Fortran 90)编译器(如GNU的gfortran)
  • C编译器 (如GNU的gcc,Intel的icc等)
  • MPI库(openmpi或者MPICH)
  • HDF5(如果要使用FLASH并行IO的能力)
  • NetCDF库(并行IO需要)
  • chombo库(AMR网格计算需要,安装可参考网址
  • HYPRE库(扩散求解器需要,安装可参考网址)
  • IDL语言(ITT Visual Information Solutions,可选,分析结果时可以用FLASH提供的IDL工具fidlr3.0)
  • GNU make编译工具gmake
  • Python语言(方便进行结果分析)

安装及测试:

FLASH在所有需要的库装上后,就可以直接编译运行。具体步骤如下:
- 从FLASH官网获得程序(FLASHX.Y.tar,X.Y为版本号,如4.2)

tar -xvf FLASHX.Y.tar

  • 安装上述需要的库(最好都装上)
  • 进入解压的文件夹FLASHX.Y,设置安装的库的路径,位置如下:

cd sites/Prototypes/Linux
vim Makefile.h

修改MPI_PATH, HYPRE_PATH, ZLIB_PATH, NCMPI_PATH等。
如果操作系统为其他,则选择相应的sites下的操作系统的Makefile.h。也可以定制自己的系统的配置文件,参考用户说明手册

  • 返回FLASH程序的主目录,运行(python脚本setup所在的目录):

./setup Sedov -auto

如果没有安装HDF5库,可以使用下列命令,无输出测试:

./setup Sedov -auto +noio

  • 此命令会生成一个object文件夹,进入次文件夹,编译:

cd object
make (如果有多核,为加快编译速度,可以使用make -j 10)

  • 正常情况下,程序应该能够正常执行了, 使用如下命令执行:

mpirun -np 8 flashX

X代表版本号X.Y中的X,如版本号为4.2,则X为4.

有的并行计算机如集群采用一些集群管理软件,如pbs,可以按相应的方法进行提交。对于一些集群,执行命令可能类似于下列命令:

mpiexec.hydra -n 8 -f nodesfile flashX

  • 正常情况下,可能输出下列结果:

    • sedov.log: log文件,记录运行时参数,如运行时间,编译时间等
    • sedov.dat: 积分物理量随时间的值,如总质量、总能量、总角动量等
    • sedov_hdf5_chk_000*:每隔一定时间记录一次的断点文件,可以用来进行重新计算。
    • sedov_hdf5_plt_000*:一些关键物理量如温度、密度、压强等的信息,用来进行可视化分析

    到此,如果这些输出都正常了,说明FLASH基本就装成功了。


  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
STM32是一款非常流行的嵌入式微控制器系列,它具有强大的性能和丰富的外设资源。在学习STM32时,掌握如何进行Flash读写是非常重要的。 Flash是一种非易失性存储器,可以用来存储程序代码和数据。在STM32中,Flash存储器通常用来存储应用程序代码。下面是一个简单的Flash读写程序的示例: 1.首先,我们需要包含适用于所使用的STM32型号的头文件。例如,对于STM32F4系列,我们需要包含"stm32f4xx.h"。 2.然后,我们需要定义一个指向Flash存储器的指针变量。例如,可以使用如下代码:`uint32_t* flash_address = (uint32_t*)0x08000000;`其中0x08000000是Flash存储器的起始地址。 3.要读取Flash存储器中的数据,我们可以通过以下代码实现:`data = *flash_address;`其中data是一个变量,用于存储读取到的数据。 4.要写入数据到Flash存储器中,我们可以通过以下代码实现:`*flash_address = data;`其中data是要写入的数据。 需要注意的是,STM32的Flash存储器是有写保护机制的,因此在写入数据之前,我们需要禁用写保护。可以使用以下代码禁用写保护:`FLASH->KEYR = 0x45670123; FLASH->KEYR = 0xCDEF89AB;`然后才能进行数据写入。 另外,为了确保数据的完整性,我们可以使用CRC校验来验证Flash存储器中的程序代码的正确性。可以使用库函数来计算校验和,然后将其与预期的校验和进行比较以进行验证。 综上所述,掌握STM32的Flash读写操作对于嵌入式系统的开发非常重要。上述示例代码可以帮助我们快速进行Flash读写操作,同时注意写保护和数据校验可以提高数据的安全性和可靠性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值