微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

PyEMU-来自MODFLOW6 2D横截面模型的add_parameters

如何解决PyEMU-来自MODFLOW6 2D横截面模型的add_parameters

我正在尝试使用PlopE生成的MODLFOW 6模型的外部阵列文件在PyEMU设置中设置参数。该模型是2D横截面(50层,1行和200列)。

使用此代码

filenames = 'gwf.npf_k_layer1.txt'
par_name_base = 'k_layer_1'
pargrp = 'k_layer_1'

pf.add_parameters(filenames=filenames,par_type="grid",par_name_base=par_name_base,pargp=pargrp,upper_bound=10.,lower_bound=0.1,ult_ubound=100,ult_lbound=0.01)

我收到以下错误消息:

2020-11-03 11:11:37.616421 starting: adding grid type multiplier style parameters for file(s) ['gwf.npf_k_layer1.txt']
2020-11-03 11:11:37.616421 starting: loading array p1_template\gwf.npf_k_layer1.txt
2020-11-03 11:11:37.618413 finished: loading array p1_template\gwf.npf_k_layer1.txt took: 0:00:00.001992
2020-11-03 11:11:37.618413 loaded array 'gwf.npf_k_layer1.txt' of shape (10,20)
2020-11-03 11:11:37.620407 starting: writing array-based template file 'k_layer_1_inst0_grid.csv.tpl'
2020-11-03 11:11:37.621406 starting: writing template file k_layer_1_inst0_grid.csv.tpl for ['k_layer_1_inst:0']
---------------------------------------------------------------------------
IndexError                                Traceback (most recent call last)
<ipython-input-10-d946b6aed7e4> in <module>
      6 pf.add_parameters(filenames=filenames,7                 par_name_base=par_name_base,----> 8                 upper_bound=10.,ult_lbound=0.01)

C:\ProgramData\Anaconda3\lib\site-packages\pyemu\utils\pst_from.py in add_parameters(self,filenames,par_type,zone_array,dist_type,sigma_range,upper_bound,lower_bound,transform,par_name_base,index_cols,use_cols,pargp,pp_space,use_pp_zones,num_eig_kl,spatial_reference,geostruct,datetime,mfile_fmt,mfile_skip,ult_ubound,ult_lbound,rebuild_pst,alt_inst_str,comment_char,par_style)
   1504                     gpname=pargp,1505                     input_filename=in_fileabs,-> 1506                     par_style=par_style,1507                 )
   1508                 self.logger.log(

C:\ProgramData\Anaconda3\lib\site-packages\pyemu\utils\pst_from.py in write_array_tpl(name,tpl_filename,suffix,gpname,shape,longnames,fill_value,get_xy,input_filename,par_style)
   2775                 else:
   2776                     if get_xy is not None:
-> 2777                         x,y = get_xy([i,j])
   2778                         xx.append(x)
   2779                         yy.append(y)

C:\ProgramData\Anaconda3\lib\site-packages\pyemu\utils\pst_from.py in _flopy_sr_get_xy(self,args,**kwargs)
    205         else:
    206             return (
--> 207                 self._spatial_reference.xcentergrid[i,j],208                 self._spatial_reference.ycentergrid[i,209             )

IndexError: index 1 is out of bounds for axis 0 with size 1

错误消息中,我假设PyEMU正在尝试获取模型行2(不存在)中某个单元的空间参考。

我注意到FloPy以20列和10行(总共200个 model 列)的格式为单个模型层记录外部文件。 PyEMU设法写入相应.tpl文件的第一行(即前20个元素),但随后抛出错误消息。

这与我的Flopy \ MF6文件设置中的错误有关吗?还是PyEMU在读取单行模型时有问题?还是我在某个地方犯了一些愚蠢的错误

更新

在Jdub做出以下回应后,尝试使用1x200格式(nrow X ncol)重新整形外部数组。

返回以下异常:

---------------------------------------------------------------------------
Exception                                 Traceback (most recent call last)
<ipython-input-13-242b6d0c98f3> in <module>
      6 pf.add_parameters(filenames=filenames,par_style)
   2679     if len(shape) != 2:
   2680         raise Exception(
-> 2681             "write_array_tpl() error: shape '{0}' not 2D" "".format(str(shape))
   2682         )
   2683 

Exception: write_array_tpl() error: shape '(200,)' not 2D

解决方法

我认为问题是包装格式“功能”。 PstFrom.add_parameters()方法期望数组位于nrow X ncol中,并且PstFrom不知道这种包装格式“功能”。因此,如果将数组重塑为1 X 200,就应该这样做。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。