PyEMU从MODFLOW6 2D横截面模型添加_参数()

2024-10-03 15:30:45 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在PyEMU设置中设置参数,使用外部数组文件为使用Flopy生成的MODLFOW 6模型设置参数。模型为二维横截面(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,par_type="grid",
      7                 par_name_base=par_name_base,pargp=pargrp,
----> 8                 upper_bound=10.,lower_bound=0.1,ult_ubound=100,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, par_type, zone_array, 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, j],
    209             )

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

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

我注意到,FloPy以20列10行的格式记录单个模型层的外部文件(总共200列模型)。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_type="grid",
      7                 par_name_base=par_name_base,pargp=pargrp,
----> 8                 upper_bound=10.,lower_bound=0.1,ult_ubound=100,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, par_type, zone_array, gpname, shape, longnames, fill_value, get_xy, input_filename, 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

Tags: nameinselfbasestyletypearraybound
1条回答
网友
1楼 · 发布于 2024-10-03 15:30:45

我认为问题在于包装格式的“特性”。PstFrom.add_parameters()方法希望数组采用nrow X ncol格式,而PstFrom不知道这种包装格式的“功能”。因此,如果将该数组的形状改为1 X 200,就可以了

相关问题 更多 >