Skip to content

Commit 675a46f

Browse files
authored
Merge pull request #394 from jtwhite79/hotfix_quotes
Hotfix quotes
2 parents 9444397 + 0b71cd8 commit 675a46f

29 files changed

Lines changed: 492 additions & 190 deletions

CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ message(STATUS
1616
# This logic needs to be considered before project()
1717
set(_change_MSVC_flags FALSE)
1818
if(WIN32)
19-
add_compile_options(/bigobj)
2019
if(CMAKE_VERSION VERSION_LESS 3.15.0)
2120
set(_change_MSVC_flags TRUE)
2221
else()

benchmarks/basic_tests.py

Lines changed: 66 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,12 +8,16 @@
88
import pyemu
99

1010
bin_path = os.path.join("test_bin")
11+
plat = "unknown"
1112
if "linux" in platform.platform().lower():
1213
bin_path = os.path.join(bin_path,"linux")
14+
plat = "linux"
1315
elif "darwin" in platform.platform().lower() or "macos" in platform.platform().lower() :
1416
bin_path = os.path.join(bin_path,"mac")
17+
plat = "apple"
1518
else:
1619
bin_path = os.path.join(bin_path,"win")
20+
plat = "windows"
1721

1822
bin_path = os.path.abspath("test_bin")
1923
os.environ["PATH"] += os.pathsep + bin_path
@@ -43,6 +47,60 @@
4347
num_reals = 20
4448
port = 4021
4549

50+
51+
def nonascii_path_test(model_d="ies_10par_xsec"):
52+
pyemu.Ensemble.reseed()
53+
base_d = os.path.join(model_d, "template")
54+
new_d = os.path.join(model_d, "test_template_\u0187")
55+
if os.path.exists(new_d):
56+
shutil.rmtree(new_d)
57+
shutil.copytree(base_d, new_d)
58+
print(platform.platform().lower())
59+
pst = pyemu.Pst(os.path.join(new_d, "pest.pst"))
60+
cmd = pst.model_command[0].split()
61+
print(cmd)
62+
cmd = "\"\"{0}\" \"{1}\"\"".format(cmd[0],cmd[1])
63+
print(cmd)
64+
pst.model_command.append(cmd)
65+
cmd = pst.model_command[0].split()
66+
cmd = "\"\'{0}\' \'{1}\'\"".format(cmd[0],cmd[1])
67+
pst.model_command.append(cmd)
68+
69+
tpl_data = pst.model_input_data
70+
tpl_data["pest_file"] = tpl_data.pest_file.apply(lambda x: "\"{0}\"".format(x))
71+
tpl_data["model_file"] = tpl_data.model_file.apply(lambda x: "\"{0}\"".format(x))
72+
73+
ins_data = pst.model_output_data
74+
ins_data["pest_file"] = ins_data.pest_file.apply(lambda x: "\"{0}\"".format(x))
75+
ins_data["model_file"] = ins_data.model_file.apply(lambda x: "\"{0}\"".format(x))
76+
77+
pst.control_data.noptmax = 1
78+
pst.observation_data.loc[pst.nnz_obs_names,"weight"] = 1.0
79+
#pst.pestpp_options["panther_agent_freeze_on_fail"] = True
80+
pst.pestpp_options["ies_num_reals"] = 5
81+
pst.write(os.path.join(new_d, "pest.pst"))
82+
83+
84+
m_d = os.path.join(model_d,"master_pestpp")
85+
if os.path.exists(m_d):
86+
shutil.rmtree(m_d)
87+
shutil.copytree(new_d,m_d)
88+
89+
worker_root = os.path.join(model_d + "_\u0187")
90+
if os.path.exists(worker_root):
91+
shutil.rmtree(worker_root)
92+
os.makedirs(worker_root)
93+
try:
94+
pyemu.os_utils.start_workers(new_d, exe_path, "pest.pst", 1, master_dir=m_d,
95+
worker_root=worker_root,port=port,verbose=True)
96+
except Exception as e:
97+
if plat != "windows":
98+
raise Exception(e)
99+
else:
100+
if plat == "windows":
101+
raise Exception("should have failed")
102+
103+
46104
def basic_test(model_d="ies_10par_xsec"):
47105
pyemu.Ensemble.reseed()
48106
base_d = os.path.join(model_d, "template")
@@ -2061,11 +2119,15 @@ def mf6_v5_ies_nonpersistent_test():
20612119
assert found == num_workers
20622120

20632121

2064-
2122+
def parse_pst_test():
2123+
t_d = os.path.join("parse_pst_testfiles","kerry")
2124+
pyemu.os_utils.run("{0} control.pst".format(exe_path),cwd=t_d)
20652125

20662126

20672127
if __name__ == "__main__":
2068-
basic_test()
2128+
#parse_pst_test()
2129+
#basic_test()
2130+
nonascii_path_test()
20692131

20702132
#mf6_v5_ies_nonpersistent_test()
20712133
#large_fake_test()
@@ -2080,7 +2142,7 @@ def mf6_v5_ies_nonpersistent_test():
20802142
#plot_collapse_invest()
20812143

20822144
#run()
2083-
# mf6_v5_ies_test()
2145+
#mf6_v5_ies_test()
20842146
#prep_ends()
20852147
#sweep_bin_test()
20862148
# mf6_v5_sen_test()
@@ -2127,7 +2189,7 @@ def mf6_v5_ies_nonpersistent_test():
21272189
#mf6_v5_sen_test()
21282190

21292191
#shutil.copy2(os.path.join("..","exe","windows","x64","Debug","pestpp-opt.exe"),os.path.join("..","bin","win","pestpp-opt.exe"))
2130-
mf6_v5_opt_stack_test()
2192+
#mf6_v5_opt_stack_test()
21312193
# mf6_v5_glm_test()
21322194
# mf6_v5_ies_test()
21332195
#cmdline_test()

benchmarks/ies_10par_xsec/template/pest.pst

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -50,11 +50,9 @@ head
5050
h02_09 4.7000000000E+00 0.0000000000E+00 head
5151
h02_10 5.1000000000E+00 0.0000000000E+00 head
5252
* model command line
53-
mfnwt ./10par_xsec.nam
53+
mfnwt 10par_xsec.nam
5454
* model input/output
55-
.\hk_Layer_1.ref.tpl .\hk_Layer_1.ref
56-
.\hk_Layer_1.ref.tpl .\nested/really\deep/hk_Layer_1.ref
57-
.\strt_Layer_1.ref.tpl .\strt_Layer_1.ref
58-
.\10par_xsec.hds.ins .\10par_xsec.hds
59-
++panther_transfer_on_finish(10par_xsec.hds,10par_xsec.list)
60-
++ies_num_reals(5)
55+
hk_Layer_1.ref.tpl hk_Layer_1.ref
56+
hk_Layer_1.ref.tpl nested/really\deep/hk_Layer_1.ref
57+
strt_Layer_1.ref.tpl strt_Layer_1.ref
58+
10par_xsec.hds.ins 10par_xsec.hds

benchmarks/ies_test_part4.py

Lines changed: 159 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -631,7 +631,7 @@ def tenpar_high_phi_test():
631631
pst.pestpp_options["ies_num_reals"] = 10
632632
pst.pestpp_options["ies_lambda_mults"] = [0.5, 1.0]
633633
pst.pestpp_options["lambda_scale_fac"] = [0.9, 1.0]
634-
pst.pestpp_options['ies_subset_size'] = 3
634+
pst.pestpp_options['ies_subset_size'] = 5
635635
pst.pestpp_options["ies_debug_high_upgrade_phi"] = True
636636
pst.pestpp_options["ies_debug_fail_subset"] = True
637637
pst.pestpp_options["ies_debug_fail_remainder"] = True
@@ -652,7 +652,7 @@ def tenpar_high_phi_test():
652652
pst.pestpp_options["ies_num_reals"] = 10
653653
pst.pestpp_options["ies_lambda_mults"] = [0.5, 1.0]
654654
pst.pestpp_options["lambda_scale_fac"] = [0.9, 1.0]
655-
pst.pestpp_options['ies_subset_size'] = 3
655+
pst.pestpp_options['ies_subset_size'] = 5
656656
pst.pestpp_options["ies_debug_high_subset_phi"] = True
657657
pst.pestpp_options["ies_debug_fail_subset"] = True
658658
pst.pestpp_options["ies_debug_fail_remainder"] = True
@@ -676,7 +676,7 @@ def tenpar_high_phi_test():
676676
pst.pestpp_options["ies_num_reals"] = 10
677677
pst.pestpp_options["ies_lambda_mults"] = [0.5, 1.0]
678678
pst.pestpp_options["lambda_scale_fac"] = [0.9, 1.0]
679-
pst.pestpp_options['ies_subset_size'] = 3
679+
pst.pestpp_options['ies_subset_size'] = 5
680680
#pst.pestpp_options["ies_debug_high_subset_phi"] = True
681681
#pst.pestpp_options["ies_debug_fail_subset"] = True
682682
#pst.pestpp_options["ies_debug_fail_remainder"] = True
@@ -1141,7 +1141,7 @@ def tenpar_upgrade_on_disk_test():
11411141

11421142

11431143
def multimodal_test():
1144-
noptmax = 2
1144+
noptmax = 1
11451145
num_reals = 100
11461146
# can be "circle" or "h"
11471147
func = "circle"
@@ -1391,8 +1391,8 @@ def plot_mm1_results(noptmax=None, func="circle", show_info=False,mm_d = None):
13911391
df=pd.read_csv(fname.replace(".par.", ".obs."), index_col=0))
13921392
mm_pv = oe_pt_mm.phi_vector
13931393
pe_pr = pd.read_csv(os.path.join(mm_d, "mm1.0.par.csv"))
1394-
pe_pt_mm.index = pe_pt_mm.index.map(lambda x: str(int(np.float(x))))
1395-
pe_pr.index = pe_pr.index.map(lambda x: str(int(np.float(x))))
1394+
pe_pt_mm.index = pe_pt_mm.index.map(lambda x: str(int(float(x))))
1395+
pe_pr.index = pe_pr.index.map(lambda x: str(int(float(x))))
13961396
pe_pr.index = pe_pr.index.map(lambda x: str(x))
13971397

