ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

gen_Grid_markRefineDerefine — 网格细化约束生成器

gen_Grid_markRefineDerefine — 网格细化约束生成器 gen_Grid_markRefineDerefine — 网格细化约束生成器FLASH AMR 网格细化/粗化自定义约束逐材料区域层级约束的一站式生成与说明文档。自动生成器 手写参考实现来自thin_layer_sandwich场景双轨并存。flash-sim是 FLASH 高能量密度物理 (HEDP) 仿真代码的全功能 Python 封装。提供场景系统即插即用仿真入口、参数文件生成、多环境运行管理、HDF5 输出分析与自适应可视化的一站式工作流。仓库地址 (Repository)本项目托管于 Gitee (码云), 支持 HTTPS 克隆与在线浏览:https://gitee.com/physimx/flash操作命令HTTPS 克隆git clone https://gitee.com/physimx/flash.git在线浏览https://gitee.com/physimx/flash (Code/Issues/Releases 页签)版本标签0.0.000(首次发布) —git tag -l查看全部问题反馈通过 Gitee Issues 提交 (登录后新建 Issue)发布包已通过全局测试 (233 passed / 3 skipped) 与 FLASH 版权合规检查, (详见 许可 与 NOTICE)。概述gen_Grid_markRefineDerefine子包用于生成 FLASH AMR自适应网格细化的Grid_markRefineDerefine.F90文件 —— 这是一个可选的FLASH 自定义组件定义「何时细化 / 何时粗化」网格。本子包提供两种工作方式互为补充自动生成器推荐——generator.py中的GridMarkRefineDerefineGenerator按参数生成基于**模式 C3边界框重叠法**的约束代码。手写参考实现—— 来自scenarios/collision_compression/thin_layer_sandwich/场景的sim_input_al/Grid_markRefineDerefine.F90与sim_input_si/Grid_markRefineDerefine.F90是已在实际仿真中验证通过的成品模板。⚠️文档修订说明早期GEN_GRID_GUIDE.md中「暂无自动生成器需手动编写或从 refs/ 复制」的描述已过时——生成器generator.py现已存在。本 README 已将其合并并纠正原GEN_GRID_GUIDE.md中的「复制/手动编写」步骤仅作为手写参考保留。它能做什么对 FLASH 仿真中不同材料区域施加不同的网格细化层级约束例如Al 靶区需要lref ∈ [lrefine_max-2, lrefine_max]CH 泡沫区lref ≤ lrefine_max/2He 填充区lref ≤ lrefine_min使用边界框重叠法模式 C3确保超薄层区域如 0.2µm Al也能被正确检测和细化它不做什么❌ 不修改物理求解器逻辑❌ 不生成.par文件或Config文件❌ 不替换 FLASH 的标准二阶梯度加密机制——它只是一个附加约束层适用场景与参考实现方式位置用途自动生成器input_gen/gen_Grid_markRefineDerefine/generator.py参数化生成模式 C3 约束代码手写模板al变体scenarios/collision_compression/thin_layer_sandwich/sim_input_al/Grid_markRefineDerefine.F90三层靶Al/CH/He1D 实测模板手写模板si变体scenarios/collision_compression/thin_layer_sandwich/sim_input_si/Grid_markRefineDerefine.F90同结构、不同材料表的变体thin_layer_sandwich场景的物理背景1D 笛卡尔坐标、激光烧蚀多层靶域范围x ∈ [-200, 200] µm实际.par中xmin-0.045, xmax0.045cm材料对称布局位置 |x| (µm)材料目标细化≤ 0.2Al 靶材高精度 (如 6~8 级)(0.2, 4]CH 泡沫中精度 (如 1~4 级) 4He 填充不强制低精度Grid_markRefineDerefine.F90 用途这个 Fortran 子程序定义 AMR 网格细化和粗化条件。FLASH 根据用户输入的refine_var_*参数标准二阶梯度加密再叠加本文件定义的材料区域约束调用此子程序判断是否细化或粗化特定区域的网格。本文件是 FLASH 自定义组件必须随仿真算例一起编译放在SimulationMain/算例/目录下而非独立的 Python 运行步骤。关键技术要点已为用户核心规范1. AMR 细化变量配置规则在.par文件中配置标准二阶梯度加密变量数字越大优先级越靠后lrefine_max8# 最大细化等级lrefine_min1# 最小细化等级refine_var_1dens# 细化变量1密度refine_var_2tele# 细化变量2电子温度thin_layer_sandwich/sim_input_al/grid_rede.par中的实测配置即为此形式refine_var_1dens、refine_var_2tele。2. 1D / 2D / 3D 坐标获取差异维度坐标获取循环结构1D只需xcent(i)/ 边界框boundBox(*, IAXIS)do i ...2D需要xcent(i),ycent(j)do j ...; do i ...3D需要xcent(i),ycent(j),zcent(k)do k ...; do j ...; do i ...当前生成器与thin_layer_sandwich模板均为1DIAXIS实现2D/3D 需相应扩展坐标判断。3. 典型细化逻辑LaserSlab 1D! 在靶区域 (x sim_targetRadius) 细化到最高等级 if (xcent(i) sim_targetRadius) then need_refine .true. endif ! 在密度梯度大的区域细化 if (abs(dens(i1) - dens(i)) / dx threshold) then need_refine .true. endif4. 边界框重叠法核心设计来自 thin_layer_sandwich 模板thin_layer_sandwich的 F90 注释2026-07-02明确指出旧「块中心法」的缺陷当目标区域宽度 最小块尺寸时完全失效。例如 Al 区仅 0.2µm远小于lref1时的块尺寸 50µm —— 没有任何块的中心落在 Al 或 CH 范围内所有块都会被误判为 He →lref ≤ 1→永远达不到高分辨率。新「边界框重叠法」检查块的[LOW, HIGH]区间是否与目标区域重叠boundBox(HIGH,IAXIS) -var .and. boundBox(LOW,IAXIS) var即使块远大于目标区域只要覆盖即触发约束。! 判断块是否与 Al 靶材区重叠: Al 区范围 x ∈ [-sim_targHeight, sim_targHeight] if (boundBox(HIGH, IAXIS) -sim_targHeight .and. boundBox(LOW, IAXIS) sim_targHeight) then ! ═══ Al 靶材区 ═══ 约束: lref ∈ [lrefine_max-2, lrefine_max] if (lrefine(lb) al_lower_lref) then refine(lb) .true. derefine(lb) .false. else if (lrefine(lb) al_target_lref) then refine(lb) .false. derefine(lb) .true. end if else if (boundBox(HIGH, IAXIS) -sim_polyHeight .and. boundBox(LOW, IAXIS) sim_polyHeight) then ! ═══ CH 泡沫区 ═══ 约束: lref ≤ lrefine_max/2 ... else ! ═══ He 填充区 ═══ 约束: lref ≤ lrefine_min仅 derefine 方向 ... end if分层约束由lrefine_max自适应不硬编码区域上限下限说明Al 靶材lrefine_maxlrefine_max - 2确保亚微米层有足够分辨率CH 泡沫lrefine_max / 2不低于 2不设下限避免界面梯度引起的非物理过度细化He 填充lrefine_min不设下限自然退粗到最粗网格过渡机制PARAMESH 要求相邻块细化层级差|Δlref| ≤ 1即使 CH 区标记为退粗到 4Al 边界附近的块也会被 PARAMESH 维持在高一级被动产生平滑过渡带。5. FLASH 版权合规头手写模板必备thin_layer_sandwich的 F90 文件头部包含 FLASHCenter 合规声明任何修改版 FLASH 源文件都应保留!! MODIFIED BY: PhySimX Contributors — derivative of the FLASH Centers !! source/Simulation/SimulationMain/LaserSlab_Custom/Grid_markRefineDerefine !! (modified for a new physics setup; original FLASH header preserved !! intact per FLASH License Agreement §4(c); modification declared per §4(a)).⚠️注意自动生成器_header()当前未自动插入上述MODIFIED BY合规头。通过生成器产出的 F90 在正式提交前应手动补回该段声明以满足 FLASH License Agreement §4(a)。6. 依赖的 Simulation_data 半宽变量区域判断依赖Simulation_data.F90中的半宽变量来自thin_layer_sandwich/sim_input_al/Simulation_data.F90变量含义.par实测值sim_targHeightAl 靶材层半高 (µm / cm)2e-5sim_polyHeightCH 泡沫层半高 (µm / cm)4e-4这些变量必须在Simulation_data.F90中声明、并在Simulation_init中从.par读取后本约束文件才能编译运行。使用方法自动生成器 GridMarkRefineDerefineGenerator重要生成顺序本生成器应在.par文件生成之后调用因为lrefine_max/lrefine_min需从.par文件中读取以保证 F90 注释中的理论分辨率与实际仿真参数一致。frominput_gen.gen_Grid_markRefineDerefineimport(GridMarkRefineDerefineGenerator,ZoneConfig)# 创建生成器simulation_name 仅用于注释路径; sim_src_subdir 默认读 credentialsgenGridMarkRefineDerefineGenerator(my_simulation)# 所有参数均无默认值必须逐项传入# 这些值来自setup 命令nxb, nblockx、.par 文件xmin, xmax, lrefine_max/mingen.set_domain(xmin-0.02,xmax0.02,nxb16,nblockx8)gen.set_refinement(lrefine_max8,lrefine_min1)# 添加区域约束按优先级从高到低 → 对应 if / else if / elsegen.add_zone(ZoneConfig(Al,# 区域名称sim_targHeight,# Simulation_data 中的半宽变量lref_lower_ratio0.75,# 下限: lrefine_max × 0.756当 lrefine_max8lref_upper_ratio1.0# 上限: lrefine_max8))gen.add_zone(ZoneConfig(CH,sim_polyHeight,lref_lower_ratioNone,# 不设下限不主动 refinelref_upper_ratio0.5# 上限: lrefine_max × 0.54))gen.add_zone(ZoneConfig(He,None,None,None# Fallback: 无约束))# 生成并保存强制 LF 换行gen.save(sim_input/Grid_markRefineDerefine.F90)ZoneConfig 参数说明参数类型说明示例namestr区域名称仅用于注释Alsim_var_namestr/NoneSimulation_data 中的半宽变量名。Nonefallbacksim_targHeightlref_lower_ratiofloat/None下限比例因子。相对lrefine_max。None不设下限0.75,0.5,Nonelref_upper_ratiofloat/None上限比例因子同上。None不设上限1.0,0.5,Noneuse_bounding_boxbool使用边界框重叠法默认 True推荐Truezone_marginfloat缓冲区扩展系数1.0 时区域判断边界向两侧扩展减少界面数值不稳定性默认 1.01.0,1.2ratio 值的含义比例因子所有 ratio 值均为比例因子相对于lrefine_max值含义F90 表达式lrefine_max8 时None无约束—1.0lrefine_maxlrefine_max→ 80.75lrefine_max × 0.75lrefine_max * 3 / 4→ 60.5lrefine_max × 0.5lrefine_max / 2→ 40.25lrefine_max × 0.25lrefine_max / 4→ 2薄层材料陷阱ZoneConfig文档指出厚度 ≤ 几倍res_min的薄层材料如 Al 靶lref_lower_ratio必须设为1.0否则初始化阶段可能达不到lrefine_max导致薄层分辨率不足。生成的 F90 结构5 段生成器产出的Grid_markRefineDerefine()子程序依次包含USE 语句—— 导入 FLASH 模块与Simulation_data半宽变量变量声明—— 含zone_margin 1.0时为区域生成的*_zone_half缓冲变量标准二阶梯度加密流程——gr_markDerefineByTime/gr_setMaxRefineByTime/Grid_fillGuardCells/gr_markRefineDerefine区域约束边界框重叠——Grid_getListOfBlocksGrid_getBlkBoundBox逐叶块if / else if / else标记refine/derefine标准后处理收尾—— PARAMESH2 兼容、粒子计数加密、最大精度强制、gr_unmarkRefineByLogRadius、Sink 粒子加密、非叶块标志清理where (nodetype(:) / LEAF)必须清零否则 PARAMESH 崩溃分辨率核算来自 thin_layer_sandwich F90 注释公式res_min |xmax - xmin| / (NXB * nblockx * 2^(lrefine_max-1)) res_max |xmax - xmin| / (NXB * nblockx * 2^(lrefine_min-1))单位换算若xmin/xmax以 cm 传入需 ×1e4 换算为 µm生成器_calc_resolution已内置此换算。1D 示例域 400µmNXB8nblockx1lrefine_maxres_min (µm)是否满足 Al 0.03µm12400/(8×1×2¹¹) ≈0.0244✅11400/(8×1×2¹⁰) ≈ 0.0488❌10400/(8×1×2⁹) ≈ 0.0977❌8400/(8×1×2⁷) ≈ 0.391❌lrefine_minres_max (µm)4400/(8×1×2³) ≈ 6.253400/(8×1×2²) ≈ 12.5结论满足 Al 分辨率 0.03µm 的最小lrefine_max 12推荐lrefine_max12, lrefine_min4, nblockx1高分辨率需求场景常规演示可用thin_layer_sandwich的lrefine_max8, lrefine_min1, nblockx8。⚠️ 重要必须人工核查本生成器生成的代码是自定义 AMR 细化约束器实际细化结果受以下因素影响refine_var梯度判据——.par文件中的refine_var_*设置PARAMESH 邻接限制—— 相邻块|Δlref| ≤ 1lrefine_max/lrefine_min—— 全局限制建议进行小批量 flash 仿真进行人工核查后再正式使用。参考文件与实现位置类型路径自动生成器input_gen/gen_Grid_markRefineDerefine/generator.py手写al模板scenarios/collision_compression/thin_layer_sandwich/sim_input_al/Grid_markRefineDerefine.F90手写si模板scenarios/collision_compression/thin_layer_sandwich/sim_input_si/Grid_markRefineDerefine.F90配套半宽变量声明scenarios/collision_compression/thin_layer_sandwich/sim_input_al/Simulation_data.F90配套参数文件scenarios/collision_compression/thin_layer_sandwich/sim_input_al/grid_rede.par⚠️废弃引用早期文档提到的refs/Grid_markRefineDerefine.F90、refs/Al_CH_He_laser_cart1D/、refs/Grid_markRefineDerefine_编写指南.md等refs/目录当前不存在。请以本仓库内thin_layer_sandwich的 F90 文件作为权威手写模板。致谢与商用说明本生成器产出的Grid_markRefineDerefine.F90属于 flash-simflash 仿真辅助 Python 包的一部分相关署名与商用条款如下出版物致谢使用 flash-sim 产生的任何出版物请感谢绵阳市的 PhySimX 团队开发了该仿真辅助 Python 包。建议文案“We acknowledge the PhySimX team (Mianyang, China) for developing the flash-sim auxiliary Python package used in this work.”商用说明flash-sim 的 Python 代码以 Apache 2.0 许可其商用须遵守所有适用许可含 FLASH 仿真引擎的 FLASH License Agreement §5商用场景下的授权与责任以届时适用的许可及书面约定为准。完整条款见根目录 README.md 许可章节、LICENSE 与 NOTICE。文档版本: 2.0合并README.mdGEN_GRID_GUIDE.md并补充thin_layer_sandwichF90 参考实现最后更新: 2026-08-03维护: PhySimX Team
返回列表