FVCOM构建模型,利用pyhton程序制作输入input文件

在FVCOM模型构建时,常用到SMS打网格 保存得到 .grd网格文件  

FVCOM模式 模型构建中其他问题可以直接私信我 交流学习。

但是 FVCOM模式需要的四个基础输入文件 (cor.dat dep.dat grd.dat obc.dat)

用excel制作相当繁琐

所以有gen_input.py 程序 在Linux下 自动生成 这些简单而又复杂的基础输入文件

将网格文件 .grd 与程序放到同一个文件夹下

在这个目录下 执行命令

export PATH=/opt/anaconda/bin:$PATH
./gen_input.py zhoushan2.grd 127

export PATH=/opt/anaconda/bin:$PATH  表示 导入Anaconda库的路径

./gen_input.py zhoushan2.grd 127  表示 执行这个程序   

./gen_input.py 网格文件名  开边界节点数 

开边界节点数 可以从 .grd文件下面描述开边界信息处获得

然后得到FVCOM模型输入文件中四个小的固定的文件

以下是gen_input.py 的程序

#!/bin/env python
import os
import sys
import numpy as np

if len(sys.argv) < 3:
  print 'Usage: gen_input.py <sms_grd_file> <nobc>'
  sys.exit(0)

sms_grd_file = sys.argv[1]
nobc = int(sys.argv[2])

# read grid and depth from sms .grd file 
fl = open(sms_grd_file, 'r')
# read head info
fl.readline()
header = fl.readline()
tlist = header.split()
nele = int(tlist[0])
nvert = int(tlist[1])
print 'No. of triangulars:', nele
print 'No. of trangular vertexs:', nvert

x = np.zeros(nvert)
y = np.zeros(nvert)
h = np.zeros(nvert)
# read triangular vertexs
for i in range(nvert):
  line = fl.readline()
  tlist = line.split()
  #print 'vert:', tlist[0]
  if tlist[0] != str(i+1):
    print "read vertex error!"
    sys.exit(1)
  x[i] = np.fromstring(tlist[1], sep=' ')
  y[i] = np.fromstring(tlist[2], sep=' ')
  h[i] = np.fromstring(tlist[3], sep=' ')

# read triangular faces
nv = np.zeros([nele, 3])
for i in range(nele):
  line = fl.readline()
  tlist = line.split()
  #print 'face:', tlist[0]
  if tlist[0] != str(i+1):
    print "read face error!"
    sys.exit(2)
  nv[i,0] = np.fromstring(tlist[2], sep=' ')
  nv[i,1] = np.fromstring(tlist[3], sep=' ')
  nv[i,2] = np.fromstring(tlist[4], sep=' ')

fl.close()
print 'min depth: %f' % h.min()
print 'max depth: %f' % h.max()

# write fvcom grd file 
print 'writing fvcom grd file ...'
fl_grd = open('grd.dat', 'w')
fl_grd.write('Node Number = %d\n' % nvert)
fl_grd.write('Cell Number = %d\n' % nele)
for i in range(nele):
  fl_grd.write('%6d %6d %6d %6d    1\n' % (i+1, nv[i,0], nv[i,1], nv[i,2]))

for i in range(nvert):
  fl_grd.write('%6d  %f  %f  %f\n' % (i+1, x[i], y[i], 0.0))
fl_grd.close()

# write fvcom depth file
print 'writing fvcom depth file ...'
fl_dep = open('dep.dat', 'w')
fl_dep.write('Node Number = %d\n' % nvert)
for i in range(nvert):
  fl_dep.write('%f  %f  %f\n' % (x[i], y[i], np.abs(h[i])))
fl_dep.close()

# write fvcom coriolis file
print 'writing fvcom coriolis file ...'
fl_cor = open('cor.dat', 'w')
fl_cor.write('Node Number = %d\n' % nvert)
for i in range(nvert):
  corio = 2*7.292E-5 * np.sin(y[i]*np.pi/180.0)
  fl_cor.write('%f  %f  %e\n' % (x[i], y[i], corio))
fl_cor.close()

# write fvcom obc file
print 'writing fvcom obc file ...'
fl_obc = open('obc.dat', 'w')
for i in range(nobc):
  fl_obc.write('%d  %d  %d\n' % (i+1, i+1, 1))
fl_obc.close()

另外 欢迎同被FVCOM海洋数值模式的硕博共同交流、学习、进步!

  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值