mf6adj demonstration using the structured Freyberg model
In this notebook, we walk through a standard mf6adj workflow to calculate sensitivities for several different performance measures using the Freyberg model.
Import Packages
[1]:
import os
import pathlib as pl
import platform
import shutil
import sys
from datetime import datetime
import flopy
import h5py
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import pyemu
[2]:
try:
import mf6adj
except ImportError:
sys.path.insert(0, str(pl.Path("../").resolve()))
import mf6adj
[3]:
mf6_bin, lib_name = mf6adj.get_conda_mf6_paths()
print(f"Using MF6 binary: {mf6_bin}")
print(f"Using MF6 library: {lib_name}")
Using MF6 binary: /home/runner/work/mf6adj/mf6adj/.pixi/envs/default/bin/mf6
Using MF6 library: /home/runner/work/mf6adj/mf6adj/.pixi/envs/default/bin/libmf6.so
Copy the MODFLOW Model
[4]:
org_ws = pl.Path("..") / "autotest" / "freyberg_structured"
assert pl.Path(org_ws).exists()
Set up a local copy of the model files.
[5]:
ws = pl.Path("freyberg")
if pl.Path(ws).exists():
shutil.rmtree(ws)
[6]:
shutil.copytree(org_ws, ws)
[6]:
PosixPath('freyberg')
Copy the required local Python packages into the working directory.
[7]:
sim = flopy.mf6.MFSimulation.load(sim_ws=ws)
m = sim.get_model()
loading simulation...
loading simulation name file...
loading tdis package...
loading model gwf6...
loading package dis...
loading package ic...
loading package npf...
loading package sto...
loading package oc...
loading package wel...
loading package rch...
loading package ghb...
loading package sfr...
loading package obs...
loading solution package freyberg6...
[8]:
ib = m.dis.idomain.array[0, :, :].astype(float)
ib[ib > 0] = np.nan
ib_cmap = plt.get_cmap("Greys_r")
ib_cmap.set_bad(alpha=0.0)
def plot_model(arr, units=None):
arr[~np.isnan(ib)] = np.nan
fig, ax = plt.subplots(1, 1, figsize=(6, 6))
cb = ax.imshow(arr, cmap="plasma")
plt.colorbar(cb, ax=ax, label=units)
plt.imshow(ib, cmap=ib_cmap)
return fig, ax
[9]:
fig, ax = plot_model(m.dis.top.array[:, :])
_ = ax.set_title("top")
Run the existing model in our local workspace.
[10]:
pyemu.os_utils.run(mf6_bin.name, cwd=ws)
mf6
MODFLOW 6
U.S. GEOLOGICAL SURVEY MODULAR HYDROLOGIC MODEL
VERSION 6.8.0.dev0+a6a4984.dirty
***DEVELOP MODE***
MODFLOW 6 compiled Jun 01 2026 18:46:14 with Intel(R) Fortran Intel(R) 64
Compiler Classic for applications running on Intel(R) 64, Version 2021.6.0
Build 20220226_000000
This software is preliminary or provisional and is subject to
revision. It is being provided to meet the need for timely best
science. The software has not received final approval by the U.S.
Geological Survey (USGS). No warranty, expressed or implied, is made
by the USGS or the U.S. Government as to the functionality of the
software and related material nor shall the fact of release
constitute any such warranty. The software is provided on the
condition that neither the USGS nor the U.S. Government shall be held
liable for any damages resulting from the authorized or unauthorized
use of the software.
MODFLOW runs in SEQUENTIAL mode
Run start date and time (yyyy/mm/dd hh:mm:ss): 2026/06/02 16:40:00
Writing simulation list file: mfsim.lst
Using Simulation name file: mfsim.nam
Solving: Stress period: 1 Time step: 1
Solving: Stress period: 2 Time step: 1
Solving: Stress period: 3 Time step: 1
Solving: Stress period: 4 Time step: 1
Solving: Stress period: 5 Time step: 1
Solving: Stress period: 6 Time step: 1
Solving: Stress period: 7 Time step: 1
Solving: Stress period: 8 Time step: 1
Solving: Stress period: 9 Time step: 1
Solving: Stress period: 10 Time step: 1
Solving: Stress period: 11 Time step: 1
Solving: Stress period: 12 Time step: 1
Solving: Stress period: 13 Time step: 1
Solving: Stress period: 14 Time step: 1
Solving: Stress period: 15 Time step: 1
Solving: Stress period: 16 Time step: 1
Solving: Stress period: 17 Time step: 1
Solving: Stress period: 18 Time step: 1
Solving: Stress period: 19 Time step: 1
Solving: Stress period: 20 Time step: 1
Solving: Stress period: 21 Time step: 1
Solving: Stress period: 22 Time step: 1
Solving: Stress period: 23 Time step: 1
Solving: Stress period: 24 Time step: 1
Solving: Stress period: 25 Time step: 1
Run end date and time (yyyy/mm/dd hh:mm:ss): 2026/06/02 16:40:00
Elapsed run time: 0.491 Seconds
Normal termination of simulation.
Now plot some heads.
[11]:
hds = flopy.utils.HeadFile(pl.Path(ws) / "freyberg6_freyberg.hds")
final_arr = hds.get_data()
fig, ax = plot_model(final_arr[0, :, :], units="meters")
ax.set_title("layer 1 final heads")
[11]:
Text(0.5, 1.0, 'layer 1 final heads')
Nice. You can see the SFR network running north-south in the 15th column.
The main requirement for using mf6adj is an input file that describes the performance measures. Fortunately, this file follows a modern format similar to other MF6 input files. Here we will create one programmatically while also describing the performance-measure formats that are supported.
[12]:
pm_fname = "freyberg_perfmeas.dat"
fpm = open(pl.Path(ws) / pm_fname, "w")
The simplest type of performance measure is a single simulated head at one location and one simulation time. Let’s make one of those.
[13]:
layer, row, col = 1, 5, 5 # the layer row and column
sp, ts = 24, 1 # stress period and time step
pm_name = "pm_single"
fpm.write(f"begin performance_measure {pm_name}\n")
fpm.write(f"{sp} {ts} {layer} {row} {col} head direct 1.0 -1e30\n")
fpm.write("end performance_measure\n\n")
[13]:
25
That is all it takes. The line in the performance-measure record tells mf6adj the spatial and temporal information it needs, the type of performance measure (head), and the form of the measure (direct or residual). The final two entries are the weight and the observed value. The observed value is not used for direct performance measures, but it still must be supplied as a valid floating-point value.
Now let’s make a more complex direct performance measure using the same layer-row-column location across all simulation times.
[14]:
layer, row, col = 1, 5, 5 # the layer row and column
pm_name = "pm_single_alltimes"
fpm.write(f"begin performance_measure {pm_name}\n")
for kper in range(sim.tdis.nper.data):
fpm.write(f"{kper + 1} {ts} {layer} {row} {col} head direct 1.0 -1e30\n")
fpm.write("end performance_measure\n\n")
[14]:
25
Now let’s step it up and make a residual performance measure, which is a sum-of-squared weighted residual measure. To use this form, we need observed values, so we will create some noisy values from the simulated results. We’ll use all layer-row-column locations in the MF6 head-observation package.
[15]:
lrcs = []
k_dict = {}
with open(pl.Path(ws) / "head.obs", "r") as f:
f.readline()
for line in f:
if line.strip().lower().startswith("end"):
break
raw = line.strip().split()
lrcs.append(" ".join(raw[2:]))
k = int(raw[2]) - 1
i = int(raw[3]) - 1
j = int(raw[4]) - 1
if k not in k_dict:
k_dict[k] = []
k_dict[k].append([i, j])
Make some synthetic observations by adding noise to the simulated values. In practice, we would only have measured heads from the past, so let’s create observations for just the first 11 stress periods.
[16]:
np.random.seed(11111)
hist_nper = 11
obs_vals = {}
for lrc in lrcs:
kij = [int(i) - 1 for i in lrc.split()]
vals = final_arr[kij[0], kij[1], kij[2]] + np.random.normal(0, 1, hist_nper)
obs_vals[lrc] = vals
[17]:
pm_name = "pm_ssr"
fpm.write(f"begin performance_measure {pm_name}\n")
for kper in range(hist_nper):
for lrc in lrcs:
fpm.write(f"{kper + 1} {ts} {lrc} head residual 1.0 {obs_vals[lrc][kper]}\n")
fpm.write("end performance_measure\n\n")
[17]:
25
Now for something more interesting: mf6adj also supports flux-based performance measures, which yield the sensitivity of a simulated flux to the model inputs. These can be described just as granularly as head-based performance measures. Here we will look at the sensitivity of simulated surface-water/groundwater flux between the groundwater system and SFR during the 23rd stress period, which is a dry period. This is effectively a prediction-focused performance measure, and we will use the two
boundname groupings in the SFR input.
[18]:
sfr_data = pd.DataFrame.from_records(m.sfr.packagedata.array)
bnames = sfr_data.boundname.unique()
bnames.sort()
sp = 23
for bname in bnames:
bdf = sfr_data.loc[sfr_data.boundname == bname, :].copy()
fpm.write(f"begin performance_measure {bname}\n")
for kij in bdf.cellid.values:
fpm.write(
f"{23} 1 {kij[0] + 1} {kij[1] + 1} {kij[2] + 1} sfr_1 direct 1.0 -1.0e+30\n"
)
fpm.write("end performance_measure\n\n")
There is something new in that record line: sfr_1 is the name of the boundary package in the MF6 GWF name file. mf6adj also supports WEL, GHB, RIV, and CHD packages for flux-based performance measures.
Now let’s define a performance measure that combines the historical groundwater-level measures and the predictive sw-gw exchange flux.
[19]:
pm_name = "pm_combo"
fpm.write(f"begin performance_measure {pm_name}\n")
for kper in range(hist_nper):
for lrc in lrcs:
fpm.write(f"{kper + 1} {ts} {lrc} head direct 1.0 -1.0e30\n")
for bname in bnames:
bdf = sfr_data.loc[sfr_data.boundname == bname, :].copy()
for kij in bdf.cellid.values:
fpm.write(
f"{23} 1 {kij[0] + 1} {kij[1] + 1} {kij[2] + 1} sfr_1 direct 1 -1.0e+30\n"
)
fpm.write("end performance_measure\n\n")
[19]:
25
[20]:
fpm.close()
Run mf6adj
Now we should be ready to go. The adjoint solution process requires one forward model run and then a solve for the adjoint state, which uses the forward solution components (for example, the conductance matrix, RHS, heads, and saturation). The adjoint solve has two important characteristics: it is linear, regardless of the forward model’s linearity, and it proceeds backward in time, starting with the last stress period.
[21]:
forward_hdf5_name = "forward.hdf5"
start = datetime.now()
adj = mf6adj.Mf6Adj(
pm_fname,
str(lib_name),
logging_level="INFO",
working_directory=ws,
)
adj.solve_forward_model(
hdf5_name=forward_hdf5_name
) # solve the standard forward solution
dfsum = adj.solve_adjoint() # solve the adjoint state for each performance measure
adj.finalize() # release components
duration = (datetime.now() - start).total_seconds()
print("took:", duration)
2026-06-02 16:40:01,063 - Logger instance 'Mf6Adj-freyberg_perfmeas-aec42dff' created.
2026-06-02 16:40:01,063 - Running from /home/runner/work/mf6adj/mf6adj/examples/freyberg
2026-06-02 16:40:01,065 - Structured grid found
2026-06-02 16:40:01,088 - MODFLOW 6 version: 6.8.0.dev0
2026-06-02 16:40:01,089 - Processing adjoint file: freyberg_perfmeas.dat
2026-06-02 16:40:01,097 - Starting flow solution
2026-06-02 16:40:01,140 - Flow (stress period,time step) (1,1) converged in 10 iters, took 0.00067 mins
2026-06-02 16:40:01,166 - Flow (stress period,time step) (2,1) converged in 4 iters, took 0.00025392 mins
2026-06-02 16:40:01,189 - Flow (stress period,time step) (3,1) converged in 3 iters, took 0.00021007 mins
2026-06-02 16:40:01,213 - Flow (stress period,time step) (4,1) converged in 3 iters, took 0.0002209 mins
2026-06-02 16:40:01,236 - Flow (stress period,time step) (5,1) converged in 3 iters, took 0.00021245 mins
2026-06-02 16:40:01,262 - Flow (stress period,time step) (6,1) converged in 4 iters, took 0.00025917 mins
2026-06-02 16:40:01,288 - Flow (stress period,time step) (7,1) converged in 4 iters, took 0.0002533 mins
2026-06-02 16:40:01,315 - Flow (stress period,time step) (8,1) converged in 5 iters, took 0.00027733 mins
2026-06-02 16:40:01,343 - Flow (stress period,time step) (9,1) converged in 5 iters, took 0.00028693 mins
2026-06-02 16:40:01,367 - Flow (stress period,time step) (10,1) converged in 4 iters, took 0.00023487 mins
2026-06-02 16:40:01,392 - Flow (stress period,time step) (11,1) converged in 4 iters, took 0.00023588 mins
2026-06-02 16:40:01,416 - Flow (stress period,time step) (12,1) converged in 3 iters, took 0.00021877 mins
2026-06-02 16:40:01,441 - Flow (stress period,time step) (13,1) converged in 4 iters, took 0.00025493 mins
2026-06-02 16:40:01,466 - Flow (stress period,time step) (14,1) converged in 4 iters, took 0.00024375 mins
2026-06-02 16:40:01,490 - Flow (stress period,time step) (15,1) converged in 3 iters, took 0.00021372 mins
2026-06-02 16:40:01,512 - Flow (stress period,time step) (16,1) converged in 3 iters, took 0.00020752 mins
2026-06-02 16:40:01,536 - Flow (stress period,time step) (17,1) converged in 3 iters, took 0.000209 mins
2026-06-02 16:40:01,561 - Flow (stress period,time step) (18,1) converged in 4 iters, took 0.00024895 mins
2026-06-02 16:40:01,591 - Flow (stress period,time step) (19,1) converged in 6 iters, took 0.0003155 mins
2026-06-02 16:40:01,619 - Flow (stress period,time step) (20,1) converged in 5 iters, took 0.00029212 mins
2026-06-02 16:40:01,646 - Flow (stress period,time step) (21,1) converged in 5 iters, took 0.0002831 mins
2026-06-02 16:40:01,670 - Flow (stress period,time step) (22,1) converged in 4 iters, took 0.00023028 mins
2026-06-02 16:40:01,694 - Flow (stress period,time step) (23,1) converged in 3 iters, took 0.00021218 mins
2026-06-02 16:40:01,719 - Flow (stress period,time step) (24,1) converged in 4 iters, took 0.00024288 mins
2026-06-02 16:40:01,743 - Flow (stress period,time step) (25,1) converged in 3 iters, took 0.00023355 mins
2026-06-02 16:40:01,754 - Flow solution finished and took 0.010937 minutes
2026-06-02 16:40:01,765 - Starting solve_adjoint at 2026-06-02 16:40:01.765090
2026-06-02 16:40:01,800 - Structured grid found, shape: (3, 40, 20)
2026-06-02 16:40:01,802 - Starting adjoint solve for PerfMeas: pm_single (kper, kstp) (25, 1)
2026-06-02 16:40:01,804 - Solving for lambda
2026-06-02 16:40:01,805 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:01,813 - Solving for lambda took: 0.008866 seconds
2026-06-02 16:40:01,850 - Adjoint solve took: 0.048097 seconds to solve adjoint solution for PerfMeas: pm_single (kper, kstp) (25, 1)
2026-06-02 16:40:01,851 - Write group to hdf file
2026-06-02 16:40:01,860 - Starting adjoint solve for PerfMeas: pm_single (kper, kstp) (24, 1)
2026-06-02 16:40:01,862 - Solving for lambda
2026-06-02 16:40:01,862 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:01,870 - Solving for lambda took: 0.008578 seconds
2026-06-02 16:40:01,908 - Adjoint solve took: 0.04838 seconds to solve adjoint solution for PerfMeas: pm_single (kper, kstp) (24, 1)
2026-06-02 16:40:01,909 - Write group to hdf file
2026-06-02 16:40:01,918 - Starting adjoint solve for PerfMeas: pm_single (kper, kstp) (23, 1)
2026-06-02 16:40:01,919 - Solving for lambda
2026-06-02 16:40:01,920 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:01,928 - Solving for lambda took: 0.008693 seconds
2026-06-02 16:40:01,966 - Adjoint solve took: 0.048021 seconds to solve adjoint solution for PerfMeas: pm_single (kper, kstp) (23, 1)
2026-06-02 16:40:01,966 - Write group to hdf file
2026-06-02 16:40:01,975 - Starting adjoint solve for PerfMeas: pm_single (kper, kstp) (22, 1)
2026-06-02 16:40:01,976 - Solving for lambda
2026-06-02 16:40:01,977 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:01,985 - Solving for lambda took: 0.008689 seconds
2026-06-02 16:40:02,022 - Adjoint solve took: 0.047828 seconds to solve adjoint solution for PerfMeas: pm_single (kper, kstp) (22, 1)
2026-06-02 16:40:02,023 - Write group to hdf file
2026-06-02 16:40:02,031 - Starting adjoint solve for PerfMeas: pm_single (kper, kstp) (21, 1)
2026-06-02 16:40:02,033 - Solving for lambda
2026-06-02 16:40:02,034 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:02,042 - Solving for lambda took: 0.008762 seconds
2026-06-02 16:40:02,079 - Adjoint solve took: 0.047148 seconds to solve adjoint solution for PerfMeas: pm_single (kper, kstp) (21, 1)
2026-06-02 16:40:02,079 - Write group to hdf file
2026-06-02 16:40:02,088 - Starting adjoint solve for PerfMeas: pm_single (kper, kstp) (20, 1)
2026-06-02 16:40:02,090 - Solving for lambda
2026-06-02 16:40:02,090 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:02,098 - Solving for lambda took: 0.008725 seconds
2026-06-02 16:40:02,135 - Adjoint solve took: 0.047474 seconds to solve adjoint solution for PerfMeas: pm_single (kper, kstp) (20, 1)
2026-06-02 16:40:02,136 - Write group to hdf file
2026-06-02 16:40:02,145 - Starting adjoint solve for PerfMeas: pm_single (kper, kstp) (19, 1)
2026-06-02 16:40:02,147 - Solving for lambda
2026-06-02 16:40:02,147 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:02,155 - Solving for lambda took: 0.008664 seconds
2026-06-02 16:40:02,192 - Adjoint solve took: 0.047262 seconds to solve adjoint solution for PerfMeas: pm_single (kper, kstp) (19, 1)
2026-06-02 16:40:02,192 - Write group to hdf file
2026-06-02 16:40:02,201 - Starting adjoint solve for PerfMeas: pm_single (kper, kstp) (18, 1)
2026-06-02 16:40:02,203 - Solving for lambda
2026-06-02 16:40:02,204 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:02,212 - Solving for lambda took: 0.008653 seconds
2026-06-02 16:40:02,249 - Adjoint solve took: 0.047557 seconds to solve adjoint solution for PerfMeas: pm_single (kper, kstp) (18, 1)
2026-06-02 16:40:02,249 - Write group to hdf file
2026-06-02 16:40:02,258 - Starting adjoint solve for PerfMeas: pm_single (kper, kstp) (17, 1)
2026-06-02 16:40:02,260 - Solving for lambda
2026-06-02 16:40:02,260 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:02,269 - Solving for lambda took: 0.008873 seconds
2026-06-02 16:40:02,306 - Adjoint solve took: 0.048379 seconds to solve adjoint solution for PerfMeas: pm_single (kper, kstp) (17, 1)
2026-06-02 16:40:02,306 - Write group to hdf file
2026-06-02 16:40:02,315 - Starting adjoint solve for PerfMeas: pm_single (kper, kstp) (16, 1)
2026-06-02 16:40:02,317 - Solving for lambda
2026-06-02 16:40:02,318 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:02,326 - Solving for lambda took: 0.008733 seconds
2026-06-02 16:40:02,362 - Adjoint solve took: 0.046909 seconds to solve adjoint solution for PerfMeas: pm_single (kper, kstp) (16, 1)
2026-06-02 16:40:02,362 - Write group to hdf file
2026-06-02 16:40:02,371 - Starting adjoint solve for PerfMeas: pm_single (kper, kstp) (15, 1)
2026-06-02 16:40:02,373 - Solving for lambda
2026-06-02 16:40:02,374 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:02,382 - Solving for lambda took: 0.0087 seconds
2026-06-02 16:40:02,418 - Adjoint solve took: 0.046986 seconds to solve adjoint solution for PerfMeas: pm_single (kper, kstp) (15, 1)
2026-06-02 16:40:02,418 - Write group to hdf file
2026-06-02 16:40:02,427 - Starting adjoint solve for PerfMeas: pm_single (kper, kstp) (14, 1)
2026-06-02 16:40:02,429 - Solving for lambda
2026-06-02 16:40:02,430 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:02,438 - Solving for lambda took: 0.008879 seconds
2026-06-02 16:40:02,475 - Adjoint solve took: 0.047824 seconds to solve adjoint solution for PerfMeas: pm_single (kper, kstp) (14, 1)
2026-06-02 16:40:02,475 - Write group to hdf file
2026-06-02 16:40:02,484 - Starting adjoint solve for PerfMeas: pm_single (kper, kstp) (13, 1)
2026-06-02 16:40:02,486 - Solving for lambda
2026-06-02 16:40:02,486 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:02,495 - Solving for lambda took: 0.008834 seconds
2026-06-02 16:40:02,531 - Adjoint solve took: 0.047279 seconds to solve adjoint solution for PerfMeas: pm_single (kper, kstp) (13, 1)
2026-06-02 16:40:02,531 - Write group to hdf file
2026-06-02 16:40:02,540 - Starting adjoint solve for PerfMeas: pm_single (kper, kstp) (12, 1)
2026-06-02 16:40:02,542 - Solving for lambda
2026-06-02 16:40:02,542 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:02,551 - Solving for lambda took: 0.008793 seconds
2026-06-02 16:40:02,587 - Adjoint solve took: 0.04741 seconds to solve adjoint solution for PerfMeas: pm_single (kper, kstp) (12, 1)
2026-06-02 16:40:02,588 - Write group to hdf file
2026-06-02 16:40:02,596 - Starting adjoint solve for PerfMeas: pm_single (kper, kstp) (11, 1)
2026-06-02 16:40:02,598 - Solving for lambda
2026-06-02 16:40:02,599 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:02,607 - Solving for lambda took: 0.008667 seconds
2026-06-02 16:40:02,644 - Adjoint solve took: 0.047732 seconds to solve adjoint solution for PerfMeas: pm_single (kper, kstp) (11, 1)
2026-06-02 16:40:02,645 - Write group to hdf file
2026-06-02 16:40:02,653 - Starting adjoint solve for PerfMeas: pm_single (kper, kstp) (10, 1)
2026-06-02 16:40:02,655 - Solving for lambda
2026-06-02 16:40:02,656 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:02,664 - Solving for lambda took: 0.008726 seconds
2026-06-02 16:40:02,701 - Adjoint solve took: 0.048012 seconds to solve adjoint solution for PerfMeas: pm_single (kper, kstp) (10, 1)
2026-06-02 16:40:02,702 - Write group to hdf file
2026-06-02 16:40:02,711 - Starting adjoint solve for PerfMeas: pm_single (kper, kstp) (9, 1)
2026-06-02 16:40:02,713 - Solving for lambda
2026-06-02 16:40:02,714 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:02,722 - Solving for lambda took: 0.008965 seconds
2026-06-02 16:40:02,759 - Adjoint solve took: 0.047995 seconds to solve adjoint solution for PerfMeas: pm_single (kper, kstp) (9, 1)
2026-06-02 16:40:02,760 - Write group to hdf file
2026-06-02 16:40:02,769 - Starting adjoint solve for PerfMeas: pm_single (kper, kstp) (8, 1)
2026-06-02 16:40:02,771 - Solving for lambda
2026-06-02 16:40:02,772 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:02,780 - Solving for lambda took: 0.008813 seconds
2026-06-02 16:40:02,816 - Adjoint solve took: 0.047538 seconds to solve adjoint solution for PerfMeas: pm_single (kper, kstp) (8, 1)
2026-06-02 16:40:02,817 - Write group to hdf file
2026-06-02 16:40:02,826 - Starting adjoint solve for PerfMeas: pm_single (kper, kstp) (7, 1)
2026-06-02 16:40:02,829 - Solving for lambda
2026-06-02 16:40:02,829 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:02,837 - Solving for lambda took: 0.008724 seconds
2026-06-02 16:40:02,874 - Adjoint solve took: 0.047854 seconds to solve adjoint solution for PerfMeas: pm_single (kper, kstp) (7, 1)
2026-06-02 16:40:02,875 - Write group to hdf file
2026-06-02 16:40:02,884 - Starting adjoint solve for PerfMeas: pm_single (kper, kstp) (6, 1)
2026-06-02 16:40:02,886 - Solving for lambda
2026-06-02 16:40:02,886 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:02,894 - Solving for lambda took: 0.008733 seconds
2026-06-02 16:40:02,931 - Adjoint solve took: 0.047433 seconds to solve adjoint solution for PerfMeas: pm_single (kper, kstp) (6, 1)
2026-06-02 16:40:02,932 - Write group to hdf file
2026-06-02 16:40:02,940 - Starting adjoint solve for PerfMeas: pm_single (kper, kstp) (5, 1)
2026-06-02 16:40:02,942 - Solving for lambda
2026-06-02 16:40:02,943 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:02,951 - Solving for lambda took: 0.008677 seconds
2026-06-02 16:40:02,987 - Adjoint solve took: 0.047252 seconds to solve adjoint solution for PerfMeas: pm_single (kper, kstp) (5, 1)
2026-06-02 16:40:02,988 - Write group to hdf file
2026-06-02 16:40:02,997 - Starting adjoint solve for PerfMeas: pm_single (kper, kstp) (4, 1)
2026-06-02 16:40:02,999 - Solving for lambda
2026-06-02 16:40:02,999 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:03,007 - Solving for lambda took: 0.008653 seconds
2026-06-02 16:40:03,044 - Adjoint solve took: 0.04734 seconds to solve adjoint solution for PerfMeas: pm_single (kper, kstp) (4, 1)
2026-06-02 16:40:03,044 - Write group to hdf file
2026-06-02 16:40:03,053 - Starting adjoint solve for PerfMeas: pm_single (kper, kstp) (3, 1)
2026-06-02 16:40:03,055 - Solving for lambda
2026-06-02 16:40:03,056 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:03,064 - Solving for lambda took: 0.008987 seconds
2026-06-02 16:40:03,101 - Adjoint solve took: 0.047512 seconds to solve adjoint solution for PerfMeas: pm_single (kper, kstp) (3, 1)
2026-06-02 16:40:03,101 - Write group to hdf file
2026-06-02 16:40:03,110 - Starting adjoint solve for PerfMeas: pm_single (kper, kstp) (2, 1)
2026-06-02 16:40:03,112 - Solving for lambda
2026-06-02 16:40:03,113 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:03,121 - Solving for lambda took: 0.008658 seconds
2026-06-02 16:40:03,158 - Adjoint solve took: 0.047734 seconds to solve adjoint solution for PerfMeas: pm_single (kper, kstp) (2, 1)
2026-06-02 16:40:03,158 - Write group to hdf file
2026-06-02 16:40:03,167 - Starting adjoint solve for PerfMeas: pm_single (kper, kstp) (1, 1)
2026-06-02 16:40:03,169 - Solving for lambda
2026-06-02 16:40:03,170 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:03,178 - Solving for lambda took: 0.008844 seconds
2026-06-02 16:40:03,215 - Adjoint solve took: 0.047333 seconds to solve adjoint solution for PerfMeas: pm_single (kper, kstp) (1, 1)
2026-06-02 16:40:03,215 - Write group to hdf file
2026-06-02 16:40:03,223 - Formulate composite sensitivities
2026-06-02 16:40:03,223 - Writing composite sensitivities
2026-06-02 16:40:03,233 - Adjoint solve took: 1.4686 seconds for pm 'pm_single' at (kper,kstp) (1, 1)
2026-06-02 16:40:03,234 - Starting solve_adjoint at 2026-06-02 16:40:03.234167
2026-06-02 16:40:03,269 - Structured grid found, shape: (3, 40, 20)
2026-06-02 16:40:03,271 - Starting adjoint solve for PerfMeas: pm_single_alltimes (kper, kstp) (25, 1)
2026-06-02 16:40:03,273 - Solving for lambda
2026-06-02 16:40:03,274 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:03,282 - Solving for lambda took: 0.008957 seconds
2026-06-02 16:40:03,320 - Adjoint solve took: 0.048447 seconds to solve adjoint solution for PerfMeas: pm_single_alltimes (kper, kstp) (25, 1)
2026-06-02 16:40:03,320 - Write group to hdf file
2026-06-02 16:40:03,329 - Starting adjoint solve for PerfMeas: pm_single_alltimes (kper, kstp) (24, 1)
2026-06-02 16:40:03,331 - Solving for lambda
2026-06-02 16:40:03,332 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:03,340 - Solving for lambda took: 0.00884 seconds
2026-06-02 16:40:03,378 - Adjoint solve took: 0.048326 seconds to solve adjoint solution for PerfMeas: pm_single_alltimes (kper, kstp) (24, 1)
2026-06-02 16:40:03,378 - Write group to hdf file
2026-06-02 16:40:03,387 - Starting adjoint solve for PerfMeas: pm_single_alltimes (kper, kstp) (23, 1)
2026-06-02 16:40:03,389 - Solving for lambda
2026-06-02 16:40:03,390 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:03,398 - Solving for lambda took: 0.008829 seconds
2026-06-02 16:40:03,435 - Adjoint solve took: 0.047983 seconds to solve adjoint solution for PerfMeas: pm_single_alltimes (kper, kstp) (23, 1)
2026-06-02 16:40:03,436 - Write group to hdf file
2026-06-02 16:40:03,445 - Starting adjoint solve for PerfMeas: pm_single_alltimes (kper, kstp) (22, 1)
2026-06-02 16:40:03,446 - Solving for lambda
2026-06-02 16:40:03,447 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:03,455 - Solving for lambda took: 0.008734 seconds
2026-06-02 16:40:03,492 - Adjoint solve took: 0.047499 seconds to solve adjoint solution for PerfMeas: pm_single_alltimes (kper, kstp) (22, 1)
2026-06-02 16:40:03,492 - Write group to hdf file
2026-06-02 16:40:03,501 - Starting adjoint solve for PerfMeas: pm_single_alltimes (kper, kstp) (21, 1)
2026-06-02 16:40:03,503 - Solving for lambda
2026-06-02 16:40:03,503 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:03,512 - Solving for lambda took: 0.008762 seconds
2026-06-02 16:40:03,549 - Adjoint solve took: 0.047761 seconds to solve adjoint solution for PerfMeas: pm_single_alltimes (kper, kstp) (21, 1)
2026-06-02 16:40:03,549 - Write group to hdf file
2026-06-02 16:40:03,558 - Starting adjoint solve for PerfMeas: pm_single_alltimes (kper, kstp) (20, 1)
2026-06-02 16:40:03,560 - Solving for lambda
2026-06-02 16:40:03,560 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:03,568 - Solving for lambda took: 0.008755 seconds
2026-06-02 16:40:03,605 - Adjoint solve took: 0.047693 seconds to solve adjoint solution for PerfMeas: pm_single_alltimes (kper, kstp) (20, 1)
2026-06-02 16:40:03,606 - Write group to hdf file
2026-06-02 16:40:03,615 - Starting adjoint solve for PerfMeas: pm_single_alltimes (kper, kstp) (19, 1)
2026-06-02 16:40:03,617 - Solving for lambda
2026-06-02 16:40:03,618 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:03,626 - Solving for lambda took: 0.008777 seconds
2026-06-02 16:40:03,663 - Adjoint solve took: 0.047985 seconds to solve adjoint solution for PerfMeas: pm_single_alltimes (kper, kstp) (19, 1)
2026-06-02 16:40:03,664 - Write group to hdf file
2026-06-02 16:40:03,672 - Starting adjoint solve for PerfMeas: pm_single_alltimes (kper, kstp) (18, 1)
2026-06-02 16:40:03,674 - Solving for lambda
2026-06-02 16:40:03,675 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:03,683 - Solving for lambda took: 0.008777 seconds
2026-06-02 16:40:03,720 - Adjoint solve took: 0.047543 seconds to solve adjoint solution for PerfMeas: pm_single_alltimes (kper, kstp) (18, 1)
2026-06-02 16:40:03,720 - Write group to hdf file
2026-06-02 16:40:03,729 - Starting adjoint solve for PerfMeas: pm_single_alltimes (kper, kstp) (17, 1)
2026-06-02 16:40:03,731 - Solving for lambda
2026-06-02 16:40:03,731 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:03,739 - Solving for lambda took: 0.008767 seconds
2026-06-02 16:40:03,776 - Adjoint solve took: 0.047512 seconds to solve adjoint solution for PerfMeas: pm_single_alltimes (kper, kstp) (17, 1)
2026-06-02 16:40:03,777 - Write group to hdf file
2026-06-02 16:40:03,785 - Starting adjoint solve for PerfMeas: pm_single_alltimes (kper, kstp) (16, 1)
2026-06-02 16:40:03,787 - Solving for lambda
2026-06-02 16:40:03,788 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:03,796 - Solving for lambda took: 0.008785 seconds
2026-06-02 16:40:03,833 - Adjoint solve took: 0.047719 seconds to solve adjoint solution for PerfMeas: pm_single_alltimes (kper, kstp) (16, 1)
2026-06-02 16:40:03,833 - Write group to hdf file
2026-06-02 16:40:03,842 - Starting adjoint solve for PerfMeas: pm_single_alltimes (kper, kstp) (15, 1)
2026-06-02 16:40:03,844 - Solving for lambda
2026-06-02 16:40:03,845 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:03,853 - Solving for lambda took: 0.008776 seconds
2026-06-02 16:40:03,890 - Adjoint solve took: 0.047568 seconds to solve adjoint solution for PerfMeas: pm_single_alltimes (kper, kstp) (15, 1)
2026-06-02 16:40:03,890 - Write group to hdf file
2026-06-02 16:40:03,899 - Starting adjoint solve for PerfMeas: pm_single_alltimes (kper, kstp) (14, 1)
2026-06-02 16:40:03,901 - Solving for lambda
2026-06-02 16:40:03,901 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:03,910 - Solving for lambda took: 0.008688 seconds
2026-06-02 16:40:03,947 - Adjoint solve took: 0.047925 seconds to solve adjoint solution for PerfMeas: pm_single_alltimes (kper, kstp) (14, 1)
2026-06-02 16:40:03,947 - Write group to hdf file
2026-06-02 16:40:03,956 - Starting adjoint solve for PerfMeas: pm_single_alltimes (kper, kstp) (13, 1)
2026-06-02 16:40:03,958 - Solving for lambda
2026-06-02 16:40:03,958 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:03,966 - Solving for lambda took: 0.008746 seconds
2026-06-02 16:40:04,003 - Adjoint solve took: 0.047432 seconds to solve adjoint solution for PerfMeas: pm_single_alltimes (kper, kstp) (13, 1)
2026-06-02 16:40:04,003 - Write group to hdf file
2026-06-02 16:40:04,012 - Starting adjoint solve for PerfMeas: pm_single_alltimes (kper, kstp) (12, 1)
2026-06-02 16:40:04,014 - Solving for lambda
2026-06-02 16:40:04,014 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:04,023 - Solving for lambda took: 0.008806 seconds
2026-06-02 16:40:04,060 - Adjoint solve took: 0.047685 seconds to solve adjoint solution for PerfMeas: pm_single_alltimes (kper, kstp) (12, 1)
2026-06-02 16:40:04,060 - Write group to hdf file
2026-06-02 16:40:04,070 - Starting adjoint solve for PerfMeas: pm_single_alltimes (kper, kstp) (11, 1)
2026-06-02 16:40:04,072 - Solving for lambda
2026-06-02 16:40:04,072 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:04,080 - Solving for lambda took: 0.008876 seconds
2026-06-02 16:40:04,118 - Adjoint solve took: 0.048131 seconds to solve adjoint solution for PerfMeas: pm_single_alltimes (kper, kstp) (11, 1)
2026-06-02 16:40:04,118 - Write group to hdf file
2026-06-02 16:40:04,127 - Starting adjoint solve for PerfMeas: pm_single_alltimes (kper, kstp) (10, 1)
2026-06-02 16:40:04,129 - Solving for lambda
2026-06-02 16:40:04,129 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:04,137 - Solving for lambda took: 0.008792 seconds
2026-06-02 16:40:04,174 - Adjoint solve took: 0.047298 seconds to solve adjoint solution for PerfMeas: pm_single_alltimes (kper, kstp) (10, 1)
2026-06-02 16:40:04,175 - Write group to hdf file
2026-06-02 16:40:04,183 - Starting adjoint solve for PerfMeas: pm_single_alltimes (kper, kstp) (9, 1)
2026-06-02 16:40:04,185 - Solving for lambda
2026-06-02 16:40:04,186 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:04,194 - Solving for lambda took: 0.008797 seconds
2026-06-02 16:40:04,231 - Adjoint solve took: 0.047843 seconds to solve adjoint solution for PerfMeas: pm_single_alltimes (kper, kstp) (9, 1)
2026-06-02 16:40:04,232 - Write group to hdf file
2026-06-02 16:40:04,240 - Starting adjoint solve for PerfMeas: pm_single_alltimes (kper, kstp) (8, 1)
2026-06-02 16:40:04,242 - Solving for lambda
2026-06-02 16:40:04,243 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:04,251 - Solving for lambda took: 0.008791 seconds
2026-06-02 16:40:04,288 - Adjoint solve took: 0.047865 seconds to solve adjoint solution for PerfMeas: pm_single_alltimes (kper, kstp) (8, 1)
2026-06-02 16:40:04,289 - Write group to hdf file
2026-06-02 16:40:04,297 - Starting adjoint solve for PerfMeas: pm_single_alltimes (kper, kstp) (7, 1)
2026-06-02 16:40:04,299 - Solving for lambda
2026-06-02 16:40:04,300 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:04,308 - Solving for lambda took: 0.008873 seconds
2026-06-02 16:40:04,345 - Adjoint solve took: 0.047677 seconds to solve adjoint solution for PerfMeas: pm_single_alltimes (kper, kstp) (7, 1)
2026-06-02 16:40:04,345 - Write group to hdf file
2026-06-02 16:40:04,354 - Starting adjoint solve for PerfMeas: pm_single_alltimes (kper, kstp) (6, 1)
2026-06-02 16:40:04,356 - Solving for lambda
2026-06-02 16:40:04,357 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:04,365 - Solving for lambda took: 0.008853 seconds
2026-06-02 16:40:04,401 - Adjoint solve took: 0.04756 seconds to solve adjoint solution for PerfMeas: pm_single_alltimes (kper, kstp) (6, 1)
2026-06-02 16:40:04,402 - Write group to hdf file
2026-06-02 16:40:04,410 - Starting adjoint solve for PerfMeas: pm_single_alltimes (kper, kstp) (5, 1)
2026-06-02 16:40:04,413 - Solving for lambda
2026-06-02 16:40:04,413 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:04,421 - Solving for lambda took: 0.008827 seconds
2026-06-02 16:40:04,458 - Adjoint solve took: 0.048035 seconds to solve adjoint solution for PerfMeas: pm_single_alltimes (kper, kstp) (5, 1)
2026-06-02 16:40:04,459 - Write group to hdf file
2026-06-02 16:40:04,468 - Starting adjoint solve for PerfMeas: pm_single_alltimes (kper, kstp) (4, 1)
2026-06-02 16:40:04,470 - Solving for lambda
2026-06-02 16:40:04,470 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:04,479 - Solving for lambda took: 0.008746 seconds
2026-06-02 16:40:04,516 - Adjoint solve took: 0.048001 seconds to solve adjoint solution for PerfMeas: pm_single_alltimes (kper, kstp) (4, 1)
2026-06-02 16:40:04,516 - Write group to hdf file
2026-06-02 16:40:04,525 - Starting adjoint solve for PerfMeas: pm_single_alltimes (kper, kstp) (3, 1)
2026-06-02 16:40:04,527 - Solving for lambda
2026-06-02 16:40:04,527 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:04,536 - Solving for lambda took: 0.008897 seconds
2026-06-02 16:40:04,573 - Adjoint solve took: 0.047958 seconds to solve adjoint solution for PerfMeas: pm_single_alltimes (kper, kstp) (3, 1)
2026-06-02 16:40:04,573 - Write group to hdf file
2026-06-02 16:40:04,582 - Starting adjoint solve for PerfMeas: pm_single_alltimes (kper, kstp) (2, 1)
2026-06-02 16:40:04,584 - Solving for lambda
2026-06-02 16:40:04,584 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:04,593 - Solving for lambda took: 0.008906 seconds
2026-06-02 16:40:04,630 - Adjoint solve took: 0.04816 seconds to solve adjoint solution for PerfMeas: pm_single_alltimes (kper, kstp) (2, 1)
2026-06-02 16:40:04,630 - Write group to hdf file
2026-06-02 16:40:04,639 - Starting adjoint solve for PerfMeas: pm_single_alltimes (kper, kstp) (1, 1)
2026-06-02 16:40:04,641 - Solving for lambda
2026-06-02 16:40:04,642 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:04,650 - Solving for lambda took: 0.008746 seconds
2026-06-02 16:40:04,686 - Adjoint solve took: 0.047041 seconds to solve adjoint solution for PerfMeas: pm_single_alltimes (kper, kstp) (1, 1)
2026-06-02 16:40:04,687 - Write group to hdf file
2026-06-02 16:40:04,695 - Formulate composite sensitivities
2026-06-02 16:40:04,695 - Writing composite sensitivities
2026-06-02 16:40:04,705 - Adjoint solve took: 1.4712 seconds for pm 'pm_single_alltimes' at (kper,kstp) (1, 1)
2026-06-02 16:40:04,706 - Starting solve_adjoint at 2026-06-02 16:40:04.706067
2026-06-02 16:40:04,740 - Structured grid found, shape: (3, 40, 20)
2026-06-02 16:40:04,743 - Starting adjoint solve for PerfMeas: pm_ssr (kper, kstp) (25, 1)
2026-06-02 16:40:04,745 - Solving for lambda
2026-06-02 16:40:04,746 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:04,754 - Solving for lambda took: 0.008938 seconds
2026-06-02 16:40:04,791 - Adjoint solve took: 0.0481 seconds to solve adjoint solution for PerfMeas: pm_ssr (kper, kstp) (25, 1)
2026-06-02 16:40:04,792 - Write group to hdf file
2026-06-02 16:40:04,801 - Starting adjoint solve for PerfMeas: pm_ssr (kper, kstp) (24, 1)
2026-06-02 16:40:04,802 - Solving for lambda
2026-06-02 16:40:04,803 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:04,811 - Solving for lambda took: 0.00882 seconds
2026-06-02 16:40:04,849 - Adjoint solve took: 0.048218 seconds to solve adjoint solution for PerfMeas: pm_ssr (kper, kstp) (24, 1)
2026-06-02 16:40:04,849 - Write group to hdf file
2026-06-02 16:40:04,858 - Starting adjoint solve for PerfMeas: pm_ssr (kper, kstp) (23, 1)
2026-06-02 16:40:04,860 - Solving for lambda
2026-06-02 16:40:04,860 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:04,869 - Solving for lambda took: 0.00894 seconds
2026-06-02 16:40:04,906 - Adjoint solve took: 0.048362 seconds to solve adjoint solution for PerfMeas: pm_ssr (kper, kstp) (23, 1)
2026-06-02 16:40:04,907 - Write group to hdf file
2026-06-02 16:40:04,915 - Starting adjoint solve for PerfMeas: pm_ssr (kper, kstp) (22, 1)
2026-06-02 16:40:04,917 - Solving for lambda
2026-06-02 16:40:04,918 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:04,926 - Solving for lambda took: 0.008863 seconds
2026-06-02 16:40:04,964 - Adjoint solve took: 0.048365 seconds to solve adjoint solution for PerfMeas: pm_ssr (kper, kstp) (22, 1)
2026-06-02 16:40:04,964 - Write group to hdf file
2026-06-02 16:40:04,973 - Starting adjoint solve for PerfMeas: pm_ssr (kper, kstp) (21, 1)
2026-06-02 16:40:04,975 - Solving for lambda
2026-06-02 16:40:04,975 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:04,984 - Solving for lambda took: 0.008886 seconds
2026-06-02 16:40:05,021 - Adjoint solve took: 0.048229 seconds to solve adjoint solution for PerfMeas: pm_ssr (kper, kstp) (21, 1)
2026-06-02 16:40:05,022 - Write group to hdf file
2026-06-02 16:40:05,030 - Starting adjoint solve for PerfMeas: pm_ssr (kper, kstp) (20, 1)
2026-06-02 16:40:05,032 - Solving for lambda
2026-06-02 16:40:05,033 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:05,041 - Solving for lambda took: 0.008823 seconds
2026-06-02 16:40:05,078 - Adjoint solve took: 0.047696 seconds to solve adjoint solution for PerfMeas: pm_ssr (kper, kstp) (20, 1)
2026-06-02 16:40:05,078 - Write group to hdf file
2026-06-02 16:40:05,087 - Starting adjoint solve for PerfMeas: pm_ssr (kper, kstp) (19, 1)
2026-06-02 16:40:05,089 - Solving for lambda
2026-06-02 16:40:05,090 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:05,098 - Solving for lambda took: 0.008811 seconds
2026-06-02 16:40:05,135 - Adjoint solve took: 0.047645 seconds to solve adjoint solution for PerfMeas: pm_ssr (kper, kstp) (19, 1)
2026-06-02 16:40:05,135 - Write group to hdf file
2026-06-02 16:40:05,144 - Starting adjoint solve for PerfMeas: pm_ssr (kper, kstp) (18, 1)
2026-06-02 16:40:05,146 - Solving for lambda
2026-06-02 16:40:05,147 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:05,155 - Solving for lambda took: 0.008763 seconds
2026-06-02 16:40:05,192 - Adjoint solve took: 0.048128 seconds to solve adjoint solution for PerfMeas: pm_ssr (kper, kstp) (18, 1)
2026-06-02 16:40:05,193 - Write group to hdf file
2026-06-02 16:40:05,201 - Starting adjoint solve for PerfMeas: pm_ssr (kper, kstp) (17, 1)
2026-06-02 16:40:05,203 - Solving for lambda
2026-06-02 16:40:05,204 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:05,212 - Solving for lambda took: 0.008803 seconds
2026-06-02 16:40:05,251 - Adjoint solve took: 0.049738 seconds to solve adjoint solution for PerfMeas: pm_ssr (kper, kstp) (17, 1)
2026-06-02 16:40:05,252 - Write group to hdf file
2026-06-02 16:40:05,260 - Starting adjoint solve for PerfMeas: pm_ssr (kper, kstp) (16, 1)
2026-06-02 16:40:05,262 - Solving for lambda
2026-06-02 16:40:05,263 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:05,271 - Solving for lambda took: 0.008779 seconds
2026-06-02 16:40:05,308 - Adjoint solve took: 0.048164 seconds to solve adjoint solution for PerfMeas: pm_ssr (kper, kstp) (16, 1)
2026-06-02 16:40:05,309 - Write group to hdf file
2026-06-02 16:40:05,317 - Starting adjoint solve for PerfMeas: pm_ssr (kper, kstp) (15, 1)
2026-06-02 16:40:05,320 - Solving for lambda
2026-06-02 16:40:05,320 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:05,329 - Solving for lambda took: 0.009053 seconds
2026-06-02 16:40:05,366 - Adjoint solve took: 0.049008 seconds to solve adjoint solution for PerfMeas: pm_ssr (kper, kstp) (15, 1)
2026-06-02 16:40:05,367 - Write group to hdf file
2026-06-02 16:40:05,376 - Starting adjoint solve for PerfMeas: pm_ssr (kper, kstp) (14, 1)
2026-06-02 16:40:05,377 - Solving for lambda
2026-06-02 16:40:05,378 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:05,386 - Solving for lambda took: 0.008866 seconds
2026-06-02 16:40:05,423 - Adjoint solve took: 0.047763 seconds to solve adjoint solution for PerfMeas: pm_ssr (kper, kstp) (14, 1)
2026-06-02 16:40:05,424 - Write group to hdf file
2026-06-02 16:40:05,432 - Starting adjoint solve for PerfMeas: pm_ssr (kper, kstp) (13, 1)
2026-06-02 16:40:05,434 - Solving for lambda
2026-06-02 16:40:05,435 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:05,443 - Solving for lambda took: 0.008815 seconds
2026-06-02 16:40:05,481 - Adjoint solve took: 0.048593 seconds to solve adjoint solution for PerfMeas: pm_ssr (kper, kstp) (13, 1)
2026-06-02 16:40:05,481 - Write group to hdf file
2026-06-02 16:40:05,490 - Starting adjoint solve for PerfMeas: pm_ssr (kper, kstp) (12, 1)
2026-06-02 16:40:05,492 - Solving for lambda
2026-06-02 16:40:05,493 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:05,501 - Solving for lambda took: 0.00894 seconds
2026-06-02 16:40:05,538 - Adjoint solve took: 0.048424 seconds to solve adjoint solution for PerfMeas: pm_ssr (kper, kstp) (12, 1)
2026-06-02 16:40:05,539 - Write group to hdf file
2026-06-02 16:40:05,548 - Starting adjoint solve for PerfMeas: pm_ssr (kper, kstp) (11, 1)
2026-06-02 16:40:05,550 - Solving for lambda
2026-06-02 16:40:05,550 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:05,558 - Solving for lambda took: 0.008787 seconds
2026-06-02 16:40:05,596 - Adjoint solve took: 0.048082 seconds to solve adjoint solution for PerfMeas: pm_ssr (kper, kstp) (11, 1)
2026-06-02 16:40:05,596 - Write group to hdf file
2026-06-02 16:40:05,605 - Starting adjoint solve for PerfMeas: pm_ssr (kper, kstp) (10, 1)
2026-06-02 16:40:05,607 - Solving for lambda
2026-06-02 16:40:05,608 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:05,616 - Solving for lambda took: 0.009039 seconds
2026-06-02 16:40:05,654 - Adjoint solve took: 0.048632 seconds to solve adjoint solution for PerfMeas: pm_ssr (kper, kstp) (10, 1)
2026-06-02 16:40:05,654 - Write group to hdf file
2026-06-02 16:40:05,664 - Starting adjoint solve for PerfMeas: pm_ssr (kper, kstp) (9, 1)
2026-06-02 16:40:05,665 - Solving for lambda
2026-06-02 16:40:05,666 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:05,674 - Solving for lambda took: 0.008777 seconds
2026-06-02 16:40:05,711 - Adjoint solve took: 0.047842 seconds to solve adjoint solution for PerfMeas: pm_ssr (kper, kstp) (9, 1)
2026-06-02 16:40:05,712 - Write group to hdf file
2026-06-02 16:40:05,720 - Starting adjoint solve for PerfMeas: pm_ssr (kper, kstp) (8, 1)
2026-06-02 16:40:05,723 - Solving for lambda
2026-06-02 16:40:05,723 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:05,731 - Solving for lambda took: 0.008807 seconds
2026-06-02 16:40:05,768 - Adjoint solve took: 0.047756 seconds to solve adjoint solution for PerfMeas: pm_ssr (kper, kstp) (8, 1)
2026-06-02 16:40:05,769 - Write group to hdf file
2026-06-02 16:40:05,778 - Starting adjoint solve for PerfMeas: pm_ssr (kper, kstp) (7, 1)
2026-06-02 16:40:05,780 - Solving for lambda
2026-06-02 16:40:05,780 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:05,789 - Solving for lambda took: 0.008764 seconds
2026-06-02 16:40:05,826 - Adjoint solve took: 0.047987 seconds to solve adjoint solution for PerfMeas: pm_ssr (kper, kstp) (7, 1)
2026-06-02 16:40:05,826 - Write group to hdf file
2026-06-02 16:40:05,835 - Starting adjoint solve for PerfMeas: pm_ssr (kper, kstp) (6, 1)
2026-06-02 16:40:05,837 - Solving for lambda
2026-06-02 16:40:05,837 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:05,846 - Solving for lambda took: 0.008981 seconds
2026-06-02 16:40:05,883 - Adjoint solve took: 0.048198 seconds to solve adjoint solution for PerfMeas: pm_ssr (kper, kstp) (6, 1)
2026-06-02 16:40:05,883 - Write group to hdf file
2026-06-02 16:40:05,892 - Starting adjoint solve for PerfMeas: pm_ssr (kper, kstp) (5, 1)
2026-06-02 16:40:05,894 - Solving for lambda
2026-06-02 16:40:05,895 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:05,903 - Solving for lambda took: 0.008783 seconds
2026-06-02 16:40:05,940 - Adjoint solve took: 0.047996 seconds to solve adjoint solution for PerfMeas: pm_ssr (kper, kstp) (5, 1)
2026-06-02 16:40:05,941 - Write group to hdf file
2026-06-02 16:40:05,950 - Starting adjoint solve for PerfMeas: pm_ssr (kper, kstp) (4, 1)
2026-06-02 16:40:05,952 - Solving for lambda
2026-06-02 16:40:05,952 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:05,961 - Solving for lambda took: 0.008836 seconds
2026-06-02 16:40:05,997 - Adjoint solve took: 0.047805 seconds to solve adjoint solution for PerfMeas: pm_ssr (kper, kstp) (4, 1)
2026-06-02 16:40:05,998 - Write group to hdf file
2026-06-02 16:40:06,007 - Starting adjoint solve for PerfMeas: pm_ssr (kper, kstp) (3, 1)
2026-06-02 16:40:06,009 - Solving for lambda
2026-06-02 16:40:06,010 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:06,018 - Solving for lambda took: 0.008878 seconds
2026-06-02 16:40:06,055 - Adjoint solve took: 0.047891 seconds to solve adjoint solution for PerfMeas: pm_ssr (kper, kstp) (3, 1)
2026-06-02 16:40:06,055 - Write group to hdf file
2026-06-02 16:40:06,064 - Starting adjoint solve for PerfMeas: pm_ssr (kper, kstp) (2, 1)
2026-06-02 16:40:06,066 - Solving for lambda
2026-06-02 16:40:06,067 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:06,075 - Solving for lambda took: 0.008788 seconds
2026-06-02 16:40:06,112 - Adjoint solve took: 0.047876 seconds to solve adjoint solution for PerfMeas: pm_ssr (kper, kstp) (2, 1)
2026-06-02 16:40:06,112 - Write group to hdf file
2026-06-02 16:40:06,121 - Starting adjoint solve for PerfMeas: pm_ssr (kper, kstp) (1, 1)
2026-06-02 16:40:06,123 - Solving for lambda
2026-06-02 16:40:06,123 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:06,132 - Solving for lambda took: 0.008793 seconds
2026-06-02 16:40:06,169 - Adjoint solve took: 0.047495 seconds to solve adjoint solution for PerfMeas: pm_ssr (kper, kstp) (1, 1)
2026-06-02 16:40:06,169 - Write group to hdf file
2026-06-02 16:40:06,177 - Formulate composite sensitivities
2026-06-02 16:40:06,178 - Writing composite sensitivities
2026-06-02 16:40:06,188 - Adjoint solve took: 1.4819 seconds for pm 'pm_ssr' at (kper,kstp) (1, 1)
2026-06-02 16:40:06,188 - Starting solve_adjoint at 2026-06-02 16:40:06.188506
2026-06-02 16:40:06,224 - Structured grid found, shape: (3, 40, 20)
2026-06-02 16:40:06,227 - Starting adjoint solve for PerfMeas: headwater (kper, kstp) (25, 1)
2026-06-02 16:40:06,229 - Solving for lambda
2026-06-02 16:40:06,229 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:06,238 - Solving for lambda took: 0.008927 seconds
2026-06-02 16:40:06,274 - Adjoint solve took: 0.047378 seconds to solve adjoint solution for PerfMeas: headwater (kper, kstp) (25, 1)
2026-06-02 16:40:06,275 - Write group to hdf file
2026-06-02 16:40:06,283 - Starting adjoint solve for PerfMeas: headwater (kper, kstp) (24, 1)
2026-06-02 16:40:06,285 - Solving for lambda
2026-06-02 16:40:06,286 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:06,294 - Solving for lambda took: 0.008774 seconds
2026-06-02 16:40:06,331 - Adjoint solve took: 0.047727 seconds to solve adjoint solution for PerfMeas: headwater (kper, kstp) (24, 1)
2026-06-02 16:40:06,332 - Write group to hdf file
2026-06-02 16:40:06,340 - Starting adjoint solve for PerfMeas: headwater (kper, kstp) (23, 1)
2026-06-02 16:40:06,342 - Solving for lambda
2026-06-02 16:40:06,343 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:06,351 - Solving for lambda took: 0.008838 seconds
2026-06-02 16:40:06,388 - Adjoint solve took: 0.047652 seconds to solve adjoint solution for PerfMeas: headwater (kper, kstp) (23, 1)
2026-06-02 16:40:06,388 - Write group to hdf file
2026-06-02 16:40:06,397 - Starting adjoint solve for PerfMeas: headwater (kper, kstp) (22, 1)
2026-06-02 16:40:06,399 - Solving for lambda
2026-06-02 16:40:06,400 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:06,408 - Solving for lambda took: 0.008858 seconds
2026-06-02 16:40:06,445 - Adjoint solve took: 0.047931 seconds to solve adjoint solution for PerfMeas: headwater (kper, kstp) (22, 1)
2026-06-02 16:40:06,445 - Write group to hdf file
2026-06-02 16:40:06,454 - Starting adjoint solve for PerfMeas: headwater (kper, kstp) (21, 1)
2026-06-02 16:40:06,456 - Solving for lambda
2026-06-02 16:40:06,457 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:06,465 - Solving for lambda took: 0.009114 seconds
2026-06-02 16:40:06,502 - Adjoint solve took: 0.047629 seconds to solve adjoint solution for PerfMeas: headwater (kper, kstp) (21, 1)
2026-06-02 16:40:06,502 - Write group to hdf file
2026-06-02 16:40:06,511 - Starting adjoint solve for PerfMeas: headwater (kper, kstp) (20, 1)
2026-06-02 16:40:06,513 - Solving for lambda
2026-06-02 16:40:06,514 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:06,522 - Solving for lambda took: 0.009202 seconds
2026-06-02 16:40:06,559 - Adjoint solve took: 0.04806 seconds to solve adjoint solution for PerfMeas: headwater (kper, kstp) (20, 1)
2026-06-02 16:40:06,560 - Write group to hdf file
2026-06-02 16:40:06,569 - Starting adjoint solve for PerfMeas: headwater (kper, kstp) (19, 1)
2026-06-02 16:40:06,571 - Solving for lambda
2026-06-02 16:40:06,571 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:06,579 - Solving for lambda took: 0.008805 seconds
2026-06-02 16:40:06,616 - Adjoint solve took: 0.047569 seconds to solve adjoint solution for PerfMeas: headwater (kper, kstp) (19, 1)
2026-06-02 16:40:06,617 - Write group to hdf file
2026-06-02 16:40:06,625 - Starting adjoint solve for PerfMeas: headwater (kper, kstp) (18, 1)
2026-06-02 16:40:06,628 - Solving for lambda
2026-06-02 16:40:06,628 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:06,637 - Solving for lambda took: 0.008968 seconds
2026-06-02 16:40:06,674 - Adjoint solve took: 0.048236 seconds to solve adjoint solution for PerfMeas: headwater (kper, kstp) (18, 1)
2026-06-02 16:40:06,674 - Write group to hdf file
2026-06-02 16:40:06,683 - Starting adjoint solve for PerfMeas: headwater (kper, kstp) (17, 1)
2026-06-02 16:40:06,685 - Solving for lambda
2026-06-02 16:40:06,685 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:06,694 - Solving for lambda took: 0.008927 seconds
2026-06-02 16:40:06,731 - Adjoint solve took: 0.04744 seconds to solve adjoint solution for PerfMeas: headwater (kper, kstp) (17, 1)
2026-06-02 16:40:06,731 - Write group to hdf file
2026-06-02 16:40:06,740 - Starting adjoint solve for PerfMeas: headwater (kper, kstp) (16, 1)
2026-06-02 16:40:06,742 - Solving for lambda
2026-06-02 16:40:06,743 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:06,751 - Solving for lambda took: 0.008849 seconds
2026-06-02 16:40:06,788 - Adjoint solve took: 0.047759 seconds to solve adjoint solution for PerfMeas: headwater (kper, kstp) (16, 1)
2026-06-02 16:40:06,788 - Write group to hdf file
2026-06-02 16:40:06,797 - Starting adjoint solve for PerfMeas: headwater (kper, kstp) (15, 1)
2026-06-02 16:40:06,799 - Solving for lambda
2026-06-02 16:40:06,800 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:06,808 - Solving for lambda took: 0.008874 seconds
2026-06-02 16:40:06,845 - Adjoint solve took: 0.047416 seconds to solve adjoint solution for PerfMeas: headwater (kper, kstp) (15, 1)
2026-06-02 16:40:06,845 - Write group to hdf file
2026-06-02 16:40:06,854 - Starting adjoint solve for PerfMeas: headwater (kper, kstp) (14, 1)
2026-06-02 16:40:06,856 - Solving for lambda
2026-06-02 16:40:06,856 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:06,864 - Solving for lambda took: 0.008848 seconds
2026-06-02 16:40:06,901 - Adjoint solve took: 0.047223 seconds to solve adjoint solution for PerfMeas: headwater (kper, kstp) (14, 1)
2026-06-02 16:40:06,902 - Write group to hdf file
2026-06-02 16:40:06,910 - Starting adjoint solve for PerfMeas: headwater (kper, kstp) (13, 1)
2026-06-02 16:40:06,912 - Solving for lambda
2026-06-02 16:40:06,913 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:06,921 - Solving for lambda took: 0.008895 seconds
2026-06-02 16:40:06,958 - Adjoint solve took: 0.047877 seconds to solve adjoint solution for PerfMeas: headwater (kper, kstp) (13, 1)
2026-06-02 16:40:06,958 - Write group to hdf file
2026-06-02 16:40:06,967 - Starting adjoint solve for PerfMeas: headwater (kper, kstp) (12, 1)
2026-06-02 16:40:06,969 - Solving for lambda
2026-06-02 16:40:06,969 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:06,978 - Solving for lambda took: 0.008728 seconds
2026-06-02 16:40:07,015 - Adjoint solve took: 0.047817 seconds to solve adjoint solution for PerfMeas: headwater (kper, kstp) (12, 1)
2026-06-02 16:40:07,015 - Write group to hdf file
2026-06-02 16:40:07,024 - Starting adjoint solve for PerfMeas: headwater (kper, kstp) (11, 1)
2026-06-02 16:40:07,026 - Solving for lambda
2026-06-02 16:40:07,027 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:07,035 - Solving for lambda took: 0.008964 seconds
2026-06-02 16:40:07,072 - Adjoint solve took: 0.048112 seconds to solve adjoint solution for PerfMeas: headwater (kper, kstp) (11, 1)
2026-06-02 16:40:07,073 - Write group to hdf file
2026-06-02 16:40:07,081 - Starting adjoint solve for PerfMeas: headwater (kper, kstp) (10, 1)
2026-06-02 16:40:07,084 - Solving for lambda
2026-06-02 16:40:07,084 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:07,092 - Solving for lambda took: 0.008785 seconds
2026-06-02 16:40:07,129 - Adjoint solve took: 0.047721 seconds to solve adjoint solution for PerfMeas: headwater (kper, kstp) (10, 1)
2026-06-02 16:40:07,130 - Write group to hdf file
2026-06-02 16:40:07,138 - Starting adjoint solve for PerfMeas: headwater (kper, kstp) (9, 1)
2026-06-02 16:40:07,140 - Solving for lambda
2026-06-02 16:40:07,141 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:07,149 - Solving for lambda took: 0.008866 seconds
2026-06-02 16:40:07,186 - Adjoint solve took: 0.047775 seconds to solve adjoint solution for PerfMeas: headwater (kper, kstp) (9, 1)
2026-06-02 16:40:07,187 - Write group to hdf file
2026-06-02 16:40:07,195 - Starting adjoint solve for PerfMeas: headwater (kper, kstp) (8, 1)
2026-06-02 16:40:07,197 - Solving for lambda
2026-06-02 16:40:07,198 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:07,206 - Solving for lambda took: 0.008965 seconds
2026-06-02 16:40:07,243 - Adjoint solve took: 0.047671 seconds to solve adjoint solution for PerfMeas: headwater (kper, kstp) (8, 1)
2026-06-02 16:40:07,243 - Write group to hdf file
2026-06-02 16:40:07,252 - Starting adjoint solve for PerfMeas: headwater (kper, kstp) (7, 1)
2026-06-02 16:40:07,254 - Solving for lambda
2026-06-02 16:40:07,255 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:07,264 - Solving for lambda took: 0.009362 seconds
2026-06-02 16:40:07,300 - Adjoint solve took: 0.048051 seconds to solve adjoint solution for PerfMeas: headwater (kper, kstp) (7, 1)
2026-06-02 16:40:07,301 - Write group to hdf file
2026-06-02 16:40:07,310 - Starting adjoint solve for PerfMeas: headwater (kper, kstp) (6, 1)
2026-06-02 16:40:07,312 - Solving for lambda
2026-06-02 16:40:07,312 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:07,321 - Solving for lambda took: 0.008852 seconds
2026-06-02 16:40:07,357 - Adjoint solve took: 0.047617 seconds to solve adjoint solution for PerfMeas: headwater (kper, kstp) (6, 1)
2026-06-02 16:40:07,358 - Write group to hdf file
2026-06-02 16:40:07,367 - Starting adjoint solve for PerfMeas: headwater (kper, kstp) (5, 1)
2026-06-02 16:40:07,369 - Solving for lambda
2026-06-02 16:40:07,369 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:07,377 - Solving for lambda took: 0.008858 seconds
2026-06-02 16:40:07,414 - Adjoint solve took: 0.047566 seconds to solve adjoint solution for PerfMeas: headwater (kper, kstp) (5, 1)
2026-06-02 16:40:07,415 - Write group to hdf file
2026-06-02 16:40:07,423 - Starting adjoint solve for PerfMeas: headwater (kper, kstp) (4, 1)
2026-06-02 16:40:07,425 - Solving for lambda
2026-06-02 16:40:07,426 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:07,434 - Solving for lambda took: 0.009041 seconds
2026-06-02 16:40:07,471 - Adjoint solve took: 0.047652 seconds to solve adjoint solution for PerfMeas: headwater (kper, kstp) (4, 1)
2026-06-02 16:40:07,471 - Write group to hdf file
2026-06-02 16:40:07,480 - Starting adjoint solve for PerfMeas: headwater (kper, kstp) (3, 1)
2026-06-02 16:40:07,482 - Solving for lambda
2026-06-02 16:40:07,483 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:07,491 - Solving for lambda took: 0.008835 seconds
2026-06-02 16:40:07,528 - Adjoint solve took: 0.047574 seconds to solve adjoint solution for PerfMeas: headwater (kper, kstp) (3, 1)
2026-06-02 16:40:07,528 - Write group to hdf file
2026-06-02 16:40:07,537 - Starting adjoint solve for PerfMeas: headwater (kper, kstp) (2, 1)
2026-06-02 16:40:07,539 - Solving for lambda
2026-06-02 16:40:07,540 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:07,548 - Solving for lambda took: 0.008929 seconds
2026-06-02 16:40:07,585 - Adjoint solve took: 0.047852 seconds to solve adjoint solution for PerfMeas: headwater (kper, kstp) (2, 1)
2026-06-02 16:40:07,585 - Write group to hdf file
2026-06-02 16:40:07,594 - Starting adjoint solve for PerfMeas: headwater (kper, kstp) (1, 1)
2026-06-02 16:40:07,596 - Solving for lambda
2026-06-02 16:40:07,596 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:07,605 - Solving for lambda took: 0.008884 seconds
2026-06-02 16:40:07,642 - Adjoint solve took: 0.04746 seconds to solve adjoint solution for PerfMeas: headwater (kper, kstp) (1, 1)
2026-06-02 16:40:07,642 - Write group to hdf file
2026-06-02 16:40:07,650 - Formulate composite sensitivities
2026-06-02 16:40:07,650 - Writing composite sensitivities
2026-06-02 16:40:07,660 - Adjoint solve took: 1.4718 seconds for pm 'headwater' at (kper,kstp) (1, 1)
2026-06-02 16:40:07,660 - Starting solve_adjoint at 2026-06-02 16:40:07.660818
2026-06-02 16:40:07,696 - Structured grid found, shape: (3, 40, 20)
2026-06-02 16:40:07,699 - Starting adjoint solve for PerfMeas: tailwater (kper, kstp) (25, 1)
2026-06-02 16:40:07,700 - Solving for lambda
2026-06-02 16:40:07,701 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:07,709 - Solving for lambda took: 0.009011 seconds
2026-06-02 16:40:07,746 - Adjoint solve took: 0.047499 seconds to solve adjoint solution for PerfMeas: tailwater (kper, kstp) (25, 1)
2026-06-02 16:40:07,746 - Write group to hdf file
2026-06-02 16:40:07,755 - Starting adjoint solve for PerfMeas: tailwater (kper, kstp) (24, 1)
2026-06-02 16:40:07,757 - Solving for lambda
2026-06-02 16:40:07,758 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:07,766 - Solving for lambda took: 0.008917 seconds
2026-06-02 16:40:07,803 - Adjoint solve took: 0.048385 seconds to solve adjoint solution for PerfMeas: tailwater (kper, kstp) (24, 1)
2026-06-02 16:40:07,804 - Write group to hdf file
2026-06-02 16:40:07,813 - Starting adjoint solve for PerfMeas: tailwater (kper, kstp) (23, 1)
2026-06-02 16:40:07,815 - Solving for lambda
2026-06-02 16:40:07,816 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:07,824 - Solving for lambda took: 0.00888 seconds
2026-06-02 16:40:07,862 - Adjoint solve took: 0.048982 seconds to solve adjoint solution for PerfMeas: tailwater (kper, kstp) (23, 1)
2026-06-02 16:40:07,862 - Write group to hdf file
2026-06-02 16:40:07,871 - Starting adjoint solve for PerfMeas: tailwater (kper, kstp) (22, 1)
2026-06-02 16:40:07,873 - Solving for lambda
2026-06-02 16:40:07,873 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:07,882 - Solving for lambda took: 0.008969 seconds
2026-06-02 16:40:07,919 - Adjoint solve took: 0.048602 seconds to solve adjoint solution for PerfMeas: tailwater (kper, kstp) (22, 1)
2026-06-02 16:40:07,920 - Write group to hdf file
2026-06-02 16:40:07,928 - Starting adjoint solve for PerfMeas: tailwater (kper, kstp) (21, 1)
2026-06-02 16:40:07,931 - Solving for lambda
2026-06-02 16:40:07,931 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:07,939 - Solving for lambda took: 0.008817 seconds
2026-06-02 16:40:07,976 - Adjoint solve took: 0.047865 seconds to solve adjoint solution for PerfMeas: tailwater (kper, kstp) (21, 1)
2026-06-02 16:40:07,977 - Write group to hdf file
2026-06-02 16:40:07,986 - Starting adjoint solve for PerfMeas: tailwater (kper, kstp) (20, 1)
2026-06-02 16:40:07,987 - Solving for lambda
2026-06-02 16:40:07,988 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:07,996 - Solving for lambda took: 0.008977 seconds
2026-06-02 16:40:08,034 - Adjoint solve took: 0.048092 seconds to solve adjoint solution for PerfMeas: tailwater (kper, kstp) (20, 1)
2026-06-02 16:40:08,034 - Write group to hdf file
2026-06-02 16:40:08,043 - Starting adjoint solve for PerfMeas: tailwater (kper, kstp) (19, 1)
2026-06-02 16:40:08,045 - Solving for lambda
2026-06-02 16:40:08,045 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:08,053 - Solving for lambda took: 0.008833 seconds
2026-06-02 16:40:08,091 - Adjoint solve took: 0.04858 seconds to solve adjoint solution for PerfMeas: tailwater (kper, kstp) (19, 1)
2026-06-02 16:40:08,092 - Write group to hdf file
2026-06-02 16:40:08,100 - Starting adjoint solve for PerfMeas: tailwater (kper, kstp) (18, 1)
2026-06-02 16:40:08,103 - Solving for lambda
2026-06-02 16:40:08,103 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:08,112 - Solving for lambda took: 0.009076 seconds
2026-06-02 16:40:08,149 - Adjoint solve took: 0.048897 seconds to solve adjoint solution for PerfMeas: tailwater (kper, kstp) (18, 1)
2026-06-02 16:40:08,150 - Write group to hdf file
2026-06-02 16:40:08,158 - Starting adjoint solve for PerfMeas: tailwater (kper, kstp) (17, 1)
2026-06-02 16:40:08,160 - Solving for lambda
2026-06-02 16:40:08,161 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:08,169 - Solving for lambda took: 0.008979 seconds
2026-06-02 16:40:08,207 - Adjoint solve took: 0.048353 seconds to solve adjoint solution for PerfMeas: tailwater (kper, kstp) (17, 1)
2026-06-02 16:40:08,207 - Write group to hdf file
2026-06-02 16:40:08,216 - Starting adjoint solve for PerfMeas: tailwater (kper, kstp) (16, 1)
2026-06-02 16:40:08,218 - Solving for lambda
2026-06-02 16:40:08,218 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:08,227 - Solving for lambda took: 0.008857 seconds
2026-06-02 16:40:08,264 - Adjoint solve took: 0.048529 seconds to solve adjoint solution for PerfMeas: tailwater (kper, kstp) (16, 1)
2026-06-02 16:40:08,265 - Write group to hdf file
2026-06-02 16:40:08,274 - Starting adjoint solve for PerfMeas: tailwater (kper, kstp) (15, 1)
2026-06-02 16:40:08,276 - Solving for lambda
2026-06-02 16:40:08,276 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:08,285 - Solving for lambda took: 0.00935 seconds
2026-06-02 16:40:08,322 - Adjoint solve took: 0.048592 seconds to solve adjoint solution for PerfMeas: tailwater (kper, kstp) (15, 1)
2026-06-02 16:40:08,323 - Write group to hdf file
2026-06-02 16:40:08,331 - Starting adjoint solve for PerfMeas: tailwater (kper, kstp) (14, 1)
2026-06-02 16:40:08,333 - Solving for lambda
2026-06-02 16:40:08,334 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:08,342 - Solving for lambda took: 0.008852 seconds
2026-06-02 16:40:08,379 - Adjoint solve took: 0.047789 seconds to solve adjoint solution for PerfMeas: tailwater (kper, kstp) (14, 1)
2026-06-02 16:40:08,380 - Write group to hdf file
2026-06-02 16:40:08,390 - Starting adjoint solve for PerfMeas: tailwater (kper, kstp) (13, 1)
2026-06-02 16:40:08,392 - Solving for lambda
2026-06-02 16:40:08,393 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:08,401 - Solving for lambda took: 0.008993 seconds
2026-06-02 16:40:08,438 - Adjoint solve took: 0.04832 seconds to solve adjoint solution for PerfMeas: tailwater (kper, kstp) (13, 1)
2026-06-02 16:40:08,439 - Write group to hdf file
2026-06-02 16:40:08,448 - Starting adjoint solve for PerfMeas: tailwater (kper, kstp) (12, 1)
2026-06-02 16:40:08,450 - Solving for lambda
2026-06-02 16:40:08,450 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:08,458 - Solving for lambda took: 0.008948 seconds
2026-06-02 16:40:08,496 - Adjoint solve took: 0.048415 seconds to solve adjoint solution for PerfMeas: tailwater (kper, kstp) (12, 1)
2026-06-02 16:40:08,496 - Write group to hdf file
2026-06-02 16:40:08,505 - Starting adjoint solve for PerfMeas: tailwater (kper, kstp) (11, 1)
2026-06-02 16:40:08,507 - Solving for lambda
2026-06-02 16:40:08,508 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:08,516 - Solving for lambda took: 0.009011 seconds
2026-06-02 16:40:08,553 - Adjoint solve took: 0.04809 seconds to solve adjoint solution for PerfMeas: tailwater (kper, kstp) (11, 1)
2026-06-02 16:40:08,554 - Write group to hdf file
2026-06-02 16:40:08,563 - Starting adjoint solve for PerfMeas: tailwater (kper, kstp) (10, 1)
2026-06-02 16:40:08,565 - Solving for lambda
2026-06-02 16:40:08,566 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:08,574 - Solving for lambda took: 0.008852 seconds
2026-06-02 16:40:08,612 - Adjoint solve took: 0.048386 seconds to solve adjoint solution for PerfMeas: tailwater (kper, kstp) (10, 1)
2026-06-02 16:40:08,612 - Write group to hdf file
2026-06-02 16:40:08,621 - Starting adjoint solve for PerfMeas: tailwater (kper, kstp) (9, 1)
2026-06-02 16:40:08,623 - Solving for lambda
2026-06-02 16:40:08,624 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:08,632 - Solving for lambda took: 0.008969 seconds
2026-06-02 16:40:08,669 - Adjoint solve took: 0.048429 seconds to solve adjoint solution for PerfMeas: tailwater (kper, kstp) (9, 1)
2026-06-02 16:40:08,670 - Write group to hdf file
2026-06-02 16:40:08,679 - Starting adjoint solve for PerfMeas: tailwater (kper, kstp) (8, 1)
2026-06-02 16:40:08,681 - Solving for lambda
2026-06-02 16:40:08,681 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:08,690 - Solving for lambda took: 0.008861 seconds
2026-06-02 16:40:08,727 - Adjoint solve took: 0.047901 seconds to solve adjoint solution for PerfMeas: tailwater (kper, kstp) (8, 1)
2026-06-02 16:40:08,727 - Write group to hdf file
2026-06-02 16:40:08,736 - Starting adjoint solve for PerfMeas: tailwater (kper, kstp) (7, 1)
2026-06-02 16:40:08,738 - Solving for lambda
2026-06-02 16:40:08,738 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:08,747 - Solving for lambda took: 0.009069 seconds
2026-06-02 16:40:08,784 - Adjoint solve took: 0.048235 seconds to solve adjoint solution for PerfMeas: tailwater (kper, kstp) (7, 1)
2026-06-02 16:40:08,785 - Write group to hdf file
2026-06-02 16:40:08,793 - Starting adjoint solve for PerfMeas: tailwater (kper, kstp) (6, 1)
2026-06-02 16:40:08,795 - Solving for lambda
2026-06-02 16:40:08,796 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:08,804 - Solving for lambda took: 0.009078 seconds
2026-06-02 16:40:08,842 - Adjoint solve took: 0.048373 seconds to solve adjoint solution for PerfMeas: tailwater (kper, kstp) (6, 1)
2026-06-02 16:40:08,842 - Write group to hdf file
2026-06-02 16:40:08,851 - Starting adjoint solve for PerfMeas: tailwater (kper, kstp) (5, 1)
2026-06-02 16:40:08,853 - Solving for lambda
2026-06-02 16:40:08,853 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:08,862 - Solving for lambda took: 0.008928 seconds
2026-06-02 16:40:08,899 - Adjoint solve took: 0.048501 seconds to solve adjoint solution for PerfMeas: tailwater (kper, kstp) (5, 1)
2026-06-02 16:40:08,900 - Write group to hdf file
2026-06-02 16:40:08,908 - Starting adjoint solve for PerfMeas: tailwater (kper, kstp) (4, 1)
2026-06-02 16:40:08,911 - Solving for lambda
2026-06-02 16:40:08,911 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:08,920 - Solving for lambda took: 0.009061 seconds
2026-06-02 16:40:08,957 - Adjoint solve took: 0.048422 seconds to solve adjoint solution for PerfMeas: tailwater (kper, kstp) (4, 1)
2026-06-02 16:40:08,957 - Write group to hdf file
2026-06-02 16:40:08,966 - Starting adjoint solve for PerfMeas: tailwater (kper, kstp) (3, 1)
2026-06-02 16:40:08,968 - Solving for lambda
2026-06-02 16:40:08,969 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:08,977 - Solving for lambda took: 0.008869 seconds
2026-06-02 16:40:09,014 - Adjoint solve took: 0.048152 seconds to solve adjoint solution for PerfMeas: tailwater (kper, kstp) (3, 1)
2026-06-02 16:40:09,015 - Write group to hdf file
2026-06-02 16:40:09,024 - Starting adjoint solve for PerfMeas: tailwater (kper, kstp) (2, 1)
2026-06-02 16:40:09,025 - Solving for lambda
2026-06-02 16:40:09,026 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:09,034 - Solving for lambda took: 0.00881 seconds
2026-06-02 16:40:09,072 - Adjoint solve took: 0.048206 seconds to solve adjoint solution for PerfMeas: tailwater (kper, kstp) (2, 1)
2026-06-02 16:40:09,072 - Write group to hdf file
2026-06-02 16:40:09,081 - Starting adjoint solve for PerfMeas: tailwater (kper, kstp) (1, 1)
2026-06-02 16:40:09,083 - Solving for lambda
2026-06-02 16:40:09,083 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:09,092 - Solving for lambda took: 0.009062 seconds
2026-06-02 16:40:09,129 - Adjoint solve took: 0.047995 seconds to solve adjoint solution for PerfMeas: tailwater (kper, kstp) (1, 1)
2026-06-02 16:40:09,129 - Write group to hdf file
2026-06-02 16:40:09,138 - Formulate composite sensitivities
2026-06-02 16:40:09,138 - Writing composite sensitivities
2026-06-02 16:40:09,148 - Adjoint solve took: 1.4881 seconds for pm 'tailwater' at (kper,kstp) (1, 1)
2026-06-02 16:40:09,149 - Starting solve_adjoint at 2026-06-02 16:40:09.149329
2026-06-02 16:40:09,185 - Structured grid found, shape: (3, 40, 20)
2026-06-02 16:40:09,187 - Starting adjoint solve for PerfMeas: pm_combo (kper, kstp) (25, 1)
2026-06-02 16:40:09,190 - Solving for lambda
2026-06-02 16:40:09,190 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:09,198 - Solving for lambda took: 0.00888 seconds
2026-06-02 16:40:09,236 - Adjoint solve took: 0.048111 seconds to solve adjoint solution for PerfMeas: pm_combo (kper, kstp) (25, 1)
2026-06-02 16:40:09,236 - Write group to hdf file
2026-06-02 16:40:09,245 - Starting adjoint solve for PerfMeas: pm_combo (kper, kstp) (24, 1)
2026-06-02 16:40:09,247 - Solving for lambda
2026-06-02 16:40:09,248 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:09,256 - Solving for lambda took: 0.009042 seconds
2026-06-02 16:40:09,295 - Adjoint solve took: 0.049581 seconds to solve adjoint solution for PerfMeas: pm_combo (kper, kstp) (24, 1)
2026-06-02 16:40:09,295 - Write group to hdf file
2026-06-02 16:40:09,304 - Starting adjoint solve for PerfMeas: pm_combo (kper, kstp) (23, 1)
2026-06-02 16:40:09,306 - Solving for lambda
2026-06-02 16:40:09,307 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:09,315 - Solving for lambda took: 0.008828 seconds
2026-06-02 16:40:09,352 - Adjoint solve took: 0.047981 seconds to solve adjoint solution for PerfMeas: pm_combo (kper, kstp) (23, 1)
2026-06-02 16:40:09,353 - Write group to hdf file
2026-06-02 16:40:09,361 - Starting adjoint solve for PerfMeas: pm_combo (kper, kstp) (22, 1)
2026-06-02 16:40:09,363 - Solving for lambda
2026-06-02 16:40:09,364 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:09,372 - Solving for lambda took: 0.008732 seconds
2026-06-02 16:40:09,409 - Adjoint solve took: 0.047666 seconds to solve adjoint solution for PerfMeas: pm_combo (kper, kstp) (22, 1)
2026-06-02 16:40:09,410 - Write group to hdf file
2026-06-02 16:40:09,419 - Starting adjoint solve for PerfMeas: pm_combo (kper, kstp) (21, 1)
2026-06-02 16:40:09,420 - Solving for lambda
2026-06-02 16:40:09,421 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:09,429 - Solving for lambda took: 0.008913 seconds
2026-06-02 16:40:09,467 - Adjoint solve took: 0.048216 seconds to solve adjoint solution for PerfMeas: pm_combo (kper, kstp) (21, 1)
2026-06-02 16:40:09,467 - Write group to hdf file
2026-06-02 16:40:09,476 - Starting adjoint solve for PerfMeas: pm_combo (kper, kstp) (20, 1)
2026-06-02 16:40:09,478 - Solving for lambda
2026-06-02 16:40:09,478 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:09,486 - Solving for lambda took: 0.008696 seconds
2026-06-02 16:40:09,524 - Adjoint solve took: 0.048074 seconds to solve adjoint solution for PerfMeas: pm_combo (kper, kstp) (20, 1)
2026-06-02 16:40:09,524 - Write group to hdf file
2026-06-02 16:40:09,533 - Starting adjoint solve for PerfMeas: pm_combo (kper, kstp) (19, 1)
2026-06-02 16:40:09,535 - Solving for lambda
2026-06-02 16:40:09,535 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:09,544 - Solving for lambda took: 0.008726 seconds
2026-06-02 16:40:09,581 - Adjoint solve took: 0.048099 seconds to solve adjoint solution for PerfMeas: pm_combo (kper, kstp) (19, 1)
2026-06-02 16:40:09,582 - Write group to hdf file
2026-06-02 16:40:09,590 - Starting adjoint solve for PerfMeas: pm_combo (kper, kstp) (18, 1)
2026-06-02 16:40:09,592 - Solving for lambda
2026-06-02 16:40:09,593 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:09,601 - Solving for lambda took: 0.008671 seconds
2026-06-02 16:40:09,639 - Adjoint solve took: 0.048154 seconds to solve adjoint solution for PerfMeas: pm_combo (kper, kstp) (18, 1)
2026-06-02 16:40:09,639 - Write group to hdf file
2026-06-02 16:40:09,648 - Starting adjoint solve for PerfMeas: pm_combo (kper, kstp) (17, 1)
2026-06-02 16:40:09,650 - Solving for lambda
2026-06-02 16:40:09,651 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:09,659 - Solving for lambda took: 0.008665 seconds
2026-06-02 16:40:09,697 - Adjoint solve took: 0.04824 seconds to solve adjoint solution for PerfMeas: pm_combo (kper, kstp) (17, 1)
2026-06-02 16:40:09,697 - Write group to hdf file
2026-06-02 16:40:09,706 - Starting adjoint solve for PerfMeas: pm_combo (kper, kstp) (16, 1)
2026-06-02 16:40:09,708 - Solving for lambda
2026-06-02 16:40:09,709 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:09,717 - Solving for lambda took: 0.00872 seconds
2026-06-02 16:40:09,754 - Adjoint solve took: 0.048204 seconds to solve adjoint solution for PerfMeas: pm_combo (kper, kstp) (16, 1)
2026-06-02 16:40:09,755 - Write group to hdf file
2026-06-02 16:40:09,763 - Starting adjoint solve for PerfMeas: pm_combo (kper, kstp) (15, 1)
2026-06-02 16:40:09,765 - Solving for lambda
2026-06-02 16:40:09,766 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:09,774 - Solving for lambda took: 0.008933 seconds
2026-06-02 16:40:09,812 - Adjoint solve took: 0.048217 seconds to solve adjoint solution for PerfMeas: pm_combo (kper, kstp) (15, 1)
2026-06-02 16:40:09,812 - Write group to hdf file
2026-06-02 16:40:09,821 - Starting adjoint solve for PerfMeas: pm_combo (kper, kstp) (14, 1)
2026-06-02 16:40:09,823 - Solving for lambda
2026-06-02 16:40:09,824 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:09,832 - Solving for lambda took: 0.008754 seconds
2026-06-02 16:40:09,869 - Adjoint solve took: 0.04784 seconds to solve adjoint solution for PerfMeas: pm_combo (kper, kstp) (14, 1)
2026-06-02 16:40:09,869 - Write group to hdf file
2026-06-02 16:40:09,878 - Starting adjoint solve for PerfMeas: pm_combo (kper, kstp) (13, 1)
2026-06-02 16:40:09,880 - Solving for lambda
2026-06-02 16:40:09,881 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:09,889 - Solving for lambda took: 0.008681 seconds
2026-06-02 16:40:09,925 - Adjoint solve took: 0.047224 seconds to solve adjoint solution for PerfMeas: pm_combo (kper, kstp) (13, 1)
2026-06-02 16:40:09,926 - Write group to hdf file
2026-06-02 16:40:09,935 - Starting adjoint solve for PerfMeas: pm_combo (kper, kstp) (12, 1)
2026-06-02 16:40:09,937 - Solving for lambda
2026-06-02 16:40:09,937 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:09,945 - Solving for lambda took: 0.008698 seconds
2026-06-02 16:40:09,982 - Adjoint solve took: 0.047584 seconds to solve adjoint solution for PerfMeas: pm_combo (kper, kstp) (12, 1)
2026-06-02 16:40:09,983 - Write group to hdf file
2026-06-02 16:40:09,991 - Starting adjoint solve for PerfMeas: pm_combo (kper, kstp) (11, 1)
2026-06-02 16:40:09,993 - Solving for lambda
2026-06-02 16:40:09,994 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:10,002 - Solving for lambda took: 0.008866 seconds
2026-06-02 16:40:10,039 - Adjoint solve took: 0.04761 seconds to solve adjoint solution for PerfMeas: pm_combo (kper, kstp) (11, 1)
2026-06-02 16:40:10,040 - Write group to hdf file
2026-06-02 16:40:10,048 - Starting adjoint solve for PerfMeas: pm_combo (kper, kstp) (10, 1)
2026-06-02 16:40:10,050 - Solving for lambda
2026-06-02 16:40:10,051 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:10,059 - Solving for lambda took: 0.008703 seconds
2026-06-02 16:40:10,096 - Adjoint solve took: 0.047741 seconds to solve adjoint solution for PerfMeas: pm_combo (kper, kstp) (10, 1)
2026-06-02 16:40:10,096 - Write group to hdf file
2026-06-02 16:40:10,105 - Starting adjoint solve for PerfMeas: pm_combo (kper, kstp) (9, 1)
2026-06-02 16:40:10,107 - Solving for lambda
2026-06-02 16:40:10,108 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:10,116 - Solving for lambda took: 0.008829 seconds
2026-06-02 16:40:10,153 - Adjoint solve took: 0.047638 seconds to solve adjoint solution for PerfMeas: pm_combo (kper, kstp) (9, 1)
2026-06-02 16:40:10,153 - Write group to hdf file
2026-06-02 16:40:10,162 - Starting adjoint solve for PerfMeas: pm_combo (kper, kstp) (8, 1)
2026-06-02 16:40:10,164 - Solving for lambda
2026-06-02 16:40:10,165 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:10,173 - Solving for lambda took: 0.008919 seconds
2026-06-02 16:40:10,210 - Adjoint solve took: 0.0481 seconds to solve adjoint solution for PerfMeas: pm_combo (kper, kstp) (8, 1)
2026-06-02 16:40:10,211 - Write group to hdf file
2026-06-02 16:40:10,220 - Starting adjoint solve for PerfMeas: pm_combo (kper, kstp) (7, 1)
2026-06-02 16:40:10,221 - Solving for lambda
2026-06-02 16:40:10,222 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:10,230 - Solving for lambda took: 0.008795 seconds
2026-06-02 16:40:10,268 - Adjoint solve took: 0.048414 seconds to solve adjoint solution for PerfMeas: pm_combo (kper, kstp) (7, 1)
2026-06-02 16:40:10,268 - Write group to hdf file
2026-06-02 16:40:10,277 - Starting adjoint solve for PerfMeas: pm_combo (kper, kstp) (6, 1)
2026-06-02 16:40:10,280 - Solving for lambda
2026-06-02 16:40:10,280 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:10,288 - Solving for lambda took: 0.008968 seconds
2026-06-02 16:40:10,326 - Adjoint solve took: 0.048268 seconds to solve adjoint solution for PerfMeas: pm_combo (kper, kstp) (6, 1)
2026-06-02 16:40:10,326 - Write group to hdf file
2026-06-02 16:40:10,335 - Starting adjoint solve for PerfMeas: pm_combo (kper, kstp) (5, 1)
2026-06-02 16:40:10,337 - Solving for lambda
2026-06-02 16:40:10,337 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:10,346 - Solving for lambda took: 0.008687 seconds
2026-06-02 16:40:10,383 - Adjoint solve took: 0.048036 seconds to solve adjoint solution for PerfMeas: pm_combo (kper, kstp) (5, 1)
2026-06-02 16:40:10,384 - Write group to hdf file
2026-06-02 16:40:10,392 - Starting adjoint solve for PerfMeas: pm_combo (kper, kstp) (4, 1)
2026-06-02 16:40:10,394 - Solving for lambda
2026-06-02 16:40:10,395 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:10,403 - Solving for lambda took: 0.008772 seconds
2026-06-02 16:40:10,440 - Adjoint solve took: 0.047663 seconds to solve adjoint solution for PerfMeas: pm_combo (kper, kstp) (4, 1)
2026-06-02 16:40:10,441 - Write group to hdf file
2026-06-02 16:40:10,449 - Starting adjoint solve for PerfMeas: pm_combo (kper, kstp) (3, 1)
2026-06-02 16:40:10,451 - Solving for lambda
2026-06-02 16:40:10,452 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:10,460 - Solving for lambda took: 0.008717 seconds
2026-06-02 16:40:10,496 - Adjoint solve took: 0.047416 seconds to solve adjoint solution for PerfMeas: pm_combo (kper, kstp) (3, 1)
2026-06-02 16:40:10,497 - Write group to hdf file
2026-06-02 16:40:10,506 - Starting adjoint solve for PerfMeas: pm_combo (kper, kstp) (2, 1)
2026-06-02 16:40:10,507 - Solving for lambda
2026-06-02 16:40:10,508 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:10,516 - Solving for lambda took: 0.008682 seconds
2026-06-02 16:40:10,553 - Adjoint solve took: 0.047156 seconds to solve adjoint solution for PerfMeas: pm_combo (kper, kstp) (2, 1)
2026-06-02 16:40:10,553 - Write group to hdf file
2026-06-02 16:40:10,562 - Starting adjoint solve for PerfMeas: pm_combo (kper, kstp) (1, 1)
2026-06-02 16:40:10,564 - Solving for lambda
2026-06-02 16:40:10,564 - Solving with direct with solver options: {'use_umfpack': True}
2026-06-02 16:40:10,573 - Solving for lambda took: 0.008737 seconds
2026-06-02 16:40:10,610 - Adjoint solve took: 0.047845 seconds to solve adjoint solution for PerfMeas: pm_combo (kper, kstp) (1, 1)
2026-06-02 16:40:10,610 - Write group to hdf file
2026-06-02 16:40:10,618 - Formulate composite sensitivities
2026-06-02 16:40:10,619 - Writing composite sensitivities
2026-06-02 16:40:10,628 - Adjoint solve took: 1.4795 seconds for pm 'pm_combo' at (kper,kstp) (1, 1)
2026-06-02 16:40:10,629 - Finalizing Mf6Adj
took: 9.602827
Done. Let’s see what happened.
Plot the Results
[22]:
[f for f in os.listdir(ws) if f.endswith("hdf5")]
[22]:
['adjoint_solution_headwater.hdf5',
'forward.hdf5',
'adjoint_solution_pm_single.hdf5',
'adjoint_solution_pm_single_alltimes.hdf5',
'adjoint_solution_tailwater.hdf5',
'adjoint_solution_pm_ssr.hdf5',
'adjoint_solution_pm_combo.hdf5']
mf6adj uses the widely available HDF5 format to store information. These files hold low-level details about the adjoint solution. However, mf6adj.solve_adjoint() also returns a higher-level summary of the results. Let’s look at that first.
[23]:
type(dfsum)
[23]:
dict
[24]:
list(dfsum.keys())
[24]:
['pm_single',
'pm_single_alltimes',
'pm_ssr',
'headwater',
'tailwater',
'pm_combo']
[25]:
dfhw = dfsum["tailwater"]
dfhw
[25]:
| k11 | k33 | wel6_q | rch6_recharge | ghb-1_bhead | ghb-1_cond | sfr_1_stage | sfr_1_cond | ss | |
|---|---|---|---|---|---|---|---|---|---|
| node | |||||||||
| 1 | -1.491964e-07 | -0.000161 | -0.003008 | -0.003008 | 0.0 | 0.000000 | 0.0 | 0.0 | 0.149167 |
| 2 | -8.505500e-07 | -0.000161 | -0.003040 | -0.003040 | 0.0 | 0.000000 | 0.0 | 0.0 | 0.171382 |
| 3 | -2.176114e-06 | -0.000161 | -0.003104 | -0.003104 | 0.0 | 0.000000 | 0.0 | 0.0 | 0.215097 |
| 4 | -3.974831e-06 | -0.000161 | -0.003197 | -0.003197 | 0.0 | 0.000000 | 0.0 | 0.0 | 0.278914 |
| 5 | -5.970046e-06 | -0.000162 | -0.003317 | -0.003317 | 0.0 | 0.000000 | 0.0 | 0.0 | 0.362320 |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 2392 | -1.845747e-02 | 0.000205 | -0.189114 | -0.189114 | 0.0 | -847.629897 | 0.0 | 0.0 | 356.835428 |
| 2393 | -2.384884e-02 | 0.000206 | -0.222096 | -0.222096 | 0.0 | -845.719024 | 0.0 | 0.0 | 421.364308 |
| 2394 | -3.141873e-02 | 0.000199 | -0.263049 | -0.263049 | 0.0 | -843.484499 | 0.0 | 0.0 | 491.444008 |
| 2395 | -4.392429e-02 | 0.000208 | -0.314419 | -0.314419 | 0.0 | -840.826823 | 0.0 | 0.0 | 566.068014 |
| 2396 | -2.692002e-02 | -0.040386 | -0.380211 | -0.380211 | 0.0 | 0.000000 | 0.0 | 0.0 | 645.496409 |
2118 rows × 9 columns
Those are the node-scale sensitivities for the SFR flux-based performance measure. Plotting them is easiest using the HDF5 file itself.
[26]:
result_hdf = "adjoint_solution_headwater.hdf5"
hdf = h5py.File(pl.Path(ws) / result_hdf, "r")
keys = list(hdf.keys())
keys.sort()
print(keys)
['composite', 'solution_kper:00000_kstp:00000', 'solution_kper:00001_kstp:00000', 'solution_kper:00002_kstp:00000', 'solution_kper:00003_kstp:00000', 'solution_kper:00004_kstp:00000', 'solution_kper:00005_kstp:00000', 'solution_kper:00006_kstp:00000', 'solution_kper:00007_kstp:00000', 'solution_kper:00008_kstp:00000', 'solution_kper:00009_kstp:00000', 'solution_kper:00010_kstp:00000', 'solution_kper:00011_kstp:00000', 'solution_kper:00012_kstp:00000', 'solution_kper:00013_kstp:00000', 'solution_kper:00014_kstp:00000', 'solution_kper:00015_kstp:00000', 'solution_kper:00016_kstp:00000', 'solution_kper:00017_kstp:00000', 'solution_kper:00018_kstp:00000', 'solution_kper:00019_kstp:00000', 'solution_kper:00020_kstp:00000', 'solution_kper:00021_kstp:00000', 'solution_kper:00022_kstp:00000', 'solution_kper:00023_kstp:00000', 'solution_kper:00024_kstp:00000']
The composite group contains sensitivities of the performance measure to the model inputs, summed across all adjoint solutions.
[27]:
grp = hdf["composite"]
plot_keys = [i for i in grp.keys() if len(grp[i].shape) == 3]
plot_keys
[27]:
['ghb-1_bhead',
'ghb-1_cond',
'k11',
'k33',
'rch6_recharge',
'sfr_1_cond',
'sfr_1_stage',
'ss',
'wel6_q']
Here is a simple routine to plot these sensitivities.
[28]:
for pkey in plot_keys:
arr = grp[pkey][:]
for k, karr in enumerate(arr):
karr[karr == 0.0] = np.nan
fig, ax = plot_model(karr)
ax.set_title(pkey + f", layer:{k + 1}", loc="left")
At first glance, this looks surprising: how can we have sensitivity to WEL-type boundaries in every model cell when there are only a few WEL boundaries in the model? And why do we also see recharge in layers 2 and 3? The answer is that the adjoint state is the sensitivity of the performance measure to a unit injection of water in every active model cell, which is equivalent to a WEL-type boundary sensitivity. Recharge is the same quantity scaled by cell area. In effect, those wel6_q plots
are capture-fraction maps for the headwater SFR reaches, and they only take a few seconds to calculate.
We can make similar plots for the other performance measures. Here are the sensitivities for the single-head performance measure.
[29]:
result_hdf = "adjoint_solution_pm_single.hdf5"
hdf = h5py.File(pl.Path(ws) / result_hdf, "r")
keys = list(hdf.keys())
grp = hdf["composite"]
plot_keys = [i for i in grp.keys() if len(grp[i].shape) == 3]
for pkey in plot_keys:
arr = grp[pkey][:]
for k, karr in enumerate(arr):
karr[karr == 0.0] = np.nan
fig, ax = plot_model(karr)
ax.set_title(pkey + f", layer:{k + 1}", loc="left")
And here are the sensitivities for the sum-of-squared-weighted residuals.
[30]:
result_hdf = "adjoint_solution_pm_ssr.hdf5"
hdf = h5py.File(pl.Path(ws) / result_hdf, "r")
keys = list(hdf.keys())
grp = hdf["composite"]
plot_keys = [i for i in grp.keys() if len(grp[i].shape) == 3]
for pkey in plot_keys:
arr = grp[pkey][:]
for k, karr in enumerate(arr):
karr[karr == 0.0] = np.nan
fig, ax = plot_model(karr)
ax.set_title(pkey + f", layer:{k + 1}", loc="left")
[31]:
result_hdf = "adjoint_solution_pm_combo.hdf5"
hdf = h5py.File(pl.Path(ws) / result_hdf, "r")
keys = list(hdf.keys())
grp = hdf["composite"]
plot_keys = [i for i in grp.keys() if len(grp[i].shape) == 3]
for pkey in plot_keys:
arr = grp[pkey][:]
for k, karr in enumerate(arr):
karr[karr == 0.0] = np.nan
fig, ax = plot_model(karr)
ax.set_title(pkey + f", layer:{k + 1}", loc="left")