13981398
if show_info and noptmax > 0:
@@ -1465,7 +1465,7 @@ def h(x, y):
14651465
axes[1].imshow(H, alpha=0.7,extent=(-4,4,-4,4),cmap="jet")
14661466
H = np.flipud(H)
14671467
#axes[0].contour(X,Y,H,color="0.5",linestyles="dashed")
1468-
1468+
plt.tight_layout()
14691469
plt.savefig(os.path.join(mm_d, "compare_{0:02d}.png".format(noptmax)),dpi=1000)
14701470
plt.close(fig)
14711471

@@ -1476,6 +1476,152 @@ def h(x, y):
14761476
pyemu.os_utils.run(cmd, cwd=mm_d)
14771477

14781478

1479+
def plot_mm1_results_seq(noptmax=1, func="circle",mm_d = None):
1480+
import matplotlib.pyplot as plt
1481+
from matplotlib.patches import Circle
1482+
1483+
base_d = os.path.join("mm1", "master_base_{0}".format(func))
1484+
if mm_d is None:
1485+
mm_d = os.path.join("mm1", "master_mm_{0}_mt".format(func))
1486+
pst = pyemu.Pst(os.path.join(base_d, "mm1.pst"))
1487+
if noptmax is None:
1488+
noptmax = pst.control_data.noptmax
1489+
org_noptmax = noptmax + 1
1490+
figcount = 0
1491+
for noptmax in [1]:
1492+
fname = os.path.join(base_d, "mm1.{0}.par.csv".format(noptmax))
1493+
for i in range(noptmax):
1494+
if os.path.exists(fname):
1495+
break
1496+
fname = os.path.join(base_d, "mm1.{0}.par.csv".format(noptmax - i))
1497+
1498+
pe_pt_base = pd.read_csv(fname)
1499+
oe_pt_base = pyemu.ObservationEnsemble(pst=pst, df=pd.read_csv(fname.replace(".par.", ".obs."), index_col=0))
1500+
base_pv = oe_pt_base.phi_vector
1501+
1502+
fname = os.path.join(mm_d, "mm1.{0}.par.csv".format(noptmax))
1503+
for i in range(noptmax):
1504+
if os.path.exists(fname):
1505+
break
1506+
fname = os.path.join(mm_d, "mm1.{0}.par.csv".format(noptmax - i))
1507+
pe_pt_mm = pd.read_csv(fname,index_col=0)
1508+
pe_pt_mm.index = pe_pt_mm.index.astype(str)
1509+
oe_pt_mm = pyemu.ObservationEnsemble.from_dataframe(pst=pst,
1510+
df=pd.read_csv(fname.replace(".par.", ".obs."), index_col=0))
1511+
oe_pt_mm.index = oe_pt_mm.index.astype(str)
1512+
mm_pv = oe_pt_mm.phi_vector
1513+
mm_pv.index = mm_pv.index.astype(str)
1514+
#mm_pv.sort_values(inplace=True,ascending=False)
1515+
pe_pr = pd.read_csv(os.path.join(mm_d, "mm1.0.par.csv"),index_col=0)
1516+
pe_pr.index = pe_pr.index.astype(str)
1517+
#pe_pt_mm.index = pe_pt_mm.index.map(lambda x: str(int(float(x))))
1518+
#pe_pr.index = pe_pr.index.map(lambda x: str(int(float(x))))
1519+
#pe_pr.index = pe_pr.index.map(lambda x: str(x))
1520+
mm_info_fname = [f for f in os.listdir(mm_d) if "mm1.{0}.".format(noptmax) in f and f.endswith(".mm.info.csv")][0]
1521+
print(mm_info_fname)
1522+
1523+
mm_df = pd.read_csv(os.path.join(mm_d, mm_info_fname))
1524+
#mm_df.index = np.arange(mm_df.shape[0])
1525+
mm_df.loc[:, "pe_real_name"] = mm_df.pe_real_name.apply(lambda x: str(x))
1526+
mm_df.index = mm_df.pe_real_name
1527+
mm_df = mm_df.loc[mm_pv.index]
1528+
print(mm_df.index)
1529+
1530+
fig, ax = plt.subplots(1, 1, figsize=(6, 6))
1531+
c = Circle([0,0],1,edgecolor="r",facecolor="none")
1532+
ax.add_patch(c)
1533+
1534+
ax.scatter(pe_pr.par1.values, pe_pr.par2.values, marker=".", color="0.5", alpha=0.5)
1535+
ax.set_title("prior")
1536+
ax.set_ylabel("par2")
1537+
ax.set_xlabel("par1")
1538+
plt.tight_layout()
1539+
plt.savefig(os.path.join(mm_d, "prior.png"),dpi=1000)
1540+
ax.scatter(pe_pt_base.par1.values, pe_pt_base.par2.values, marker=".", color="b", alpha=0.5)
1541+
ax.set_title("posterior")
1542+
1543+
plt.tight_layout()
1544+
plt.savefig(os.path.join(mm_d, "standard_solution.png"),dpi=1000)
1545+
plt.close(fig)
1546+
1547+
previous_pvals = [[],[]]
1548+
ireal = 0
1549+
for mm_rname in mm_df.index:
1550+
if mm_rname not in pe_pt_mm.index:
1551+
print("missing",mm_rname)
1552+
continue
1553+
if np.abs(pe_pr.loc[mm_rname,"par1"]) < 1 and np.abs(pe_pr.loc[mm_rname,"par2"]) < 1:
1554+
print("skipping",mm_rname)
1555+
continue
1556+
nei_cols = mm_df.columns[mm_df.columns.map(lambda x: "neighbor" in x)]
1557+
mm_rnames = set(pe_pr.index.tolist())
1558+
df = mm_df.loc[mm_rname, :]
1559+
neis = df.loc[nei_cols].apply(str)
1560+
neis = neis.loc[neis.apply(lambda x: x in mm_rnames)]
1561+
df = df.loc[neis.index]
1562+
print(neis)
1563+
# print(pe_pt_mm.index)
1564+
pe_pr_nei = pe_pr.loc[neis, :]
1565+
#print(mm_rname, pe_pr.loc[mm_rname, :], pe_pt_mm.loc[mm_rname, :])
1566+
1567+
fig, ax = plt.subplots(1, 1, figsize=(6, 6))
1568+
c = Circle([0,0],1,edgecolor="r",facecolor="none")
1569+
ax.add_patch(c)
1570+
1571+
ax.scatter(pe_pr.par1.values, pe_pr.par2.values, marker=".", color="0.5", alpha=0.5)
1572+
1573+
#if len(previous_pvals[0]) > 0:
1574+
# ax.scatter(previous_pvals[0],previous_pvals[1],marker='.',color="b",alpha=0.5)
1575+
1576+
ax.scatter([pe_pr.loc[mm_rname, "par1"]], [pe_pr.loc[mm_rname, "par2"]], marker="^", color="0.5", s=50)
1577+
ax.set_title("multimodal upgrade realization {0}".format(mm_rname))
1578+
ax.set_ylabel("par2")
1579+
ax.set_xlabel("par1")
1580+
plt.tight_layout()
1581+
plt.savefig(os.path.join(mm_d, "seqcompare_{0:02d}.png".format(figcount)),dpi=1000)
1582+
figcount += 1
1583+
1584+
1585+
ax.scatter(pe_pr_nei.par1.values, pe_pr_nei.par2.values, marker=".", color="c", s=100)
1586+
plt.tight_layout()
1587+
plt.savefig(os.path.join(mm_d, "seqcompare_{0:02d}.png".format(figcount)),dpi=1000)
1588+
figcount += 1
1589+
1590+
ax.scatter([pe_pt_mm.loc[mm_rname, "par1"]], [pe_pt_mm.loc[mm_rname, "par2"]], marker="^", color="b",
1591+
s=50)
1592+
previous_pvals[0].append(pe_pt_mm.loc[mm_rname, "par1"])
1593+
previous_pvals[1].append(pe_pt_mm.loc[mm_rname, "par2"])
1594+
1595+
ax.plot([pe_pr.loc[mm_rname, "par1"],pe_pt_mm.loc[mm_rname, "par1"]],[pe_pr.loc[mm_rname, "par2"],pe_pt_mm.loc[mm_rname, "par2"]],
1596+
"b--",dashes=(1,1),lw=1.5)
1597+
plt.tight_layout()
1598+
plt.savefig(os.path.join(mm_d, "seqcompare_{0:02d}.png".format(figcount)),dpi=1000)
1599+
plt.close(fig)
1600+
figcount += 1
1601+
ireal += 1
1602+
if ireal > 10:
1603+
break
1604+
1605+
fig, ax = plt.subplots(1, 1, figsize=(6, 6))
1606+
c = Circle([0,0],1,edgecolor="r",facecolor="none")
1607+
ax.add_patch(c)
1608+
1609+
ax.scatter(pe_pr.par1.values, pe_pr.par2.values, marker=".", color="0.5", alpha=0.5)
1610+
ax.scatter(pe_pt_mm.par1.values, pe_pt_mm.par2.values, marker=".", color="b", alpha=0.5)
1611+
ax.set_title("posterior")
1612+
ax.set_ylabel("par2")
1613+
ax.set_xlabel("par1")
1614+
plt.tight_layout()
1615+
plt.savefig(os.path.join(mm_d, "seqcompare_{0:02d}.png".format(figcount)),dpi=1000)
1616+
plt.close(fig)
1617+
figcount += 1
1618+
1619+
pyemu.os_utils.run("ffmpeg -i seqcompare_02.png -vf palettegen=16 -y palette.png",
1620+
cwd=mm_d)
1621+
cmd = "ffmpeg -framerate 1 -i seqcompare_%02d.png -i palette.png -y -filter_complex "
1622+
cmd += "\"scale=720:-1:flags=lanczos[x];[x][1:v]paletteuse\" -y -final_delay 250 seqcompare.gif"
1623+
pyemu.os_utils.run(cmd, cwd=mm_d)
1624+
14791625
def mm_invest():
14801626
# model_d = "mm1"
14811627
# test_d = os.path.join(model_d,"template")
@@ -4079,7 +4225,12 @@ def tenpar_iqr_bad_phi_sigma_test():
40794225

