我想给我的Well文件分配一个注释掉的well ID号(对ghb单元也是这样),但是我找不到任何关于如何这样做的东西。
我写了一些东西来创建我自己的ghb文件,但是如果我试图把它加载回我的flopy mf类中,然后用mf.write_input()把它写出我的其他包,那么注释就不会留下来,它会被覆盖。
我知道在mf.wrtie_input()中我可以指定要写出什么包,如果我去掉了我之前创建的ghb文件(或well文件),那么原始文件就不会被重写,这是很好的。
但我想知道是否有一种方法可以直接将注释添加到每个包的stress_period_data中,这样我就可以将其全部包含在flopy类中。
谢谢
发布于 2018-11-12 01:51:19
就像在this示例中一样,您可以扩展默认的dtype,以包括MfList实例将携带到写入的额外属性:
well_dtype = [('k', '<i8'), ('i', '<i8'), ('j', '<i8'),('flux', '<f4'), ('wel_id', object)]
stress_period_data = np.zeros((3), dtype=well_dtype)
wel = flopy.modflow.ModflowWel(m, stress_period_data=stress_period_data, dtype=well_dtype)我不确定有没有一种简单的方法来加载带有额外属性的现有wel包--仅供参考
发布于 2018-11-13 22:06:20
我所知道的从现有包继承注释的唯一方法是以读取模式打开文件,使用列数据创建一个pandas DataFrame,然后用它构建一个新包。下面是一个示例:
import os
import pandas as pd
import flopy.modflow as fpm
from collections import OrderedDict
pak_nam = 'drn'
mf_version = 'mfnwt'
# the model from which the DRN package will be copied
inmod = fpm.Modflow.load('10kTDS.nam',
model_ws=r'..\10kTDS',
version=mf_version,
load_only=['drn'],
check=False)
# the model where the new DRN package will be attached
mf = fpm.Modflow.load('ss2010.nam',
model_ws=os.path.join('..', 'ss2010'),
version=mf_version,
load_only=['dis', 'bas6'],
check=False)
# read the contents of the DRN package
with open(inmod.drn.fn_path, 'r') as f:
lines = f.readlines()
# create pandas DataFrame
data = []
for line in lines[3:]:
pieces = line.strip().split('#')
t = pieces[0].strip().split()
remark = pieces[-1]
if t[0] == '-1':
break
else:
data.append([int(t[0]),
int(t[1]),
int(t[2]),
float(t[3]),
float(t[4]),
'# ' + remark.strip()])
pak_df = pd.DataFrame(data,
columns=['k', 'i', 'j', 'alt_va', 'cond', 'remark'])
pak_df.loc[:, ['k', 'i', 'j']] -= 1
# specify data format
formats = OrderedDict([('k', '{:>10d}'.format),
('i', '{:>10d}'.format),
('j', '{:>10d}'.format),
('alt_va', '{:>.2F}'.format),
('cond', '{:>15.6E}'.format),
('remark', '{>:50}'.format)])
# create new stress period data: for numpy record array use DataFrame.to_records()
pak_spd = {0: pak_df[list(formats.keys())].to_records(index=False)}
# attach DRN package to new model
pak = fpm.ModflowDrn(mf,
stress_period_data=pak_spd,
ipakcb=53,
options=['NOPRINT'],
filenames=os.path.join('..', 'ss2010', 'ss2010.{}'.format(pak_nam)),
dtype=pak_spd[0].dtype)
pak.write_file(check=False)https://stackoverflow.com/questions/53249936
复制相似问题