@@ -1489,3 +1489,112 @@ def test_timeseries(function_tmpdir):
1489
1489
1490
1490
if not success :
1491
1491
raise AssertionError ("Timeseries split simulation did not properly run" )
1492
+
1493
+
1494
+ def test_package_observations ():
1495
+ XL = 10000
1496
+ YL = 10500
1497
+ dx = dy = 500
1498
+ nlay = 3
1499
+ nrow = int (YL / dy )
1500
+ ncol = int (XL / dx )
1501
+
1502
+ delc = np .full ((nrow ,), dy )
1503
+ delr = np .full ((ncol ,), dx )
1504
+
1505
+ top = np .full ((nrow , ncol ), 330 )
1506
+
1507
+ botm = np .zeros ((nlay , nrow , ncol ))
1508
+ botm [0 ] = 220
1509
+ botm [1 ] = 200
1510
+ botm [2 ] = 0
1511
+
1512
+ sim = flopy .mf6 .MFSimulation ()
1513
+ ims = flopy .mf6 .ModflowIms (sim , complexity = "SIMPLE" )
1514
+ tdis = flopy .mf6 .ModflowTdis (sim )
1515
+
1516
+ gwf = flopy .mf6 .ModflowGwf (sim , modelname = "ps1a_mod" )
1517
+
1518
+ dis = flopy .mf6 .ModflowGwfdis (
1519
+ gwf ,
1520
+ nlay = nlay ,
1521
+ nrow = nrow ,
1522
+ ncol = ncol ,
1523
+ delr = delr ,
1524
+ delc = delc ,
1525
+ top = top ,
1526
+ botm = botm ,
1527
+ idomain = np .ones (botm .shape , dtype = int ),
1528
+ )
1529
+
1530
+ ic = flopy .mf6 .ModflowGwfic (gwf , strt = 330 )
1531
+
1532
+ npf = flopy .mf6 .ModflowGwfnpf (
1533
+ gwf , k = [50 , 0.01 , 200 ], k33 = [10 , 0.01 , 20 ], icelltype = [1 , 0 , 0 ]
1534
+ )
1535
+
1536
+ # build the CHD stress period data
1537
+ records = []
1538
+ for row in range (nrow ):
1539
+ rec = ((0 , row , 0 ), 330 )
1540
+ records .append (rec )
1541
+
1542
+ for row in range (nrow ):
1543
+ rec = ((0 , row , ncol - 1 ), 320 )
1544
+ records .append (rec )
1545
+
1546
+ spd = {0 : records }
1547
+
1548
+ chd = flopy .mf6 .ModflowGwfchd (gwf , stress_period_data = spd )
1549
+
1550
+ observations = {
1551
+ "chd_obs_out.csv" : [
1552
+ ("C1" , "chd" , (0 , 4 , 0 )), # 80 (end up as same)
1553
+ ("C2" , "chd" , (0 , 16 , 0 )), # 320 (end up as m2 120)
1554
+ ("R1" , "chd" , (0 , 3 , 19 )), # 79 (end up as same)
1555
+ ("R2" , "chd" , (0 , 20 , 19 )), # 419 (end up as m2 219)
1556
+ ]
1557
+ }
1558
+
1559
+ # do observations on the chd package!!!!
1560
+ obs = flopy .mf6 .ModflowUtlobs (
1561
+ chd ,
1562
+ continuous = observations ,
1563
+ )
1564
+
1565
+ # now do model splitter???
1566
+ array = np .ones ((nrow , ncol ), dtype = int )
1567
+ split_loc = ncol // 2
1568
+ array [split_loc :, :] = 2
1569
+
1570
+ mfs = flopy .mf6 .utils .Mf6Splitter (sim )
1571
+ new_sim = mfs .split_model (array )
1572
+
1573
+ gwf1 = new_sim .get_model ("ps1a_mod_1" )
1574
+ gwf2 = new_sim .get_model ("ps1a_mod_2" )
1575
+
1576
+ obsdata1 = gwf1 .obs .continuous .data ["chd_obs_out_1.csv" ]
1577
+ obsdata2 = gwf2 .obs .continuous .data ["chd_obs_out_2.csv" ]
1578
+
1579
+ vdict1 = {"C1" : (0 , 4 , 0 ), "R1" : (0 , 3 , 19 )}
1580
+ vdict2 = {"C2" : (0 , 6 , 0 ), "R2" : (0 , 10 , 19 )}
1581
+
1582
+ for row in obsdata1 :
1583
+ obsname = row .obsname
1584
+ cellid = row .id
1585
+ if obsname not in vdict1 :
1586
+ raise AssertionError ("Observations not correctly mapped to new model" )
1587
+
1588
+ vcid = vdict1 [obsname ]
1589
+ if vcid != cellid :
1590
+ raise AssertionError ("Observation cellid not correctly mapped to new model" )
1591
+
1592
+ for row in obsdata2 :
1593
+ obsname = row .obsname
1594
+ cellid = row .id
1595
+ if obsname not in vdict2 :
1596
+ raise AssertionError ("Observations not correctly mapped to new model" )
1597
+
1598
+ vcid = vdict2 [obsname ]
1599
+ if vcid != cellid :
1600
+ raise AssertionError ("Observation cellid not correctly mapped to new model" )
0 commit comments