40804226

40814227
if __name__ == "__main__":
4082-
tenpar_iqr_bad_phi_sigma_test()
4228+
tenpar_high_phi_test()
4229+
#tenpar_iqr_bad_phi_sigma_test()
4230+
#multimodal_test()
4231+
#plot_mm1_sweep_results()
4232+
#plot_mm1_results()
4233+
#plot_mm1_results_seq()
40834234
#tenpar_fixed_restart_test()
40844235
#freyberg_stacked_pe_invest()
40854236
#freyberg_mean_invest()
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
pest_file,model_file
2+
observations.ins,observations.txt
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
id,x,y,z,obsval,geometry,icpl,ground,model_bottom,z-bot,cell_disv,"(lay;icpl)",lay,obscell_xy,obscell_z,obs_zpillar,obsnme,obgnme,weight
2+
OBS1,1050,2550,-40,0.305,POINT (1050 2550),395,0.0,-200.0,160.0,395,"(0; 395)",0,"(np.float64(1066.1474805693624); np.float64(2574.632688843268))",-25.0,[ -25. -75. -150.],OBS1,caldd,5.0
3+
OBS2,1850,3550,-35,0.229,POINT (1850 3550),280,0.0,-200.0,165.0,280,"(0; 280)",0,"(np.float64(1815.049607145329); np.float64(3560.586374318919))",-25.0,[ -25. -75. -150.],OBS2,caldd,5.0
4+
OBS3,250,2350,-45,0.271,POINT (250 2350),403,0.0,-200.0,155.0,403,"(0; 403)",0,"(np.float64(402.71601423564175); np.float64(2271.747494319016))",-25.0,[ -25. -75. -150.],OBS3,caldd,5.0
5+
OBS4,750,1150,-45,0.116,POINT (750 1150),334,0.0,-200.0,155.0,334,"(0; 334)",0,"(np.float64(758.7025418640333); np.float64(1155.0187739788619))",-25.0,[ -25. -75. -150.],OBS4,caldd,5.0
6+
OBS5,2350,2350,-10,0.092,POINT (2350 2350),245,0.0,-200.0,190.0,245,"(0; 245)",0,"(np.float64(2317.9676510593804); np.float64(2316.6144324126326))",-25.0,[ -25. -75. -150.],OBS5,caldd,5.0
7+
OBS6,2450,3450,-80,0.088,POINT (2450 3450),165,0.0,-200.0,120.0,673,"(1; 165)",1,"(np.float64(2399.5532462859396); np.float64(3468.4153901146906))",-75.0,[ -25. -75. -150.],OBS6,caldd,5.0
8+
OBS7,1150,1650,-90,0.277,POINT (1150 1650),360,0.0,-200.0,110.0,868,"(1; 360)",1,"(np.float64(1147.001244348818); np.float64(1592.1513338395089))",-75.0,[ -25. -75. -150.],OBS7,caldd,5.0
9+
OBS8,1950,550,-65,0.156,POINT (1950 550),91,0.0,-200.0,135.0,599,"(1; 91)",1,"(np.float64(1964.723677149349); np.float64(536.5812289024334))",-75.0,[ -25. -75. -150.],OBS8,caldd,5.0
10+
OBS9,950,2250,-120,1.015,POINT (950 2250),377,0.0,-200.0,80.0,1393,"(2; 377)",2,"(np.float64(943.1219420733914); np.float64(2309.6464332934934))",-150.0,[ -25. -75. -150.],OBS9,caldd,5.0
11+
OBS10,350,1250,-190,1.449,POINT (350 1250),420,0.0,-200.0,10.0,1436,"(2; 420)",2,"(np.float64(338.60569833541666); np.float64(1221.7603030387622))",-150.0,[ -25. -75. -150.],OBS10,caldd,5.0
12+
OBS11,2350,1350,-150,0.222,POINT (2350 1350),227,0.0,-200.0,50.0,1243,"(2; 227)",2,"(np.float64(2367.7900815530816); np.float64(1369.8735545258714))",-150.0,[ -25. -75. -150.],OBS11,caldd,5.0
13+
OBS12,1250,3650,-175,0.52,POINT (1250 3650),497,0.0,-200.0,25.0,1513,"(2; 497)",2,"(np.float64(1283.4104239163364); np.float64(3658.708674153864))",-150.0,[ -25. -75. -150.],OBS12,caldd,5.0
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
id,x,y,z,obsval,geometry,icpl,ground,model_bottom,z-bot,cell_disv,"(lay,icpl)",lay,obscell_xy,obscell_z,obs_zpillar,obsnme,obgnme,weight
2+
OBS1,1050,2550,-40,0.305,POINT (1050 2550),395,0.0,-200.0,160.0,395,"(0, 395)",0,"(np.float64(1066.1474805693624), np.float64(2574.632688843268))",-25.0,[ -25. -75. -150.],OBS1,caldd,5.0
3+
OBS2,1850,3550,-35,0.229,POINT (1850 3550),280,0.0,-200.0,165.0,280,"(0, 280)",0,"(np.float64(1815.049607145329), np.float64(3560.586374318919))",-25.0,[ -25. -75. -150.],OBS2,caldd,5.0
4+
OBS3,250,2350,-45,0.271,POINT (250 2350),403,0.0,-200.0,155.0,403,"(0, 403)",0,"(np.float64(402.71601423564175), np.float64(2271.747494319016))",-25.0,[ -25. -75. -150.],OBS3,caldd,5.0
5+
OBS4,750,1150,-45,0.116,POINT (750 1150),334,0.0,-200.0,155.0,334,"(0, 334)",0,"(np.float64(758.7025418640333), np.float64(1155.0187739788619))",-25.0,[ -25. -75. -150.],OBS4,caldd,5.0
6+
OBS5,2350,2350,-10,0.092,POINT (2350 2350),245,0.0,-200.0,190.0,245,"(0, 245)",0,"(np.float64(2317.9676510593804), np.float64(2316.6144324126326))",-25.0,[ -25. -75. -150.],OBS5,caldd,5.0
7+
OBS6,2450,3450,-80,0.088,POINT (2450 3450),165,0.0,-200.0,120.0,673,"(1, 165)",1,"(np.float64(2399.5532462859396), np.float64(3468.4153901146906))",-75.0,[ -25. -75. -150.],OBS6,caldd,5.0
8+
OBS7,1150,1650,-90,0.277,POINT (1150 1650),360,0.0,-200.0,110.0,868,"(1, 360)",1,"(np.float64(1147.001244348818), np.float64(1592.1513338395089))",-75.0,[ -25. -75. -150.],OBS7,caldd,5.0
9+
OBS8,1950,550,-65,0.156,POINT (1950 550),91,0.0,-200.0,135.0,599,"(1, 91)",1,"(np.float64(1964.723677149349), np.float64(536.5812289024334))",-75.0,[ -25. -75. -150.],OBS8,caldd,5.0
10+
OBS9,950,2250,-120,1.015,POINT (950 2250),377,0.0,-200.0,80.0,1393,"(2, 377)",2,"(np.float64(943.1219420733914), np.float64(2309.6464332934934))",-150.0,[ -25. -75. -150.],OBS9,caldd,5.0
11+
OBS10,350,1250,-190,1.449,POINT (350 1250),420,0.0,-200.0,10.0,1436,"(2, 420)",2,"(np.float64(338.60569833541666), np.float64(1221.7603030387622))",-150.0,[ -25. -75. -150.],OBS10,caldd,5.0
12+
OBS11,2350,1350,-150,0.222,POINT (2350 1350),227,0.0,-200.0,50.0,1243,"(2, 227)",2,"(np.float64(2367.7900815530816), np.float64(1369.8735545258714))",-150.0,[ -25. -75. -150.],OBS11,caldd,5.0
13+
OBS12,1250,3650,-175,0.52,POINT (1250 3650),497,0.0,-200.0,25.0,1513,"(2, 497)",2,"(np.float64(1283.4104239163364), np.float64(3658.708674153864))",-150.0,[ -25. -75. -150.],OBS12,caldd,5.0

0 commit comments

Comments
 (0)