当前位置: 首页 > news >正文

gpt-5生成圆柱blockmesh脚本

用法示例

 ./genCylinderblockMesh.sh -h
Usage: ./genCylinderblockMesh.sh [--x0 X] [--y0 Y] [--z0 Z] --H HEIGHT --r RADIUS --nZ NZ [--nR NR] [--nBox NBOX] [--boxFactor BF] [--out PATH]./genCylinderblockMesh.sh --x0 10 --y0 15 --z0 20  --H 15 --r 2.5 --nZ 30 --nR  5  --nBox  10 --out ./system/blockMeshDict

结果
在这里插入图片描述

在这里插入图片描述

脚本

#!/usr/bin/env bash
# Generate blockMeshDict for OpenFOAM-2.3.x using arc edges (no geometry/project).
# Parameters:
#   --x0, --y0 : cylinder center (default 0, 0)
#   --z0       : start z (default 0)
#   --H        : cylinder height (REQUIRED)
#   --r        : cylinder radius (REQUIRED)
#   --nR       : radial divisions in ring blocks (default 4)
#   --nBox     : divisions of inner square per side (default 10)
#   --nZ       : axial divisions (REQUIRED)
#   --boxFactor: inner square half-length = boxFactor * r (default 0.5)
#   --out      : output path (default blockMeshDict)
#
# Example:
#   ./gen_blockMesh.sh --H 0.4 --r 0.02 --nZ 160 --out system/blockMeshDictset -euo pipefail
export LC_ALL=C# defaults
x0=0.0
y0=0.0
z0=0.0
H=""
r=""
nR=4
nBox=10
nZ=""
boxFactor=0.5
out="blockMeshDict"# parse args
while [[ $# -gt 0 ]]; docase "$1" in--x0) x0="$2"; shift 2;;--y0) y0="$2"; shift 2;;--z0) z0="$2"; shift 2;;--H)  H="$2";  shift 2;;--r)  r="$2";  shift 2;;--nR) nR="$2"; shift 2;;--nBox) nBox="$2"; shift 2;;--nZ) nZ="$2"; shift 2;;--boxFactor) boxFactor="$2"; shift 2;;--out) out="$2"; shift 2;;-h|--help)echo "Usage: $0 [--x0 X] [--y0 Y] [--z0 Z] --H HEIGHT --r RADIUS --nZ NZ [--nR NR] [--nBox NBOX] [--boxFactor BF] [--out PATH]"exit 0;;*) echo "Unknown arg: $1" >&2; exit 1;;esac
done# required checks
if [[ -z "${H}" || -z "${r}" || -z "${nZ}" ]]; thenecho "Error: --H, --r, and --nZ are required. Try -h for help." >&2exit 1
fi# compute derived values using awk (portable float math)
read -r zMin zMax box rs2 cx cy <<< "$(awk -v z0="$z0" -v H="$H" -v r="$r" -v bf="$boxFactor" -v x0="$x0" -v y0="$y0" 'BEGIN{zMin = z0; zMax = z0 + H;box  = bf * r;rs2  = r / sqrt(2.0);printf("%.10f %.10f %.10f %.10f %.10f %.10f", zMin, zMax, box, rs2, x0, y0);}'
)"# helper to format a point (center + offset)
pt() {# $1: dx, $2: dy, $3: zawk -v cx="$cx" -v cy="$cy" -v dx="$1" -v dy="$2" -v z="$3" 'BEGIN{printf("(%.10f %.10f %.10f)", cx+dx, cy+dy, z);}'
}# helper for arc mid points (center + offset)
mid() {# $1: mx, $2: my, $3: zawk -v cx="$cx" -v cy="$cy" -v mx="$1" -v my="$2" -v z="$3" 'BEGIN{printf("(%.10f %.10f %.10f)", cx+mx, cy+my, z);}'
}# ensure output dir
mkdir -p "$(dirname "$out")"# generate blockMeshDict
cat > "$out" <<EOF
/*--------------------------------*- C++ -*----------------------------------*\\
| =========                 |                                                 |
| \\\\      /  Field          | OpenFOAM: The Open Source CFD Toolbox           |
|  \\\\    /   Operation      | Version:  2.3.x                                 |
|   \\\\  /    And            | Web:      www.OpenFOAM.org                      |
|    \\\\/     Manipulation   |                                                 |
\\*---------------------------------------------------------------------------*/
FoamFile
{version     2.0;format      ascii;class       dictionary;object      blockMeshDict;
}// Auto-generated: x0=${cx}, y0=${cy}, z in [${zMin}, ${zMax}], r=${r}, box=${box}, nR=${nR}, nBox=${nBox}, nZ=${nZ}convertToMeters 1;vertices
(// Inner square @ zMin$(pt -$box -$box $zMin)   // 0$(pt  $box -$box $zMin)   // 1$(pt -$box  $box $zMin)   // 2$(pt  $box  $box $zMin)   // 3// Outer ring @ zMin (45-degree points)$(pt -$rs2 -$rs2 $zMin)   // 4$(pt  $rs2 -$rs2 $zMin)   // 5$(pt -$rs2  $rs2 $zMin)   // 6$(pt  $rs2  $rs2 $zMin)   // 7// Inner square @ zMax$(pt -$box -$box $zMax)   // 8$(pt  $box -$box $zMax)   // 9$(pt -$box  $box $zMax)   // 10$(pt  $box  $box $zMax)   // 11// Outer ring @ zMax$(pt -$rs2 -$rs2 $zMax)   // 12$(pt  $rs2 -$rs2 $zMax)   // 13$(pt -$rs2  $rs2 $zMax)   // 14$(pt  $rs2  $rs2 $zMax)   // 15
);blocks
(// ring blocks + center blockhex ( 4  5  1  0 12 13  9  8) (${nBox} ${nR} ${nZ}) simpleGrading (1 1 1)hex ( 4  0  2  6 12  8 10 14) (${nR} ${nBox} ${nZ}) simpleGrading (1 1 1)hex ( 1  5  7  3  9 13 15 11) (${nR} ${nBox} ${nZ}) simpleGrading (1 1 1)hex ( 2  3  7  6 10 11 15 14) (${nBox} ${nR} ${nZ}) simpleGrading (1 1 1)hex ( 0  1  3  2  8  9 11 10) (${nBox} ${nBox} ${nZ}) simpleGrading (1 1 1)
);edges
(// arcs @ zMinarc 4 5  $(mid  0.0 -$r $zMin)arc 5 7  $(mid   $r  0.0 $zMin)arc 6 7  $(mid  0.0  $r  $zMin)arc 4 6  $(mid  -$r  0.0 $zMin)// arcs @ zMaxarc 12 13 $(mid  0.0 -$r $zMax)arc 13 15 $(mid   $r  0.0 $zMax)arc 12 14 $(mid  -$r  0.0 $zMax)arc 14 15 $(mid  0.0  $r  $zMax)
);boundary
(INLET{type patch;faces((0 1 3 2)(0 2 6 4)(0 1 5 4)(1 5 7 3)(2 3 7 6));}OUTLET{type patch;faces((8  9 11 10)(8 10 14 12)(8  9 13 12)(9 13 15 11)(10 11 15 14));}WALL{type wall;faces((4  12 14  6)(4   5 13 12)(5  13 15  7)(6   7 15 14));}
);// ************************************************************************* //
EOFecho "Generated: $out"
http://www.dtcms.com/a/355612.html

相关文章:

  • UDS NRC24
  • 修改win11任务栏时间字体和小图标颜色
  • Graphpad Prism Mac医学绘图工具
  • GraphRAG技术深度解析:重新定义智能问答的未来
  • 数据结构初阶:详解顺序表OJ题
  • CUDA 矩阵分块乘法
  • Rust Web开发指南 第六章(动态网页模板技术-MiniJinja速成教程)
  • Docker 核心技术:Union File System
  • 知微集:梯度下降详解
  • 编写TreeMap自定义排序的插曲
  • 信号量使用流程
  • 多媒体内容智能检索技术进展
  • [特殊字符] ​​MySQL性能参数查询总结​
  • 146-延长无线传感器网络生命周期的睡眠调度机制的混合元启发式优化方法!
  • [RK3576][Android14] Android->添加以太网MAC地址选项
  • Spring Boot 实战:接入 DeepSeek API 实现问卷文本优化
  • FFmpeg 实战:从零开始写一个简易视频播放器
  • 视频层和叠加层
  • 数据结构:冒泡排序 (Bubble Sort)
  • Android14 USB子系统的启动以及动态切换相关的init.usb.rc详解
  • mysql主从复制GTID模式
  • Day16_【机器学习—模型拟合问题】
  • AI智能能源管理系统深度剖析:从工业节能到数据中心降耗,解锁企业降本减排新方案
  • Docker 40个自动化管理脚本-1 (20/40)
  • CVPR2019 Oral论文《Side Window Filtering》解读及算法 Python 实现
  • 网络编程3-UDP协议
  • Megatron-Energon 和 Megatron-LM
  • 解锁五大联赛数据:API技术指南
  • Python在AI与数据科学工作流中的新角色:2025年实践指南
  • X-AnyLabeling:Win10上安装使用X-AnyLabeling标注工具