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

fvcom 网格文件grd制作

==fvcom 网格文件grd制作====持续更新====20250629===

本次案例网格和水深展示

在这里插入图片描述

image
Figure 1 Model domain

本次制作其它驱动文件的输入文件为yellowsea.2dm

格式2dm; 文件内容格式详细介绍参考:

https://www.xmswiki.com/wiki/SMS:2D_Mesh_Files_*.2dm

制作方法可以参考往期教学:

matlab读取shp文件做SMS的输入文件cst【FVCOM,SCHISM】

【教程制作】从google map提取作为SMS可使用的cst格式的岸线

【matlab教程】matlab画fvcom网格sms网格==仅是展示作用;

模式打网格不只SMS

模式网格制作:SMS===这里最后一步选择保存为2dm格式. 而不是grd格式

【再次感谢烟台海岸带所的学者来稿】制作FVCOM边界潮汐高程的输入文件

上节我们跑通了河流案例=====

我们可以打开看里面文件的格式:

tst_grd.dat:

图片
图片
格式很简单:

先两行网格点数目和三角形数目

后续就是跟上三角形坐标以及网格点坐标

因此,写了一个matlab/python代码用于读取yellowsea.2dm然后输出为yellowsea_grd.dat

好几种做法:

第一个直接调用fvcom 函数包:

PyFVCOM
pip install PyFVCOM

引用:Cazenave, P. W. et al. (2018). PyFVCOM (version x.x.x) [software]. Plymouth, Devon, United Kingdom: Plymouth Marine Laboratory. https://doi.org/10.5281/zenodo.1422462

运行如下命令:

from datetime import datetime
import PyFVCOM as pf
import multiprocessing

def main():

Define a start, end and sampling interval for the tidal data

start = datetime.strptime(‘2016-01-01’, ‘%Y-%m-%d’)
end = datetime.strptime(‘2016-12-31’, ‘%Y-%m-%d’)
interval = 1 / 24 # 1 hourly in units of days
model = pf.preproc.Model(start, end, ‘yellowsea.2dm’, sampling=interval,
native_coordinates=‘spherical’, zone=50)

Write out the files for FVCOM.

model.write_grid(‘yellowsea_grd.dat’, depth_file=‘yellowsea_dep.dat’)
if name == ‘main’:
multiprocessing.freeze_support() # Windows上防止多进程问题
main()

图片
即可得到!

但这里的grd文件有一处不一样:

对于三角形,他的最后一列是和第一列一样了序号增长:

对于node点,最后一列你存储了水深也没改为0;应该不耽误跑。但

图片
图片

为此,可以自己写一个,直接读取python_2dm_write_grd.py符合格式的:python 和matlab 双版本的,目的格式和示例格式一致!两种都跑通!经过测试。但最终需要经过fvcom运行测试!

图片
图片
第三列为1;

水深最后一列为0;

图片
图片

python (python_2dm_write_grd.py)

python_2dm_write_grd.py==

def read_2dm_file(filename):
elements = []
nodes = []
with open(filename, ‘r’) as file:
for line in file:
if line.startswith(“E3T”):# 读取三角形
parts = line.strip().split()

E3T id n1 n2 n3 material

elements.append([int(parts[1]), int(parts[2]), int(parts[3]), int(parts[4]), int(parts[5])])
elif line.startswith(“ND”):# 读取node点
parts = line.strip().split()

ND id x y z

nodes.append([int(parts[1]), float(parts[2]), float(parts[3]), float(parts[4])])
return elements, nodes

def write_grd_file(output_filename, elements, nodes):
with open(output_filename, ‘w’) as f:# 写到grd文件
f.write(f"Node Number = {len(nodes)}\n")
f.write(f"Cell Number = {len(elements)}\n")

写入每个单元(单元编号、节点编号1、2、3、材质)

for elem in elements:
f.write(f"{elem[0]:6d} {elem[1]:6d} {elem[2]:6d} {elem[3]:6d} {elem[4]:6d}\n")

写入每个节点(节点编号、x、y、z)

for node in nodes:

设置最后一列为 0.0(你要求 ND 的 z 统一为 0)

f.write(f"{node[0]:6d} {node[1]:.8e} {node[2]:.8e} 0.00000000e+00\n")

def main():
input_2dm = “yellowsea.2dm”
output_grd = “yellowsea_grd_myself.dat”
elements, nodes = read_2dm_file(input_2dm)

按照元素编号和节点编号排序(可选)

elements.sort(key=lambda x: x[0])
nodes.sort(key=lambda x: x[0])

write_grd_file(output_grd, elements, nodes)

print(f"Successfully converted {input_2dm} to {output_grd}")

if name == “main”:
main()

海洋与大气科学

==convert_2dm_to_grd_main.m

clear;clc;close all;

% use function ===

% 海洋与大气科学: 20250629

convert_2dm_to_grd(‘yellowsea.2dm’, ‘yellowsea_grd.dat’)

http://www.lryc.cn/news/576737.html

相关文章:

  • 日线周线MACD指标使用图文教程,通达信指标
  • 什么是零知识证明(Zero-Knowledge Proof, ZKP)
  • BF的数据结构题单-省选根号数据结构 - 题单 - 洛谷 计算机科学教育新生态
  • 基于开源AI智能名片链动2+1模式S2B2C商城小程序源码的用户价值对接机制研究
  • IDE/IoT/实践小熊派LiteOS工程配置、编译、烧录、调试(基于 bearpi-iot_std_liteos 源码)
  • 阿里云-接入SLS日志
  • 抗辐照芯片技术在商业卫星领域的应用与突破
  • C++ 第四阶段 STL 容器 - 第一讲:详解 std::vector
  • llama.cpp学习笔记:后端加载
  • M1芯片最终oracle成功版本拉取方法及配置
  • 【Linux庖丁解牛】— 文件系统!
  • JDK21 基于 Spring-AI 集成大模型实现聊天机器人
  • 【智能协同云图库】智能协同云图库第三弹:基于腾讯云 COS 对象存储—开发图片模块
  • Leetcode 3598. Longest Common Prefix Between Adjacent Strings After Removals
  • [database] Closure computation | e-r diagram | SQL
  • 【LeetCode 热题 100】560. 和为 K 的子数组——(解法二)前缀和+哈希表
  • swift-22-面向协议编程、响应式编程
  • SpringSecurity6-oauth2-三方gitee授权-授权码模式
  • 加密货币:USDC和比特币有什么区别?
  • web3区块链-ETH以太坊
  • 代理模式 - Flutter中的智能替身,掌控对象访问的每一道关卡!
  • aws(学习笔记第四十八课) appsync-graphql-dynamodb
  • Docker错误问题解决方法
  • Keil MDK 的 STM32 开发问题:重定向 printf 函数效果不生效(Keil MDK 中标准库未正确链接)
  • 基于springboot+vue的数字科技风险报告管理系统
  • 现代 JavaScript (ES6+) 入门到实战(一):告别 var!拥抱 let 与 const,彻底搞懂作用域
  • 领域驱动设计(DDD)【23】之泛化:从概念到实践
  • 网络缓冲区
  • DOP数据开放平台(真实线上项目)
  • 马斯克的 Neuralink:当意念突破肉体的边界,未来已来