├── .github └── workflows │ ├── release.yml │ └── tests.yml ├── .gitignore ├── .pre-commit-config.yaml ├── BUILD.md ├── CHANGELOG.md ├── LICENSE ├── MANIFEST.in ├── README.md ├── docs ├── ctypes_declarations.html ├── data.html ├── enum.html ├── finder.html ├── helpers.html ├── index.html ├── logger.html ├── pestutilslib.html ├── pestutilslib │ ├── 27f8c02c8bf9e8d8da35c15fdeb49ccd801b6fce.wmf │ ├── 3b0e642d96cf8c2fa6918ab9ab7cdcd51d2d0a9e.wmf │ ├── 42fe24d599d12d8cdd7204bddb0127a2137d4368.emf │ ├── 664dcbb389df25a182c4f4f4f687db5856f1ddbe.png │ ├── 675c52ab525262814f5fd2e38140492ded091061.wmf │ ├── 7b07d09996a153ee96b89ddade8d58be984eaa9e.emf │ ├── 809a31f7aa3068c2aa737448a4c8bc0c4f49a4fa.wmf │ ├── 86800f31d83e2dea88818e92a85332282d9f0ac6.png │ ├── a5a89d68f7acdbdd57cea0e642175adef1466bf2.wmf │ ├── b7bb599e95261a75aa25fe7fd353c0a8b9a011a1.png │ ├── bce5756a8fb3e4a28413846e3c52f19d28f36d12.png │ ├── docx_to_md.py │ ├── fortran_library_documentation.md │ └── new_function_documentation.docx └── version.html ├── etc ├── environment.yml └── linux-mingw-w64-64bit.txt ├── examples ├── clear_output_all.py ├── exploring_lowlevel_pypestutils_functions.ipynb ├── exploring_pypestutils_helpers.ipynb ├── freyberg_aux_files │ ├── gwlevel_obs.csv │ └── pp_info.csv ├── freyberg_monthly │ ├── freyberg6.dis │ ├── freyberg6.dis.grb │ ├── freyberg6.dis_botm_layer1.txt │ ├── freyberg6.dis_botm_layer2.txt │ ├── freyberg6.dis_botm_layer3.txt │ ├── freyberg6.dis_delc.txt │ ├── freyberg6.dis_delr.txt │ ├── freyberg6.dis_idomain_layer1.txt │ ├── freyberg6.dis_idomain_layer2.txt │ ├── freyberg6.dis_idomain_layer3.txt │ ├── freyberg6.dis_top.txt │ ├── freyberg6.ghb │ ├── freyberg6.ghb_stress_period_data_1.txt │ ├── freyberg6.ic │ ├── freyberg6.ic_strt_layer1.txt │ ├── freyberg6.ic_strt_layer2.txt │ ├── freyberg6.ic_strt_layer3.txt │ ├── freyberg6.ims │ ├── freyberg6.nam │ ├── freyberg6.npf │ ├── freyberg6.npf_icelltype_layer1.txt │ ├── freyberg6.npf_icelltype_layer2.txt │ ├── freyberg6.npf_icelltype_layer3.txt │ ├── freyberg6.npf_k33_layer1.txt │ ├── freyberg6.npf_k33_layer2.txt │ ├── freyberg6.npf_k33_layer3.txt │ ├── freyberg6.npf_k_layer1.txt │ ├── freyberg6.npf_k_layer2.txt │ ├── freyberg6.npf_k_layer3.txt │ ├── freyberg6.obs │ ├── freyberg6.obs_continuous_heads.csv.txt │ ├── freyberg6.oc │ ├── freyberg6.rcha │ ├── freyberg6.rcha_recharge_1.txt │ ├── freyberg6.rcha_recharge_10.txt │ ├── freyberg6.rcha_recharge_11.txt │ ├── freyberg6.rcha_recharge_12.txt │ ├── freyberg6.rcha_recharge_13.txt │ ├── freyberg6.rcha_recharge_14.txt │ ├── freyberg6.rcha_recharge_15.txt │ ├── freyberg6.rcha_recharge_16.txt │ ├── freyberg6.rcha_recharge_17.txt │ ├── freyberg6.rcha_recharge_18.txt │ ├── freyberg6.rcha_recharge_19.txt │ ├── freyberg6.rcha_recharge_2.txt │ ├── freyberg6.rcha_recharge_20.txt │ ├── freyberg6.rcha_recharge_21.txt │ ├── freyberg6.rcha_recharge_22.txt │ ├── freyberg6.rcha_recharge_23.txt │ ├── freyberg6.rcha_recharge_24.txt │ ├── freyberg6.rcha_recharge_25.txt │ ├── freyberg6.rcha_recharge_3.txt │ ├── freyberg6.rcha_recharge_4.txt │ ├── freyberg6.rcha_recharge_5.txt │ ├── freyberg6.rcha_recharge_6.txt │ ├── freyberg6.rcha_recharge_7.txt │ ├── freyberg6.rcha_recharge_8.txt │ ├── freyberg6.rcha_recharge_9.txt │ ├── freyberg6.sfr │ ├── freyberg6.sfr_connectiondata.txt │ ├── freyberg6.sfr_packagedata.txt │ ├── freyberg6.sfr_perioddata_1.txt │ ├── freyberg6.sto │ ├── freyberg6.sto_iconvert_layer1.txt │ ├── freyberg6.sto_iconvert_layer2.txt │ ├── freyberg6.sto_iconvert_layer3.txt │ ├── freyberg6.sto_ss_layer1.txt │ ├── freyberg6.sto_ss_layer2.txt │ ├── freyberg6.sto_ss_layer3.txt │ ├── freyberg6.sto_sy_layer1.txt │ ├── freyberg6.sto_sy_layer2.txt │ ├── freyberg6.sto_sy_layer3.txt │ ├── freyberg6.tdis │ ├── freyberg6.wel │ ├── freyberg6.wel_stress_period_data_1.txt │ ├── freyberg6.wel_stress_period_data_10.txt │ ├── freyberg6.wel_stress_period_data_11.txt │ ├── freyberg6.wel_stress_period_data_12.txt │ ├── freyberg6.wel_stress_period_data_13.txt │ ├── freyberg6.wel_stress_period_data_14.txt │ ├── freyberg6.wel_stress_period_data_15.txt │ ├── freyberg6.wel_stress_period_data_16.txt │ ├── freyberg6.wel_stress_period_data_17.txt │ ├── freyberg6.wel_stress_period_data_18.txt │ ├── freyberg6.wel_stress_period_data_19.txt │ ├── freyberg6.wel_stress_period_data_2.txt │ ├── freyberg6.wel_stress_period_data_20.txt │ ├── freyberg6.wel_stress_period_data_21.txt │ ├── freyberg6.wel_stress_period_data_22.txt │ ├── freyberg6.wel_stress_period_data_23.txt │ ├── freyberg6.wel_stress_period_data_24.txt │ ├── freyberg6.wel_stress_period_data_25.txt │ ├── freyberg6.wel_stress_period_data_3.txt │ ├── freyberg6.wel_stress_period_data_4.txt │ ├── freyberg6.wel_stress_period_data_5.txt │ ├── freyberg6.wel_stress_period_data_6.txt │ ├── freyberg6.wel_stress_period_data_7.txt │ ├── freyberg6.wel_stress_period_data_8.txt │ ├── freyberg6.wel_stress_period_data_9.txt │ ├── freyberg6_freyberg.hds │ ├── freyberg6_freyberg.hds.all.csv │ ├── grid.spc │ ├── heads.csv │ ├── mfsim.nam │ ├── obs_interp_fac.bin │ ├── obs_interp_fac.bln │ ├── sfr.csv │ ├── sfr.obs │ └── sfr.obs_continuous_sfr.csv.txt ├── freyberg_quadtree │ ├── freyberg6.chd │ ├── freyberg6.chd_stress_period_data_1.txt │ ├── freyberg6.disv │ ├── freyberg6.disv.grb │ ├── freyberg6.disv_botm_layer1.txt │ ├── freyberg6.disv_botm_layer2.txt │ ├── freyberg6.disv_botm_layer3.txt │ ├── freyberg6.disv_cell2d.txt │ ├── freyberg6.disv_idomain_layer1.txt │ ├── freyberg6.disv_idomain_layer2.txt │ ├── freyberg6.disv_idomain_layer3.txt │ ├── freyberg6.disv_top.txt │ ├── freyberg6.disv_vertices.txt │ ├── freyberg6.ic │ ├── freyberg6.ic_strt_layer1.txt │ ├── freyberg6.ic_strt_layer2.txt │ ├── freyberg6.ic_strt_layer3.txt │ ├── freyberg6.ims │ ├── freyberg6.nam │ ├── freyberg6.npf │ ├── freyberg6.npf_icelltype.txt │ ├── freyberg6.npf_icelltype_layer1.txt │ ├── freyberg6.npf_icelltype_layer2.txt │ ├── freyberg6.npf_icelltype_layer3.txt │ ├── freyberg6.npf_k33_layer1.txt │ ├── freyberg6.npf_k33_layer2.txt │ ├── freyberg6.npf_k33_layer3.txt │ ├── freyberg6.npf_k_layer1.txt │ ├── freyberg6.npf_k_layer2.txt │ ├── freyberg6.npf_k_layer3.txt │ ├── freyberg6.obs │ ├── freyberg6.obs_continuous_heads.csv.txt │ ├── freyberg6.oc │ ├── freyberg6.rcha │ ├── freyberg6.rcha_recharge_1.txt │ ├── freyberg6.rcha_recharge_10.txt │ ├── freyberg6.rcha_recharge_11.txt │ ├── freyberg6.rcha_recharge_12.txt │ ├── freyberg6.rcha_recharge_13.txt │ ├── freyberg6.rcha_recharge_14.txt │ ├── freyberg6.rcha_recharge_15.txt │ ├── freyberg6.rcha_recharge_16.txt │ ├── freyberg6.rcha_recharge_17.txt │ ├── freyberg6.rcha_recharge_18.txt │ ├── freyberg6.rcha_recharge_19.txt │ ├── freyberg6.rcha_recharge_2.txt │ ├── freyberg6.rcha_recharge_20.txt │ ├── freyberg6.rcha_recharge_21.txt │ ├── freyberg6.rcha_recharge_22.txt │ ├── freyberg6.rcha_recharge_23.txt │ ├── freyberg6.rcha_recharge_24.txt │ ├── freyberg6.rcha_recharge_25.txt │ ├── freyberg6.rcha_recharge_3.txt │ ├── freyberg6.rcha_recharge_4.txt │ ├── freyberg6.rcha_recharge_5.txt │ ├── freyberg6.rcha_recharge_6.txt │ ├── freyberg6.rcha_recharge_7.txt │ ├── freyberg6.rcha_recharge_8.txt │ ├── freyberg6.rcha_recharge_9.txt │ ├── freyberg6.sfr │ ├── freyberg6.sfr.obs │ ├── freyberg6.sfr.obs_continuous_sfr_obs.csv.txt │ ├── freyberg6.sfr_connectiondata.txt │ ├── freyberg6.sfr_packagedata.txt │ ├── freyberg6.sfr_perioddata_1.txt │ ├── freyberg6.sto │ ├── freyberg6.sto_iconvert_layer1.txt │ ├── freyberg6.sto_iconvert_layer2.txt │ ├── freyberg6.sto_iconvert_layer3.txt │ ├── freyberg6.sto_ss_layer1.txt │ ├── freyberg6.sto_ss_layer2.txt │ ├── freyberg6.sto_ss_layer3.txt │ ├── freyberg6.sto_sy_layer1.txt │ ├── freyberg6.sto_sy_layer2.txt │ ├── freyberg6.sto_sy_layer3.txt │ ├── freyberg6.tdis │ ├── freyberg6.wel │ ├── freyberg6.wel_stress_period_data_1.txt │ ├── freyberg6.wel_stress_period_data_10.txt │ ├── freyberg6.wel_stress_period_data_11.txt │ ├── freyberg6.wel_stress_period_data_12.txt │ ├── freyberg6.wel_stress_period_data_13.txt │ ├── freyberg6.wel_stress_period_data_14.txt │ ├── freyberg6.wel_stress_period_data_15.txt │ ├── freyberg6.wel_stress_period_data_16.txt │ ├── freyberg6.wel_stress_period_data_17.txt │ ├── freyberg6.wel_stress_period_data_18.txt │ ├── freyberg6.wel_stress_period_data_19.txt │ ├── freyberg6.wel_stress_period_data_2.txt │ ├── freyberg6.wel_stress_period_data_20.txt │ ├── freyberg6.wel_stress_period_data_21.txt │ ├── freyberg6.wel_stress_period_data_22.txt │ ├── freyberg6.wel_stress_period_data_23.txt │ ├── freyberg6.wel_stress_period_data_24.txt │ ├── freyberg6.wel_stress_period_data_25.txt │ ├── freyberg6.wel_stress_period_data_3.txt │ ├── freyberg6.wel_stress_period_data_4.txt │ ├── freyberg6.wel_stress_period_data_5.txt │ ├── freyberg6.wel_stress_period_data_6.txt │ ├── freyberg6.wel_stress_period_data_7.txt │ ├── freyberg6.wel_stress_period_data_8.txt │ ├── freyberg6.wel_stress_period_data_9.txt │ ├── heads.csv │ ├── mfsim.nam │ ├── sfr.csv │ └── sfr_obs.csv ├── ppu_helpers.py ├── pypestutils_pstfrom_quadtree_mf6.ipynb ├── pypestutils_pstfrom_structured_mf6.ipynb ├── run_notebooks.py ├── swap.py └── understanding_variograms_and_realizations.ipynb ├── meson.build ├── meson.options ├── pestutils ├── deftypes.f90 ├── dimvar.f90 ├── dimvar_c.f90 ├── driver1.f90 ├── driver10.f90 ├── driver11.f90 ├── driver12.f90 ├── driver13.f90 ├── driver14.f90 ├── driver15.f90 ├── driver16.f90 ├── driver17.f90 ├── driver2.f90 ├── driver3.f90 ├── driver4.f90 ├── driver5.f90 ├── driver6.f90 ├── driver7.f90 ├── driver8.f90 ├── driver9.f90 ├── driversubs.f90 ├── funcproc1.f90 ├── funcproc2.f90 ├── function_interfaces.f90 ├── lapack1.F ├── meson.build ├── newfunc.f90 ├── pestutils.def ├── sgsim_code.f90 ├── utl.f90 └── utl_high.f90 ├── pypestutils ├── __init__.py ├── ctypes_declarations.py ├── data.py ├── enum.py ├── finder.py ├── helpers.py ├── logger.py ├── pestutilslib.py └── version.py ├── pyproject.toml ├── scripts ├── build_lib.bat ├── build_lib.sh ├── cross_build_lib.sh └── repair_wheel.py ├── setup.py ├── tests ├── __init__.py ├── common.py ├── conftest.py ├── data │ ├── .gitignore │ ├── PT01.hds │ ├── PT01_r.cbb │ ├── aa.ref │ ├── anis.ref │ ├── bearing.ref │ ├── coast.spc │ ├── coast_heads_wells_r.dat.std │ ├── coast_heads_wells_time_interp_r.dat.std │ ├── coast_r.hds │ ├── coastwells.crd │ ├── coastwells_meastime_r.dat │ ├── driver1a_r.out.std │ ├── driver1b.out.std │ ├── driver1c_r.out.std │ ├── driver1d_r.out.std │ ├── driver1e.out.std │ ├── driver1f.out.std │ ├── driver1g.out.std │ ├── ex-gwf-disvmesh.cbc │ ├── ex-gwf-sfr-p01b.sfr.bud │ ├── ex-gwf-u1disv.cbc │ ├── ex-gwf-u1disv.hds │ ├── factors.dat.std │ ├── factors1.dat.std │ ├── hd1h.bln.std │ ├── hd1h.dis.grb │ ├── hd1h.fac.std │ ├── hd1h_r.hds │ ├── hd1h_wellcoords.csv │ ├── hd1h_wells_sim_r.dat.std │ ├── heads_interp1_sgl.dat.std │ ├── inflow_zones.dat │ ├── inflows.dat.std │ ├── interpolated.ref.std │ ├── interpolated1.ref.std │ ├── lock_bore.csv │ ├── lock_heads_wells_r.dat.std │ ├── lock_heads_wells_time_interp_r.dat.std │ ├── lock_r.hds │ ├── lockwells_meastime.dat │ ├── lockyer.spc │ ├── mean.ref │ ├── nfseg.cbb │ ├── nfseg.cbb.contents.std │ ├── nfseg_rech.dat.std │ ├── nfsegzone.dat │ ├── p09 │ │ ├── gwf-p09-mf6.chd │ │ ├── gwf-p09-mf6.dis │ │ ├── gwf-p09-mf6.dis.grb │ │ ├── gwf-p09-mf6.hds │ │ ├── gwf-p09-mf6.hds.all.csv │ │ ├── gwf-p09-mf6.ic │ │ ├── gwf-p09-mf6.ims │ │ ├── gwf-p09-mf6.nam │ │ ├── gwf-p09-mf6.npf │ │ ├── gwf-p09-mf6.oc │ │ ├── gwf-p09-mf6.sto │ │ ├── gwf-p09-mf6.wel │ │ ├── gwt-p09-mf6.adv │ │ ├── gwt-p09-mf6.dis │ │ ├── gwt-p09-mf6.dsp │ │ ├── gwt-p09-mf6.ic │ │ ├── gwt-p09-mf6.ims │ │ ├── gwt-p09-mf6.mst │ │ ├── gwt-p09-mf6.nam │ │ ├── gwt-p09-mf6.oc │ │ ├── gwt-p09-mf6.ssm │ │ ├── gwt-p09-mf6.ucn │ │ ├── gwt-p09-mf6.ucn.all.csv │ │ ├── mfsim.nam │ │ ├── obs.csv │ │ ├── obs_interp_fac.bin │ │ ├── obs_interp_fac.bln │ │ ├── p09-mf6.gwfgwt │ │ └── temp.tdis │ ├── pp.dat │ ├── rchflow.dat.std │ ├── rchzones.dat │ ├── rect.spc │ ├── rect_sgl.hds │ ├── rectmodel.spc │ ├── sop.cbc │ ├── sop_chd_flows.dat.std │ ├── sop_flow_contents.dat.std │ ├── sop_zones.dat │ ├── sva_tm_r.hds │ ├── sva_tm_t_r.cbc │ ├── umodel_obstimes.dat │ ├── umodel_usg_wel.cbc │ ├── umodel_wellflow.dat.std │ ├── umodel_wellflow_interp.dat.std │ ├── vdl.disv.grb │ ├── vdl.fac.std │ ├── vdl.hds │ ├── vdl_interp.bln.std │ ├── vdl_well_heads.dat.std │ ├── vdl_wells.csv │ ├── wells.crd │ ├── wellzone.dat │ └── zones.inf ├── test_crash.py ├── test_ctypes_declarations.py ├── test_data.py ├── test_drivers.py ├── test_enum.py ├── test_helpers.py ├── test_notebooks.py └── test_pestutilslib.py └── tox.ini /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Build wheels 2 | 3 | on: 4 | schedule: 5 | - cron: '42 8 2-30/2 * *' # At 08:42 UTC on every 2nd day-of-month 6 | pull_request: 7 | paths: # only run this with PRs that touch these files 8 | - ".github/workflows/release.yml" 9 | - "scripts/build_lib.*" 10 | - "pyproject.toml" 11 | - "setup.py" 12 | push: 13 | branches: 14 | - main 15 | tags: 16 | - "*" 17 | release: 18 | types: 19 | - published 20 | workflow_dispatch: 21 | 22 | jobs: 23 | build_wheels: 24 | name: Build wheels on ${{ matrix.os }}-${{ matrix.arch }} 25 | runs-on: ${{ matrix.os }} 26 | strategy: 27 | fail-fast: false 28 | matrix: 29 | include: 30 | - os: ubuntu-22.04 31 | arch: x86_64 32 | - os: ubuntu-22.04 33 | arch: aarch64 34 | - os: windows-2022 35 | arch: AMD64 36 | - os: macos-13 37 | arch: x86_64 38 | macosx_deployment_target: "13.0" 39 | cmake_osx_architectures: x86_64 40 | - os: macos-14 41 | arch: arm64 42 | macosx_deployment_target: "14.0" 43 | cmake_osx_architectures: arm64 44 | 45 | steps: 46 | - uses: actions/checkout@v4 47 | 48 | - name: Set up QEMU 49 | if: runner.os == 'Linux' && matrix.arch == 'aarch64' 50 | uses: docker/setup-qemu-action@v3 51 | with: 52 | platforms: arm64 53 | 54 | - name: Install MinGW-w64 tools (Windows) 55 | if: runner.os == 'Windows' 56 | uses: msys2/setup-msys2@v2 57 | with: 58 | msystem: mingw64 59 | path-type: inherit 60 | install: >- 61 | mingw-w64-x86_64-gcc-fortran 62 | mingw-w64-x86_64-lapack 63 | mingw-w64-x86_64-meson 64 | mingw-w64-x86_64-ninja 65 | 66 | - name: Build pestutils (Windows) 67 | if: runner.os == 'Windows' 68 | shell: msys2 {0} 69 | env: 70 | LDFLAGS: -static-libgcc -static-libgfortran -static-libquadmath -Wl,-Bstatic,--whole-archive -lwinpthread -Wl,--no-whole-archive 71 | run: bash scripts/build_lib.sh 72 | 73 | - name: Build wheels 74 | uses: pypa/cibuildwheel@v2.22.0 75 | env: 76 | CIBW_ARCHS: ${{ matrix.arch }} 77 | CIBW_ENVIRONMENT_MACOS: 78 | FC=gfortran-13 79 | MACOSX_DEPLOYMENT_TARGET='${{ matrix.macosx_deployment_target }}' 80 | CMAKE_OSX_ARCHITECTURES='${{ matrix.cmake_osx_architectures }}' 81 | 82 | - uses: actions/upload-artifact@v4 83 | with: 84 | name: cibw-wheels-${{ matrix.os }}-${{ matrix.arch }} 85 | path: ./wheelhouse/*.whl 86 | 87 | build_sdist: 88 | name: Build source distribution 89 | runs-on: ubuntu-latest 90 | steps: 91 | - uses: actions/checkout@v4 92 | 93 | - name: Build sdist 94 | run: pipx run build --sdist 95 | 96 | - uses: actions/upload-artifact@v4 97 | with: 98 | name: cibw-sdist 99 | path: dist/*.tar.gz 100 | 101 | upload_pypi: 102 | needs: [build_wheels, build_sdist] 103 | runs-on: ubuntu-latest 104 | environment: pypi 105 | permissions: 106 | id-token: write 107 | if: github.event_name == 'release' && github.event.action == 'published' 108 | # or, alternatively, upload to PyPI on every tag starting with 'v' (remove on: release above to use this) 109 | # if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v') 110 | steps: 111 | - uses: actions/download-artifact@v4 112 | with: 113 | # unpacks all CIBW artifacts into dist/ 114 | pattern: cibw-* 115 | path: dist 116 | merge-multiple: true 117 | 118 | - name: Publish package to PyPI 119 | uses: pypa/gh-action-pypi-publish@release/v1 120 | -------------------------------------------------------------------------------- /.github/workflows/tests.yml: -------------------------------------------------------------------------------- 1 | name: Tests 2 | 3 | on: 4 | schedule: 5 | - cron: '42 8 2-30/2 * *' # At 08:42 UTC on every 2nd day-of-month 6 | push: 7 | pull_request: 8 | workflow_dispatch: 9 | 10 | jobs: 11 | tests: 12 | name: Tests on ${{ matrix.os }} Python-${{ matrix.python-version }} 13 | runs-on: ${{ matrix.os }} 14 | strategy: 15 | fail-fast: false 16 | matrix: 17 | os: [ubuntu-latest, macos-latest, windows-latest] 18 | python-version: ["3.9", "3.13"] # run lower and upper versions 19 | 20 | steps: 21 | - uses: actions/checkout@v4 22 | 23 | - name: Setup Python ${{ matrix.python-version }} 24 | uses: astral-sh/setup-uv@v5 25 | with: 26 | python-version: ${{ matrix.python-version }} 27 | 28 | - name: Install MinGW-w64 tools (Windows) 29 | if: runner.os == 'Windows' 30 | uses: msys2/setup-msys2@v2 31 | with: 32 | msystem: mingw64 33 | path-type: inherit 34 | install: >- 35 | mingw-w64-x86_64-gcc-fortran 36 | mingw-w64-x86_64-lapack 37 | mingw-w64-x86_64-meson 38 | mingw-w64-x86_64-ninja 39 | 40 | - name: Install GCC Fortran (macOS) 41 | if: runner.os == 'macOS' 42 | uses: fortran-lang/setup-fortran@v1 43 | with: 44 | compiler: gcc 45 | version: 13 46 | 47 | - name: Install build requirements 48 | run: uv pip install meson ninja 49 | 50 | - name: Build pestutils (Windows) 51 | if: runner.os == 'Windows' 52 | shell: msys2 {0} 53 | env: 54 | LDFLAGS: -static-libgcc -static-libgfortran -static-libquadmath -Wl,-Bstatic,--whole-archive -lwinpthread -Wl,--no-whole-archive 55 | run: bash scripts/build_lib.sh 56 | 57 | - name: Build pestutils (non-Windows) 58 | if: runner.os != 'Windows' 59 | run: bash scripts/build_lib.sh 60 | 61 | - name: Install package and all extras 62 | run: uv sync --all-extras 63 | 64 | - name: Run tests 65 | run: uv run pytest -v 66 | env: 67 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} 68 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # General 2 | .DS_Store 3 | *.swp 4 | *.*~ 5 | ~$* 6 | 7 | # Modflow outputs 8 | *.lst 9 | *.list 10 | *.grb 11 | *.cbc 12 | *.cbb 13 | *.bud 14 | *.hds 15 | *.hed 16 | *.ucn 17 | *.out 18 | *.out.csv 19 | 20 | # Byte-compiled / optimized 21 | __pycache__/ 22 | *.py[cod] 23 | *$py.class 24 | 25 | # C extensions / DLL files 26 | *.dll 27 | *.mod 28 | *.o 29 | *.obj 30 | *.so 31 | *.lib 32 | 33 | # Local installation and misc. dirs 34 | inst/ 35 | org_from_john 36 | 37 | # Distribution / packaging 38 | .Python 39 | build/ 40 | develop-eggs/ 41 | dist/ 42 | downloads/ 43 | eggs/ 44 | .eggs/ 45 | lib/ 46 | lib64/ 47 | parts/ 48 | sdist/ 49 | var/ 50 | wheels/ 51 | pip-wheel-metadata/ 52 | share/python-wheels/ 53 | *.egg-info/ 54 | .installed.cfg 55 | *.egg 56 | MANIFEST 57 | wheelhouse/ 58 | 59 | # PyInstaller 60 | # Usually these files are written by a python script from a template 61 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 62 | *.manifest 63 | *.spec 64 | 65 | # Installer logs 66 | pip-log.txt 67 | pip-delete-this-directory.txt 68 | 69 | # Unit test / coverage reports 70 | htmlcov/ 71 | .tox/ 72 | .nox/ 73 | .coverage 74 | .coverage.* 75 | .cache 76 | nosetests.xml 77 | coverage.xml 78 | *.cover 79 | *.py,cover 80 | .hypothesis/ 81 | .pytest_cache/ 82 | 83 | # Translations 84 | *.mo 85 | *.pot 86 | 87 | # Django stuff: 88 | *.log 89 | local_settings.py 90 | db.sqlite3 91 | db.sqlite3-journal 92 | 93 | # Flask stuff: 94 | instance/ 95 | .webassets-cache 96 | 97 | # Scrapy stuff: 98 | .scrapy 99 | 100 | # Sphinx documentation 101 | docs/_build/ 102 | 103 | # PyBuilder 104 | target/ 105 | 106 | # Jupyter Notebook 107 | .ipynb_checkpoints 108 | 109 | # IPython 110 | profile_default/ 111 | ipython_config.py 112 | 113 | # pyenv 114 | .python-version 115 | 116 | # pipenv 117 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 118 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 119 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 120 | # install all needed dependencies. 121 | #Pipfile.lock 122 | 123 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 124 | __pypackages__/ 125 | 126 | # Celery stuff 127 | celerybeat-schedule 128 | celerybeat.pid 129 | 130 | # SageMath parsed files 131 | *.sage.py 132 | 133 | # Environments 134 | .env 135 | .venv 136 | env/ 137 | venv/ 138 | ENV/ 139 | env.bak/ 140 | venv.bak/ 141 | 142 | # Spyder project settings 143 | .spyderproject 144 | .spyproject 145 | 146 | # Rope project settings 147 | .ropeproject 148 | 149 | # mkdocs documentation 150 | /site 151 | 152 | # mypy 153 | .mypy_cache/ 154 | .dmypy.json 155 | dmypy.json 156 | 157 | # Pyre type checker 158 | .pyre/ 159 | 160 | # Debug 161 | .gdb_history 162 | -------------------------------------------------------------------------------- /.pre-commit-config.yaml: -------------------------------------------------------------------------------- 1 | ci: 2 | autoupdate_schedule: quarterly 3 | exclude: \.grb$ 4 | repos: 5 | - repo: https://github.com/pre-commit/pre-commit-hooks 6 | rev: v5.0.0 7 | hooks: 8 | - id: check-yaml 9 | - repo: https://github.com/astral-sh/ruff-pre-commit 10 | rev: v0.11.4 11 | hooks: 12 | # Run the linter. 13 | - id: ruff 14 | args: [ --fix ] 15 | # Run the formatter. 16 | - id: ruff-format 17 | -------------------------------------------------------------------------------- /BUILD.md: -------------------------------------------------------------------------------- 1 | # Building 2 | 3 | Pypestutils requires a `pestutils` shared library, which needs to be compiled with the following requirements: 4 | 5 | - Fortran compiler - tested successfully with GNU Fortran (gfortran) and Intel Fortran (ifort) 6 | - [Meson](https://mesonbuild.com/) >=1.1.0 7 | - [Ninja](https://ninja-build.org/) 8 | 9 | Recent versions of meson and ninja can be installed via Python pip (if available) using `pip install meson ninja`. 10 | 11 | The following sections describe how to build a shared library of `pestutils`, which then needs to be copied into the module path `pypestutils/lib/` to enable it to be found by the Python module via ctypes. 12 | 13 | Then to install a development version of pypestutils use: 14 | ```bash 15 | pip install -e . 16 | ``` 17 | 18 | ## Build pestutils on Linux / macOS / Windows (MSYS2) 19 | 20 | The easiest method is to run a bash script to configure build and install the shared library: 21 | ```bash 22 | ./scripts/build_lib.sh 23 | ``` 24 | 25 | Or manually with these steps: 26 | ```bash 27 | meson setup builddir # options 28 | meson compile -C builddir 29 | ``` 30 | 31 | After it is compiled, install to the Python module using: 32 | ```bash 33 | mkdir pypestutils/lib 34 | # for Linux 35 | cp builddir/pestutils/libpestutils.so pypestutils/lib/ 36 | # for macOS 37 | cp builddir/pestutils/libpestutils.dylib pypestutils/lib/ 38 | # for Windows via MSYS2 39 | cp builddir/pestutils/pestutils.dll pypestutils/lib/ 40 | ``` 41 | 42 | ## Build pestutils on Windows 43 | 44 | There are a few methods to compile the Fortran library on Windows. 45 | 46 | ### MSYS2 47 | 48 | Set-up a development environment with these tools: 49 | ```bash 50 | pacman -S mingw-w64-x86_64-meson mingw-w64-x86_64-ninja mingw-w64-x86_64-gcc-fortran 51 | ``` 52 | To build a shared library without other dependencies, use the following linker flags: 53 | ```bash 54 | export LDFLAGS="-static-libgcc -static-libgfortran -static-libquadmath -Wl,-Bstatic,--whole-archive -lwinpthread -Wl,--no-whole-archive" 55 | ``` 56 | Then refer to the above section, as the steps are similar to Linux and macOS via MSYS2 bash. 57 | 58 | ### CMD.EXE 59 | 60 | This method uses Windows' classic CMD.EXE command prompt, which can be configured according to the next sections. 61 | 62 | The easy method to configure, build and install the library is to run: 63 | ``` 64 | CALL scripts\build_lib.bat 65 | ``` 66 | 67 | Or manually with these steps: 68 | ``` 69 | meson setup builddir # options 70 | meson compile -C builddir 71 | ``` 72 | 73 | After it is compiled, install using: 74 | ``` 75 | MD pypestutils\lib 76 | COPY /B inst\bin\pestutils.dll pypestutils\lib 77 | ``` 78 | 79 | #### Conda 80 | 81 | Conda (or miniconda, miniforge, mambaforge, etc.) is a popular tool for development, particularly for Windows. Install the requirements using conda or mamba: 82 | ``` 83 | mamba install m2w64-gcc-fortran meson ninja 84 | ``` 85 | 86 | #### Intel oneAPI 87 | 88 | Intel oneAPI can be installed with a Fortran compiler. After it is installed, open an Intel oneAPI Tools command prompt with ifort, and ensure meson and ninja are also available too. 89 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # ChangeLog 2 | All notable changes to this project will be documented in this file. 3 | 4 | The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), 5 | and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). 6 | 7 | ## [Unreleased] 8 | ### Added 9 | ### Changed 10 | ### Fixed 11 | 12 | ## [0.3.0] - 2025-02-12 13 | ### Changed 14 | - Set minimum Python 3.9 (#36) 15 | - Updated cibuildwheel workflow, build macos arm64 wheels from GHA (#30, #32) 16 | - Fix finder.load() for conda and LD path search 17 | - Fix typos (#37) 18 | - Use ruff format, apply ruff check rules, add pre-commit (#38, #45) 19 | 20 | ### Fixed 21 | - Fix in `mod2obs_mf6` with different depvar names (#33) 22 | 23 | ## [0.2.1] - 2024-01-23 24 | ### Fixed 25 | - Fix AttributeError: 'DataFrame' object has no attribute 'site' (#21) 26 | - Fix finder.load() for conda and LD path search 27 | 28 | ### Changed 29 | - Aniso default to 1 in non hyperpar pp interp (#19) 30 | 31 | ## [0.2.0] - 2023-10-27 32 | ### Added 33 | - Start this change log file 34 | - Add `get_cell_centres_structured` and `get_cell_centres_mf6` 35 | - Add basic docs and notebook examples 36 | 37 | ### Changed 38 | - Use `vs_module_defs` instead of compiler directives (#12) 39 | 40 | ## [0.1.0] - 2023-09-13 41 | ### Added 42 | - Initial pre-alpha release 43 | 44 | [Unreleased]: https://github.com/pypest/pypestutils/compare/v0.3.0...develop 45 | [0.3.0]: https://github.com/pypest/pypestutils/compare/v0.2.1...v0.3.0 46 | [0.2.1]: https://github.com/pypest/pypestutils/compare/v0.2.0...v0.2.1 47 | [0.2.0]: https://github.com/pypest/pypestutils/compare/v0.1.0...v0.2.0 48 | [0.1.0]: https://github.com/pypest/pypestutils/releases/tag/v0.1.0 49 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | This is free and unencumbered software released into the public domain. 2 | 3 | Anyone is free to copy, modify, publish, use, compile, sell, or 4 | distribute this software, either in source code form or as a compiled 5 | binary, for any purpose, commercial or non-commercial, and by any 6 | means. 7 | 8 | In jurisdictions that recognize copyright laws, the author or authors 9 | of this software dedicate any and all copyright interest in the 10 | software to the public domain. We make this dedication for the benefit 11 | of the public at large and to the detriment of our heirs and 12 | successors. We intend this dedication to be an overt act of 13 | relinquishment in perpetuity of all present and future rights to this 14 | software under copyright law. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 19 | IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR 20 | OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 21 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22 | OTHER DEALINGS IN THE SOFTWARE. 23 | 24 | For more information, please refer to 25 | -------------------------------------------------------------------------------- /MANIFEST.in: -------------------------------------------------------------------------------- 1 | include meson.build meson.options 2 | graft etc 3 | graft pestutils 4 | graft pypestutils 5 | graft scripts 6 | prune tests 7 | global-exclude *.py[cod] 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # PyPestUtils 2 | 3 | Suite of Python tools based on PEST utilities to support parameterization with pilot points, drawing stochastic realizations, and MODFLOW post-processing for structured and unstructured grids. This package consists of a (pre-)compiled shared fortran library, and a corresponding low-level python wrapper around the library functions. There are also higher-level "helper" functions to further abstract the granular low-level function calls for common workflow elements. 4 | 5 | The low-level functions are relatively strict in their argument types - this is required to effectively pass the array-type data container references to the fortran library. As such, the low-level python functions perform considerable type checking. The higher-level helpers attempt to support a variety of argument types and will attempt coerce to the required type. 6 | 7 | This package is currently in pre-alpha development, and is not suitable for use, but early adopters are welcome to have a go. 8 | 9 | ## Examples 10 | 11 | There are several jupyter notebook examples of using pypestutils for a structured and quadtree Freyberg model. These notebooks rely on both [flopy](https://github.com/modflowpy/flopy) and [pyEMU](https://github.com/pypest/pyemu) to help with visualization and processing. 12 | 13 | The use the low-level python interface to the shared fortran library, you create a `PESTUTILSLIB` instance and then can directly call the shared library routines: 14 | 15 | ``` 16 | from pypestutils.pestutilslib import PestUtilsLib 17 | lib = PestUtilsLib() #the constructor searches for the shared lib 18 | grid_info = lib.install_mf6_grid_from_file("grid","freyberg6.disv.grb") 19 | easting,northing,elev = lib.get_cell_centres_mf6("grid",grid_info["ncells"]) 20 | ``` 21 | 22 | The higher-level helper functions obsecure the calls the fortran library and string together multiple low-level function calls: 23 | 24 | ``` 25 | import pypestutils.helpers as helpers 26 | grid_info = helpers.get_grid_info_from_file("freyberg6.disv.grb") 27 | ``` 28 | 29 | ## Documentation 30 | 31 | The documentation for pypestutils can be found [here](https://pypest.github.io/pypestutils/) 32 | 33 | The documentation for the shared FORTRAN library can be found [here](docs/pestutilslib/fortran_library_documentation.md) 34 | 35 | ## Installation 36 | 37 | ### Dependencies 38 | 39 | pypestutils requires `numpy` and `pandas` 40 | 41 | ### Easy way 42 | 43 | Use `pip` to install a built distribution for Windows, Linux or macOS: 44 | 45 | pip install pypestutils 46 | 47 | to also include optional requirements use: 48 | 49 | pip install pypestutils[optional] 50 | 51 | ### From source 52 | 53 | Installation from source requires a Fortran compiler and build tools. See [BUILD.md](BUILD.md) for details. 54 | 55 | ## Disclaimer 56 | 57 | 58 | This software is preliminary or provisional and is subject to revision. It is 59 | being provided to meet the need for timely best science. This software is 60 | provided "as is" and "as-available", and makes no representations or warranties 61 | of any kind concerning the software, whether express, implied, statutory, or 62 | other. This includes, without limitation, warranties of title, 63 | merchantability, fitness for a particular purpose, non-infringement, absence 64 | of latent or other defects, accuracy, or the presence or absence of errors, 65 | whether or not known or discoverable. 66 | -------------------------------------------------------------------------------- /docs/pestutilslib/27f8c02c8bf9e8d8da35c15fdeb49ccd801b6fce.wmf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pypest/pypestutils/7cf08f36ba09c38580c0b38b08bcfbc0fdeb55bb/docs/pestutilslib/27f8c02c8bf9e8d8da35c15fdeb49ccd801b6fce.wmf -------------------------------------------------------------------------------- /docs/pestutilslib/3b0e642d96cf8c2fa6918ab9ab7cdcd51d2d0a9e.wmf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pypest/pypestutils/7cf08f36ba09c38580c0b38b08bcfbc0fdeb55bb/docs/pestutilslib/3b0e642d96cf8c2fa6918ab9ab7cdcd51d2d0a9e.wmf -------------------------------------------------------------------------------- /docs/pestutilslib/42fe24d599d12d8cdd7204bddb0127a2137d4368.emf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pypest/pypestutils/7cf08f36ba09c38580c0b38b08bcfbc0fdeb55bb/docs/pestutilslib/42fe24d599d12d8cdd7204bddb0127a2137d4368.emf -------------------------------------------------------------------------------- /docs/pestutilslib/664dcbb389df25a182c4f4f4f687db5856f1ddbe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pypest/pypestutils/7cf08f36ba09c38580c0b38b08bcfbc0fdeb55bb/docs/pestutilslib/664dcbb389df25a182c4f4f4f687db5856f1ddbe.png -------------------------------------------------------------------------------- /docs/pestutilslib/675c52ab525262814f5fd2e38140492ded091061.wmf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pypest/pypestutils/7cf08f36ba09c38580c0b38b08bcfbc0fdeb55bb/docs/pestutilslib/675c52ab525262814f5fd2e38140492ded091061.wmf -------------------------------------------------------------------------------- /docs/pestutilslib/7b07d09996a153ee96b89ddade8d58be984eaa9e.emf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pypest/pypestutils/7cf08f36ba09c38580c0b38b08bcfbc0fdeb55bb/docs/pestutilslib/7b07d09996a153ee96b89ddade8d58be984eaa9e.emf -------------------------------------------------------------------------------- /docs/pestutilslib/809a31f7aa3068c2aa737448a4c8bc0c4f49a4fa.wmf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pypest/pypestutils/7cf08f36ba09c38580c0b38b08bcfbc0fdeb55bb/docs/pestutilslib/809a31f7aa3068c2aa737448a4c8bc0c4f49a4fa.wmf -------------------------------------------------------------------------------- /docs/pestutilslib/86800f31d83e2dea88818e92a85332282d9f0ac6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pypest/pypestutils/7cf08f36ba09c38580c0b38b08bcfbc0fdeb55bb/docs/pestutilslib/86800f31d83e2dea88818e92a85332282d9f0ac6.png -------------------------------------------------------------------------------- /docs/pestutilslib/a5a89d68f7acdbdd57cea0e642175adef1466bf2.wmf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pypest/pypestutils/7cf08f36ba09c38580c0b38b08bcfbc0fdeb55bb/docs/pestutilslib/a5a89d68f7acdbdd57cea0e642175adef1466bf2.wmf -------------------------------------------------------------------------------- /docs/pestutilslib/b7bb599e95261a75aa25fe7fd353c0a8b9a011a1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pypest/pypestutils/7cf08f36ba09c38580c0b38b08bcfbc0fdeb55bb/docs/pestutilslib/b7bb599e95261a75aa25fe7fd353c0a8b9a011a1.png -------------------------------------------------------------------------------- /docs/pestutilslib/bce5756a8fb3e4a28413846e3c52f19d28f36d12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pypest/pypestutils/7cf08f36ba09c38580c0b38b08bcfbc0fdeb55bb/docs/pestutilslib/bce5756a8fb3e4a28413846e3c52f19d28f36d12.png -------------------------------------------------------------------------------- /docs/pestutilslib/new_function_documentation.docx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pypest/pypestutils/7cf08f36ba09c38580c0b38b08bcfbc0fdeb55bb/docs/pestutilslib/new_function_documentation.docx -------------------------------------------------------------------------------- /etc/environment.yml: -------------------------------------------------------------------------------- 1 | # a conda/mamba env for development and testing 2 | name: pypestutils 3 | 4 | channels: 5 | - conda-forge 6 | - defaults 7 | 8 | dependencies: 9 | - appdirs 10 | - fprettify 11 | - jupytext 12 | - matplotlib 13 | - meson!=0.63.0 14 | - ninja 15 | - numpy 16 | - pandas 17 | - pip 18 | - pytest 19 | - pytest-cases 20 | - pytest-dotenv 21 | - pytest-order 22 | - pytest-xdist 23 | - flaky 24 | - cython 25 | - jupyter 26 | - notebook 27 | - nbconvert 28 | - pip 29 | - pip: 30 | - git+https://github.com/pypest/pyemu.git 31 | - git+https://github.com/modflowpy/flopy.git 32 | - pdoc3 33 | 34 | # Win64 may also want 35 | # - m2w64-gcc-fortran 36 | -------------------------------------------------------------------------------- /etc/linux-mingw-w64-64bit.txt: -------------------------------------------------------------------------------- 1 | [binaries] 2 | fortran = '/usr/bin/x86_64-w64-mingw32-gfortran' 3 | strip = '/usr/bin/x86_64-w64-mingw32-strip' 4 | windres = '/usr/bin/x86_64-w64-mingw32-windres' 5 | exe_wrapper = 'wine' 6 | 7 | [properties] 8 | # Directory that contains 'bin', 'lib', etc 9 | root = '/usr/x86_64-w64-mingw32' 10 | # Directory that contains 'bin', 'lib', etc for the toolchain and system libraries 11 | sys_root = '/usr/x86_64-w64-mingw32/sys-root/mingw' 12 | 13 | [host_machine] 14 | system = 'windows' 15 | cpu_family = 'x86_64' 16 | cpu = 'x86_64' 17 | endian = 'little' 18 | -------------------------------------------------------------------------------- /examples/clear_output_all.py: -------------------------------------------------------------------------------- 1 | from pathlib import Path 2 | from subprocess import run 3 | 4 | notebook_count = 0 5 | for nb_file in Path(__file__).parent.rglob("*.ipynb"): 6 | print("clearing", nb_file) 7 | run( 8 | [ 9 | "jupyter", 10 | "nbconvert", 11 | "--ClearOutputPreprocessor.enabled=True", 12 | "--ClearMetadataPreprocessor.enabled=True", 13 | "--inplace", 14 | nb_file, 15 | ], 16 | check=True, 17 | ) 18 | notebook_count += 1 19 | print(notebook_count, "notebooks cleared") 20 | -------------------------------------------------------------------------------- /examples/freyberg_aux_files/pp_info.csv: -------------------------------------------------------------------------------- 1 | ,ppname,x,y,i,j,value,bearing,aniso,corrlen,zone 2 | pp0,pp0,8079.0,5097.4,5,5,3.0,274.6859101854932,2.727272727272727,91000,1 3 | pp1,pp1,8556.9,4414.8,5,15,3.0,274.6859101854932,8.181818181818182,91000,1 4 | pp2,pp2,9034.9,3732.2,5,25,3.0,274.6859101854932,10.0,91000,1 5 | pp3,pp3,9512.9,3049.6,5,35,3.0,274.6859101854932,10.0,91000,1 6 | pp4,pp4,9990.9,2366.9,5,45,3.0,274.6859101854932,10.0,91000,1 7 | pp5,pp5,10468.9,1684.3,5,55,3.0,274.6859101854932,10.0,91000,1 8 | pp6,pp6,7396.3,4619.5,15,5,3.0,249.69552224206896,2.727272727272727,91000,1 9 | pp7,pp7,7874.3,3936.8,15,15,3.0,249.69552224206896,8.181818181818182,91000,1 10 | pp8,pp8,8352.3,3254.2,15,25,3.0,249.69552224206896,10.0,91000,1 11 | pp9,pp9,8830.3,2571.6,15,35,3.0,249.69552224206896,10.0,91000,1 12 | pp10,pp10,9308.3,1888.9,15,45,3.0,249.69552224206896,10.0,91000,1 13 | pp11,pp11,9786.2,1206.3,15,55,3.0,249.69552224206896,10.0,91000,1 14 | pp12,pp12,6713.7,4141.5,25,5,3.0,202.60831343775516,2.727272727272727,91000,1 15 | pp13,pp13,7669.7,2776.2,25,25,3.0,202.60831343775516,10.0,91000,1 16 | pp14,pp14,8147.7,2093.6,25,35,3.0,202.60831343775516,10.0,91000,1 17 | pp15,pp15,8625.6,1411.0,25,45,3.0,202.60831343775516,10.0,91000,1 18 | pp16,pp16,9103.6,728.3,25,55,3.0,202.60831343775516,10.0,91000,1 19 | pp17,pp17,6031.1,3663.5,35,5,3.0,204.22664116068484,2.727272727272727,91000,1 20 | pp18,pp18,6987.0,2298.2,35,25,3.0,204.22664116068484,10.0,91000,1 21 | pp19,pp19,7465.0,1615.6,35,35,3.0,204.22664116068484,10.0,91000,1 22 | pp20,pp20,7943.0,933.0,35,45,3.0,204.22664116068484,10.0,91000,1 23 | pp21,pp21,8421.0,250.4,35,55,3.0,204.22664116068484,10.0,91000,1 24 | pp22,pp22,5348.5,3185.5,45,5,3.0,252.11711807022863,2.727272727272727,91000,1 25 | pp23,pp23,6304.4,1820.3,45,25,3.0,252.11711807022863,10.0,91000,1 26 | pp24,pp24,6782.4,1137.6,45,35,3.0,252.11711807022863,10.0,91000,1 27 | pp25,pp25,7260.4,455.0,45,45,3.0,252.11711807022863,10.0,91000,1 28 | pp26,pp26,7738.4,-227.6,45,55,3.0,252.11711807022863,10.0,91000,1 29 | pp27,pp27,4665.8,2707.5,55,5,3.0,274.26955822121704,2.727272727272727,91000,1 30 | pp28,pp28,5621.8,1342.3,55,25,3.0,274.26955822121704,10.0,91000,1 31 | pp29,pp29,6099.8,659.6,55,35,3.0,274.26955822121704,10.0,91000,1 32 | pp30,pp30,6577.8,-23.0,55,45,3.0,274.26955822121704,10.0,91000,1 33 | pp31,pp31,7055.7,-705.6,55,55,3.0,274.26955822121704,10.0,91000,1 34 | pp32,pp32,3983.2,2229.5,65,5,3.0,237.37459746960647,2.727272727272727,91000,1 35 | pp33,pp33,4939.2,864.3,65,25,3.0,237.37459746960647,10.0,91000,1 36 | pp34,pp34,5417.1,181.7,65,35,3.0,237.37459746960647,10.0,91000,1 37 | pp35,pp35,5895.1,-501.0,65,45,3.0,237.37459746960647,10.0,91000,1 38 | pp36,pp36,6373.1,-1183.6,65,55,3.0,237.37459746960647,10.0,91000,1 39 | pp37,pp37,3300.6,1751.6,75,5,3.0,196.90908957864977,2.727272727272727,91000,1 40 | pp38,pp38,3778.6,1068.9,75,15,3.0,196.90908957864977,8.181818181818182,91000,1 41 | pp39,pp39,4256.5,386.3,75,25,3.0,196.90908957864977,10.0,91000,1 42 | pp40,pp40,4734.5,-296.3,75,35,3.0,196.90908957864977,10.0,91000,1 43 | pp41,pp41,5212.5,-978.9,75,45,3.0,196.90908957864977,10.0,91000,1 44 | pp42,pp42,5690.5,-1661.6,75,55,3.0,196.90908957864977,10.0,91000,1 45 | pp43,pp43,2618.0,1273.6,85,5,3.0,213.71871693938655,2.727272727272727,91000,1 46 | pp44,pp44,3095.9,591.0,85,15,3.0,213.71871693938655,8.181818181818182,91000,1 47 | pp45,pp45,3573.9,-91.7,85,25,3.0,213.71871693938655,10.0,91000,1 48 | pp46,pp46,4051.9,-774.3,85,35,3.0,213.71871693938655,10.0,91000,1 49 | pp47,pp47,4529.9,-1456.9,85,45,3.0,213.71871693938655,10.0,91000,1 50 | pp48,pp48,5007.9,-2139.5,85,55,3.0,213.71871693938655,10.0,91000,1 51 | pp49,pp49,1935.3,795.6,95,5,3.0,262.5277990819396,2.727272727272727,91000,1 52 | pp50,pp50,2413.3,113.0,95,15,3.0,262.5277990819396,8.181818181818182,91000,1 53 | pp51,pp51,2891.3,-569.6,95,25,3.0,262.5277990819396,10.0,91000,1 54 | pp52,pp52,3369.3,-1252.3,95,35,3.0,262.5277990819396,10.0,91000,1 55 | pp53,pp53,3847.2,-1934.9,95,45,3.0,262.5277990819396,10.0,91000,1 56 | pp54,pp54,4325.2,-2617.5,95,55,3.0,262.5277990819396,10.0,91000,1 57 | pp55,pp55,1730.7,-365.0,105,15,3.0,269.94489562585477,8.181818181818182,91000,1 58 | pp56,pp56,2208.7,-1047.6,105,25,3.0,269.94489562585477,10.0,91000,1 59 | pp57,pp57,2686.6,-1730.3,105,35,3.0,269.94489562585477,10.0,91000,1 60 | pp58,pp58,3164.6,-2412.9,105,45,3.0,269.94489562585477,10.0,91000,1 61 | pp59,pp59,3642.6,-3095.5,105,55,3.0,269.94489562585477,10.0,91000,1 62 | pp60,pp60,1048.1,-843.0,115,15,3.0,224.8173404093516,8.181818181818182,91000,1 63 | pp61,pp61,1526.0,-1525.6,115,25,3.0,224.8173404093516,10.0,91000,1 64 | pp62,pp62,2004.0,-2208.2,115,35,3.0,224.8173404093516,10.0,91000,1 65 | pp63,pp63,2482.0,-2890.9,115,45,3.0,224.8173404093516,10.0,91000,1 66 | -------------------------------------------------------------------------------- /examples/freyberg_monthly/freyberg6.dis: -------------------------------------------------------------------------------- 1 | # File generated by Flopy version 3.3.6 on 09/22/2023 at 19:14:14. 2 | BEGIN Options 3 | LENGTH_UNITS meters 4 | ANGROT -55 5 | END Options 6 | 7 | BEGIN Dimensions 8 | NLAY 3 9 | NROW 120 10 | NCOL 60 11 | END Dimensions 12 | 13 | BEGIN GRIDDATA 14 | delr 15 | OPEN/CLOSE 'freyberg6.dis_delr.txt' FACTOR 1.0 16 | delc 17 | OPEN/CLOSE 'freyberg6.dis_delc.txt' FACTOR 1.0 18 | top 19 | OPEN/CLOSE 'freyberg6.dis_top.txt' FACTOR 1.0 20 | botm LAYERED 21 | OPEN/CLOSE 'freyberg6.dis_botm_layer1.txt' FACTOR 1.0 22 | OPEN/CLOSE 'freyberg6.dis_botm_layer2.txt' FACTOR 1.0 23 | OPEN/CLOSE 'freyberg6.dis_botm_layer3.txt' FACTOR 1.0 24 | idomain LAYERED 25 | OPEN/CLOSE 'freyberg6.dis_idomain_layer1.txt' FACTOR 1 26 | OPEN/CLOSE 'freyberg6.dis_idomain_layer2.txt' FACTOR 1 27 | OPEN/CLOSE 'freyberg6.dis_idomain_layer3.txt' FACTOR 1 28 | END GRIDDATA 29 | 30 | -------------------------------------------------------------------------------- /examples/freyberg_monthly/freyberg6.dis.grb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pypest/pypestutils/7cf08f36ba09c38580c0b38b08bcfbc0fdeb55bb/examples/freyberg_monthly/freyberg6.dis.grb -------------------------------------------------------------------------------- /examples/freyberg_monthly/freyberg6.dis_delc.txt: -------------------------------------------------------------------------------- 1 | 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 2 | 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 3 | -------------------------------------------------------------------------------- /examples/freyberg_monthly/freyberg6.dis_delr.txt: -------------------------------------------------------------------------------- 1 | 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 83.33334000 2 | -------------------------------------------------------------------------------- /examples/freyberg_monthly/freyberg6.ghb: -------------------------------------------------------------------------------- 1 | # File generated by Flopy version 3.3.6 on 09/22/2023 at 19:14:14. 2 | BEGIN Options 3 | PRINT_INPUT 4 | PRINT_FLOWS 5 | SAVE_FLOWS 6 | END Options 7 | 8 | BEGIN Dimensions 9 | MAXBOUND 33 10 | END Dimensions 11 | 12 | BEGIN PERIOD 1 13 | OPEN/CLOSE 'freyberg6.ghb_stress_period_data_1.txt' 14 | END PERIOD 1 15 | 16 | -------------------------------------------------------------------------------- /examples/freyberg_monthly/freyberg6.ghb_stress_period_data_1.txt: -------------------------------------------------------------------------------- 1 | 1 120 16 33.50000000 333.33334000 2 | 1 120 17 33.50000000 333.33334000 3 | 1 120 18 33.50000000 333.33334000 4 | 1 120 19 33.50000000 333.33334000 5 | 1 120 20 33.50000000 333.33334000 6 | 1 120 21 33.50000000 333.33334000 7 | 1 120 22 33.50000000 333.33334000 8 | 1 120 23 33.50000000 333.33334000 9 | 1 120 24 33.50000000 333.33334000 10 | 1 120 25 33.50000000 333.33334000 11 | 1 120 26 33.50000000 333.33334000 12 | 1 120 27 33.50000000 333.33334000 13 | 1 120 28 33.50000000 333.33334000 14 | 1 120 29 33.50000000 333.33334000 15 | 1 120 30 33.50000000 333.33334000 16 | 1 120 31 33.50000000 333.33334000 17 | 1 120 32 33.50000000 333.33334000 18 | 1 120 33 33.50000000 333.33334000 19 | 1 120 34 33.50000000 333.33334000 20 | 1 120 35 33.50000000 333.33334000 21 | 1 120 36 33.50000000 333.33334000 22 | 1 120 37 33.50000000 333.33334000 23 | 1 120 38 33.50000000 333.33334000 24 | 1 120 39 33.50000000 333.33334000 25 | 1 120 40 33.50000000 333.33334000 26 | 1 120 41 33.50000000 333.33334000 27 | 1 120 42 33.50000000 333.33334000 28 | 1 120 43 33.50000000 333.33334000 29 | 1 120 44 33.50000000 333.33334000 30 | 1 120 45 33.50000000 333.33334000 31 | 1 120 46 33.50000000 333.33334000 32 | 1 120 47 33.50000000 333.33334000 33 | 1 120 48 33.50000000 333.33334000 34 | -------------------------------------------------------------------------------- /examples/freyberg_monthly/freyberg6.ic: -------------------------------------------------------------------------------- 1 | # File generated by Flopy version 3.3.6 on 09/22/2023 at 19:14:14. 2 | BEGIN GRIDDATA 3 | strt LAYERED 4 | OPEN/CLOSE 'freyberg6.ic_strt_layer1.txt' FACTOR 1.0 5 | OPEN/CLOSE 'freyberg6.ic_strt_layer2.txt' FACTOR 1.0 6 | OPEN/CLOSE 'freyberg6.ic_strt_layer3.txt' FACTOR 1.0 7 | END GRIDDATA 8 | 9 | -------------------------------------------------------------------------------- /examples/freyberg_monthly/freyberg6.ims: -------------------------------------------------------------------------------- 1 | # File generated by Flopy version 3.3.6 on 09/22/2023 at 19:14:14. 2 | BEGIN Options 3 | PRINT_OPTION summary 4 | COMPLEXITY simple 5 | END Options 6 | 7 | BEGIN Nonlinear 8 | OUTER_HCLOSE 1.00000000E-05 9 | OUTER_MAXIMUM 100 10 | UNDER_RELAXATION dbd 11 | UNDER_RELAXATION_GAMMA 0.00000000 12 | UNDER_RELAXATION_THETA 0.85000000 13 | UNDER_RELAXATION_KAPPA 1.00000000E-05 14 | UNDER_RELAXATION_MOMENTUM 0.10000000 15 | BACKTRACKING_NUMBER 50 16 | BACKTRACKING_TOLERANCE 1.10000000 17 | BACKTRACKING_REDUCTION_FACTOR 0.70000000 18 | BACKTRACKING_RESIDUAL_LIMIT 100.00000000 19 | END Nonlinear 20 | 21 | BEGIN LINEAR 22 | INNER_MAXIMUM 50 23 | INNER_HCLOSE 1.00000000E-06 24 | INNER_RCLOSE 0.10000000 25 | LINEAR_ACCELERATION bicgstab 26 | PRECONDITIONER_LEVELS 1 27 | PRECONDITIONER_DROP_TOLERANCE 0.00100000 28 | NUMBER_ORTHOGONALIZATIONS 2 29 | REORDERING_METHOD rcm 30 | END LINEAR 31 | 32 | -------------------------------------------------------------------------------- /examples/freyberg_monthly/freyberg6.nam: -------------------------------------------------------------------------------- 1 | # File generated by Flopy version 3.3.6 on 09/22/2023 at 19:14:14. 2 | BEGIN Options 3 | LIST freyberg6.lst 4 | NEWTON 5 | END Options 6 | 7 | BEGIN Packages 8 | RCH6 freyberg6.rcha rcha_0 9 | dis6 freyberg6.dis 10 | ic6 freyberg6.ic 11 | npf6 freyberg6.npf 12 | sto6 freyberg6.sto 13 | oc6 freyberg6.oc 14 | ghb6 freyberg6.ghb 15 | sfr6 freyberg6.sfr sfr_1 16 | obs6 freyberg6.obs head_obs 17 | WEL6 freyberg6.wel wel_0 18 | END Packages 19 | 20 | -------------------------------------------------------------------------------- /examples/freyberg_monthly/freyberg6.npf: -------------------------------------------------------------------------------- 1 | # File generated by Flopy version 3.3.6 on 09/22/2023 at 19:14:14. 2 | BEGIN Options 3 | SAVE_FLOWS 4 | END Options 5 | 6 | BEGIN GRIDDATA 7 | icelltype LAYERED 8 | OPEN/CLOSE 'freyberg6.npf_icelltype_layer1.txt' FACTOR 1 9 | OPEN/CLOSE 'freyberg6.npf_icelltype_layer2.txt' FACTOR 1 10 | OPEN/CLOSE 'freyberg6.npf_icelltype_layer3.txt' FACTOR 1 11 | k LAYERED 12 | OPEN/CLOSE 'freyberg6.npf_k_layer1.txt' FACTOR 1.0 13 | OPEN/CLOSE 'freyberg6.npf_k_layer2.txt' FACTOR 1.0 14 | OPEN/CLOSE 'freyberg6.npf_k_layer3.txt' FACTOR 1.0 15 | k33 LAYERED 16 | OPEN/CLOSE 'freyberg6.npf_k33_layer1.txt' FACTOR 1.0 17 | OPEN/CLOSE 'freyberg6.npf_k33_layer2.txt' FACTOR 1.0 18 | OPEN/CLOSE 'freyberg6.npf_k33_layer3.txt' FACTOR 1.0 19 | END GRIDDATA 20 | 21 | -------------------------------------------------------------------------------- /examples/freyberg_monthly/freyberg6.obs: -------------------------------------------------------------------------------- 1 | # File generated by Flopy version 3.3.6 on 09/22/2023 at 19:14:14. 2 | BEGIN options 3 | DIGITS 10 4 | END options 5 | 6 | BEGIN continuous FILEOUT heads.csv 7 | OPEN/CLOSE 'freyberg6.obs_continuous_heads.csv.txt' 8 | END continuous FILEOUT heads.csv 9 | 10 | -------------------------------------------------------------------------------- /examples/freyberg_monthly/freyberg6.obs_continuous_heads.csv.txt: -------------------------------------------------------------------------------- 1 | trgw-2-8-47 head 3 9 48 2 | trgw-2-8-29 head 3 9 30 3 | trgw-2-29-5 head 3 30 6 4 | trgw-2-41-32 head 3 42 33 5 | trgw-2-47-50 head 3 48 51 6 | trgw-2-65-32 head 3 66 33 7 | trgw-2-68-47 head 3 69 48 8 | trgw-2-74-14 head 3 75 15 9 | trgw-2-80-20 head 3 81 21 10 | trgw-2-89-47 head 3 90 48 11 | trgw-2-101-23 head 3 102 24 12 | trgw-2-104-32 head 3 105 33 13 | trgw-0-8-47 head 1 9 48 14 | trgw-0-8-29 head 1 9 30 15 | trgw-0-29-5 head 1 30 6 16 | trgw-0-41-32 head 1 42 33 17 | trgw-0-47-50 head 1 48 51 18 | trgw-0-65-32 head 1 66 33 19 | trgw-0-68-47 head 1 69 48 20 | trgw-0-74-14 head 1 75 15 21 | trgw-0-80-20 head 1 81 21 22 | trgw-0-89-47 head 1 90 48 23 | trgw-0-101-23 head 1 102 24 24 | trgw-0-104-32 head 1 105 33 25 | -------------------------------------------------------------------------------- /examples/freyberg_monthly/freyberg6.oc: -------------------------------------------------------------------------------- 1 | # File generated by Flopy version 3.3.6 on 09/22/2023 at 19:14:14. 2 | BEGIN Options 3 | BUDGET FILEOUT freyberg6_freyberg.cbc 4 | HEAD FILEOUT freyberg6_freyberg.hds 5 | HEAD PRINT_FORMAT COLUMNS 10 WIDTH 11 DIGITS 4 general 6 | END Options 7 | 8 | BEGIN PERIOD 1 9 | SAVE budget all 10 | SAVE head all 11 | PRINT budget all 12 | END PERIOD 1 13 | 14 | -------------------------------------------------------------------------------- /examples/freyberg_monthly/freyberg6.rcha: -------------------------------------------------------------------------------- 1 | # File generated by Flopy version 3.3.6 on 09/22/2023 at 19:14:14. 2 | BEGIN options 3 | READASARRAYS 4 | END options 5 | 6 | BEGIN period 1 7 | recharge 8 | OPEN/CLOSE 'freyberg6.rcha_recharge_1.txt' FACTOR 1.0 9 | END period 1 10 | 11 | BEGIN period 2 12 | recharge 13 | OPEN/CLOSE 'freyberg6.rcha_recharge_2.txt' FACTOR 1.0 14 | END period 2 15 | 16 | BEGIN period 3 17 | recharge 18 | OPEN/CLOSE 'freyberg6.rcha_recharge_3.txt' FACTOR 1.0 19 | END period 3 20 | 21 | BEGIN period 4 22 | recharge 23 | OPEN/CLOSE 'freyberg6.rcha_recharge_4.txt' FACTOR 1.0 24 | END period 4 25 | 26 | BEGIN period 5 27 | recharge 28 | OPEN/CLOSE 'freyberg6.rcha_recharge_5.txt' FACTOR 1.0 29 | END period 5 30 | 31 | BEGIN period 6 32 | recharge 33 | OPEN/CLOSE 'freyberg6.rcha_recharge_6.txt' FACTOR 1.0 34 | END period 6 35 | 36 | BEGIN period 7 37 | recharge 38 | OPEN/CLOSE 'freyberg6.rcha_recharge_7.txt' FACTOR 1.0 39 | END period 7 40 | 41 | BEGIN period 8 42 | recharge 43 | OPEN/CLOSE 'freyberg6.rcha_recharge_8.txt' FACTOR 1.0 44 | END period 8 45 | 46 | BEGIN period 9 47 | recharge 48 | OPEN/CLOSE 'freyberg6.rcha_recharge_9.txt' FACTOR 1.0 49 | END period 9 50 | 51 | BEGIN period 10 52 | recharge 53 | OPEN/CLOSE 'freyberg6.rcha_recharge_10.txt' FACTOR 1.0 54 | END period 10 55 | 56 | BEGIN period 11 57 | recharge 58 | OPEN/CLOSE 'freyberg6.rcha_recharge_11.txt' FACTOR 1.0 59 | END period 11 60 | 61 | BEGIN period 12 62 | recharge 63 | OPEN/CLOSE 'freyberg6.rcha_recharge_12.txt' FACTOR 1.0 64 | END period 12 65 | 66 | BEGIN period 13 67 | recharge 68 | OPEN/CLOSE 'freyberg6.rcha_recharge_13.txt' FACTOR 1.0 69 | END period 13 70 | 71 | BEGIN period 14 72 | recharge 73 | OPEN/CLOSE 'freyberg6.rcha_recharge_14.txt' FACTOR 1.0 74 | END period 14 75 | 76 | BEGIN period 15 77 | recharge 78 | OPEN/CLOSE 'freyberg6.rcha_recharge_15.txt' FACTOR 1.0 79 | END period 15 80 | 81 | BEGIN period 16 82 | recharge 83 | OPEN/CLOSE 'freyberg6.rcha_recharge_16.txt' FACTOR 1.0 84 | END period 16 85 | 86 | BEGIN period 17 87 | recharge 88 | OPEN/CLOSE 'freyberg6.rcha_recharge_17.txt' FACTOR 1.0 89 | END period 17 90 | 91 | BEGIN period 18 92 | recharge 93 | OPEN/CLOSE 'freyberg6.rcha_recharge_18.txt' FACTOR 1.0 94 | END period 18 95 | 96 | BEGIN period 19 97 | recharge 98 | OPEN/CLOSE 'freyberg6.rcha_recharge_19.txt' FACTOR 1.0 99 | END period 19 100 | 101 | BEGIN period 20 102 | recharge 103 | OPEN/CLOSE 'freyberg6.rcha_recharge_20.txt' FACTOR 1.0 104 | END period 20 105 | 106 | BEGIN period 21 107 | recharge 108 | OPEN/CLOSE 'freyberg6.rcha_recharge_21.txt' FACTOR 1.0 109 | END period 21 110 | 111 | BEGIN period 22 112 | recharge 113 | OPEN/CLOSE 'freyberg6.rcha_recharge_22.txt' FACTOR 1.0 114 | END period 22 115 | 116 | BEGIN period 23 117 | recharge 118 | OPEN/CLOSE 'freyberg6.rcha_recharge_23.txt' FACTOR 1.0 119 | END period 23 120 | 121 | BEGIN period 24 122 | recharge 123 | OPEN/CLOSE 'freyberg6.rcha_recharge_24.txt' FACTOR 1.0 124 | END period 24 125 | 126 | BEGIN period 25 127 | recharge 128 | OPEN/CLOSE 'freyberg6.rcha_recharge_25.txt' FACTOR 1.0 129 | END period 25 130 | 131 | -------------------------------------------------------------------------------- /examples/freyberg_monthly/freyberg6.sfr: -------------------------------------------------------------------------------- 1 | # File generated by Flopy version 3.3.6 on 09/22/2023 at 19:14:14. 2 | BEGIN Options 3 | BOUNDNAMES 4 | PRINT_INPUT 5 | SAVE_FLOWS 6 | OBS6 FILEIN sfr.obs 7 | MAXIMUM_DEPTH_CHANGE 1.00000000E-04 8 | UNIT_CONVERSION 86400.00000000 9 | END Options 10 | 11 | BEGIN Dimensions 12 | NREACHES 120 13 | END Dimensions 14 | 15 | BEGIN PACKAGEDATA 16 | OPEN/CLOSE 'freyberg6.sfr_packagedata.txt' 17 | END PACKAGEDATA 18 | 19 | BEGIN CONNECTIONDATA 20 | OPEN/CLOSE 'freyberg6.sfr_connectiondata.txt' 21 | END CONNECTIONDATA 22 | 23 | BEGIN PERIOD 1 24 | OPEN/CLOSE 'freyberg6.sfr_perioddata_1.txt' 25 | END PERIOD 1 26 | 27 | BEGIN PERIOD 2 28 | END PERIOD 2 29 | 30 | -------------------------------------------------------------------------------- /examples/freyberg_monthly/freyberg6.sfr_connectiondata.txt: -------------------------------------------------------------------------------- 1 | 1 -2 2 | 2 1 -3 3 | 3 2 -4 4 | 4 3 -5 5 | 5 4 -6 6 | 6 5 -7 7 | 7 6 -8 8 | 8 7 -9 9 | 9 8 -10 10 | 10 9 -11 11 | 11 10 -12 12 | 12 11 -13 13 | 13 12 -14 14 | 14 13 -15 15 | 15 14 -16 16 | 16 15 -17 17 | 17 16 -18 18 | 18 17 -19 19 | 19 18 -20 20 | 20 19 -21 21 | 21 20 -22 22 | 22 21 -23 23 | 23 22 -24 24 | 24 23 -25 25 | 25 24 -26 26 | 26 25 -27 27 | 27 26 -28 28 | 28 27 -29 29 | 29 28 -30 30 | 30 29 -31 31 | 31 30 -32 32 | 32 31 -33 33 | 33 32 -34 34 | 34 33 -35 35 | 35 34 -36 36 | 36 35 -37 37 | 37 36 -38 38 | 38 37 -39 39 | 39 38 -40 40 | 40 39 -41 41 | 41 40 -42 42 | 42 41 -43 43 | 43 42 -44 44 | 44 43 -45 45 | 45 44 -46 46 | 46 45 -47 47 | 47 46 -48 48 | 48 47 -49 49 | 49 48 -50 50 | 50 49 -51 51 | 51 50 -52 52 | 52 51 -53 53 | 53 52 -54 54 | 54 53 -55 55 | 55 54 -56 56 | 56 55 -57 57 | 57 56 -58 58 | 58 57 -59 59 | 59 58 -60 60 | 60 59 -61 61 | 61 60 -62 62 | 62 61 -63 63 | 63 62 -64 64 | 64 63 -65 65 | 65 64 -66 66 | 66 65 -67 67 | 67 66 -68 68 | 68 67 -69 69 | 69 68 -70 70 | 70 69 -71 71 | 71 70 -72 72 | 72 71 -73 73 | 73 72 -74 74 | 74 73 -75 75 | 75 74 -76 76 | 76 75 -77 77 | 77 76 -78 78 | 78 77 -79 79 | 79 78 -80 80 | 80 79 -81 81 | 81 80 -82 82 | 82 81 -83 83 | 83 82 -84 84 | 84 83 -85 85 | 85 84 -86 86 | 86 85 -87 87 | 87 86 -88 88 | 88 87 -89 89 | 89 88 -90 90 | 90 89 -91 91 | 91 90 -92 92 | 92 91 -93 93 | 93 92 -94 94 | 94 93 -95 95 | 95 94 -96 96 | 96 95 -97 97 | 97 96 -98 98 | 98 97 -99 99 | 99 98 -100 100 | 100 99 -101 101 | 101 100 -102 102 | 102 101 -103 103 | 103 102 -104 104 | 104 103 -105 105 | 105 104 -106 106 | 106 105 -107 107 | 107 106 -108 108 | 108 107 -109 109 | 109 108 -110 110 | 110 109 -111 111 | 111 110 -112 112 | 112 111 -113 113 | 113 112 -114 114 | 114 113 -115 115 | 115 114 -116 116 | 116 115 -117 117 | 117 116 -118 118 | 118 117 -119 119 | 119 118 -120 120 | 120 119 121 | -------------------------------------------------------------------------------- /examples/freyberg_monthly/freyberg6.sfr_perioddata_1.txt: -------------------------------------------------------------------------------- 1 | 1 inflow 500.000000000000 2 | -------------------------------------------------------------------------------- /examples/freyberg_monthly/freyberg6.sto: -------------------------------------------------------------------------------- 1 | # File generated by Flopy version 3.3.6 on 09/22/2023 at 19:14:14. 2 | BEGIN Options 3 | END Options 4 | 5 | BEGIN GRIDDATA 6 | iconvert LAYERED 7 | OPEN/CLOSE 'freyberg6.sto_iconvert_layer1.txt' FACTOR 1 8 | OPEN/CLOSE 'freyberg6.sto_iconvert_layer2.txt' FACTOR 1 9 | OPEN/CLOSE 'freyberg6.sto_iconvert_layer3.txt' FACTOR 1 10 | ss LAYERED 11 | OPEN/CLOSE 'freyberg6.sto_ss_layer1.txt' FACTOR 1.0 12 | OPEN/CLOSE 'freyberg6.sto_ss_layer2.txt' FACTOR 1.0 13 | OPEN/CLOSE 'freyberg6.sto_ss_layer3.txt' FACTOR 1.0 14 | sy LAYERED 15 | OPEN/CLOSE 'freyberg6.sto_sy_layer1.txt' FACTOR 1.0 16 | OPEN/CLOSE 'freyberg6.sto_sy_layer2.txt' FACTOR 1.0 17 | OPEN/CLOSE 'freyberg6.sto_sy_layer3.txt' FACTOR 1.0 18 | END GRIDDATA 19 | 20 | BEGIN Period 1 21 | STEADY-STATE 22 | END Period 1 23 | 24 | BEGIN Period 2 25 | TRANSIENT 26 | END Period 2 27 | 28 | -------------------------------------------------------------------------------- /examples/freyberg_monthly/freyberg6.tdis: -------------------------------------------------------------------------------- 1 | # File generated by Flopy version 3.3.6 on 09/22/2023 at 19:14:14. 2 | BEGIN Options 3 | TIME_UNITS days 4 | END Options 5 | 6 | BEGIN Dimensions 7 | NPER 25 8 | END Dimensions 9 | 10 | BEGIN PERIODDATA 11 | 30.00000000 1 1.00000000 NSTP TSMULT 12 | 30.00000000 1 1.00000000 NSTP TSMULT 13 | 30.00000000 1 1.00000000 NSTP TSMULT 14 | 30.00000000 1 1.00000000 NSTP TSMULT 15 | 30.00000000 1 1.00000000 NSTP TSMULT 16 | 30.00000000 1 1.00000000 NSTP TSMULT 17 | 30.00000000 1 1.00000000 NSTP TSMULT 18 | 30.00000000 1 1.00000000 NSTP TSMULT 19 | 30.00000000 1 1.00000000 NSTP TSMULT 20 | 30.00000000 1 1.00000000 NSTP TSMULT 21 | 30.00000000 1 1.00000000 NSTP TSMULT 22 | 30.00000000 1 1.00000000 NSTP TSMULT 23 | 30.00000000 1 1.00000000 NSTP TSMULT 24 | 30.00000000 1 1.00000000 NSTP TSMULT 25 | 30.00000000 1 1.00000000 NSTP TSMULT 26 | 30.00000000 1 1.00000000 NSTP TSMULT 27 | 30.00000000 1 1.00000000 NSTP TSMULT 28 | 30.00000000 1 1.00000000 NSTP TSMULT 29 | 30.00000000 1 1.00000000 NSTP TSMULT 30 | 30.00000000 1 1.00000000 NSTP TSMULT 31 | 30.00000000 1 1.00000000 NSTP TSMULT 32 | 30.00000000 1 1.00000000 NSTP TSMULT 33 | 30.00000000 1 1.00000000 NSTP TSMULT 34 | 30.00000000 1 1.00000000 NSTP TSMULT 35 | 30.00000000 1 1.00000000 NSTP TSMULT 36 | END PERIODDATA 37 | 38 | -------------------------------------------------------------------------------- /examples/freyberg_monthly/freyberg6.wel: -------------------------------------------------------------------------------- 1 | # File generated by Flopy version 3.3.6 on 09/22/2023 at 19:14:15. 2 | BEGIN options 3 | END options 4 | 5 | BEGIN dimensions 6 | MAXBOUND 6 7 | END dimensions 8 | 9 | BEGIN period 1 10 | OPEN/CLOSE 'freyberg6.wel_stress_period_data_1.txt' 11 | END period 1 12 | 13 | BEGIN period 2 14 | OPEN/CLOSE 'freyberg6.wel_stress_period_data_2.txt' 15 | END period 2 16 | 17 | BEGIN period 3 18 | OPEN/CLOSE 'freyberg6.wel_stress_period_data_3.txt' 19 | END period 3 20 | 21 | BEGIN period 4 22 | OPEN/CLOSE 'freyberg6.wel_stress_period_data_4.txt' 23 | END period 4 24 | 25 | BEGIN period 5 26 | OPEN/CLOSE 'freyberg6.wel_stress_period_data_5.txt' 27 | END period 5 28 | 29 | BEGIN period 6 30 | OPEN/CLOSE 'freyberg6.wel_stress_period_data_6.txt' 31 | END period 6 32 | 33 | BEGIN period 7 34 | OPEN/CLOSE 'freyberg6.wel_stress_period_data_7.txt' 35 | END period 7 36 | 37 | BEGIN period 8 38 | OPEN/CLOSE 'freyberg6.wel_stress_period_data_8.txt' 39 | END period 8 40 | 41 | BEGIN period 9 42 | OPEN/CLOSE 'freyberg6.wel_stress_period_data_9.txt' 43 | END period 9 44 | 45 | BEGIN period 10 46 | OPEN/CLOSE 'freyberg6.wel_stress_period_data_10.txt' 47 | END period 10 48 | 49 | BEGIN period 11 50 | OPEN/CLOSE 'freyberg6.wel_stress_period_data_11.txt' 51 | END period 11 52 | 53 | BEGIN period 12 54 | OPEN/CLOSE 'freyberg6.wel_stress_period_data_12.txt' 55 | END period 12 56 | 57 | BEGIN period 13 58 | OPEN/CLOSE 'freyberg6.wel_stress_period_data_13.txt' 59 | END period 13 60 | 61 | BEGIN period 14 62 | OPEN/CLOSE 'freyberg6.wel_stress_period_data_14.txt' 63 | END period 14 64 | 65 | BEGIN period 15 66 | OPEN/CLOSE 'freyberg6.wel_stress_period_data_15.txt' 67 | END period 15 68 | 69 | BEGIN period 16 70 | OPEN/CLOSE 'freyberg6.wel_stress_period_data_16.txt' 71 | END period 16 72 | 73 | BEGIN period 17 74 | OPEN/CLOSE 'freyberg6.wel_stress_period_data_17.txt' 75 | END period 17 76 | 77 | BEGIN period 18 78 | OPEN/CLOSE 'freyberg6.wel_stress_period_data_18.txt' 79 | END period 18 80 | 81 | BEGIN period 19 82 | OPEN/CLOSE 'freyberg6.wel_stress_period_data_19.txt' 83 | END period 19 84 | 85 | BEGIN period 20 86 | OPEN/CLOSE 'freyberg6.wel_stress_period_data_20.txt' 87 | END period 20 88 | 89 | BEGIN period 21 90 | OPEN/CLOSE 'freyberg6.wel_stress_period_data_21.txt' 91 | END period 21 92 | 93 | BEGIN period 22 94 | OPEN/CLOSE 'freyberg6.wel_stress_period_data_22.txt' 95 | END period 22 96 | 97 | BEGIN period 23 98 | OPEN/CLOSE 'freyberg6.wel_stress_period_data_23.txt' 99 | END period 23 100 | 101 | BEGIN period 24 102 | OPEN/CLOSE 'freyberg6.wel_stress_period_data_24.txt' 103 | END period 24 104 | 105 | BEGIN period 25 106 | OPEN/CLOSE 'freyberg6.wel_stress_period_data_25.txt' 107 | END period 25 108 | 109 | -------------------------------------------------------------------------------- /examples/freyberg_monthly/freyberg6.wel_stress_period_data_1.txt: -------------------------------------------------------------------------------- 1 | 3 29 50 -150.06827167 2 | 3 35 41 -150.06827167 3 | 3 62 44 -150.06827167 4 | 3 80 32 -150.06827167 5 | 3 89 20 -150.06827167 6 | 3 104 38 -150.06827167 7 | -------------------------------------------------------------------------------- /examples/freyberg_monthly/freyberg6.wel_stress_period_data_10.txt: -------------------------------------------------------------------------------- 1 | 3 29 50 -150.06894200 2 | 3 35 41 -150.06894200 3 | 3 62 44 -150.06894200 4 | 3 80 32 -150.06894200 5 | 3 89 20 -150.06894200 6 | 3 104 38 -150.06894200 7 | -------------------------------------------------------------------------------- /examples/freyberg_monthly/freyberg6.wel_stress_period_data_11.txt: -------------------------------------------------------------------------------- 1 | 3 29 50 -150.06550400 2 | 3 35 41 -150.06550400 3 | 3 62 44 -150.06550400 4 | 3 80 32 -150.06550400 5 | 3 89 20 -150.06550400 6 | 3 104 38 -150.06550400 7 | -------------------------------------------------------------------------------- /examples/freyberg_monthly/freyberg6.wel_stress_period_data_12.txt: -------------------------------------------------------------------------------- 1 | 3 29 50 -150.08486633 2 | 3 35 41 -150.08486633 3 | 3 62 44 -150.08486633 4 | 3 80 32 -150.08486633 5 | 3 89 20 -150.08486633 6 | 3 104 38 -150.08486633 7 | -------------------------------------------------------------------------------- /examples/freyberg_monthly/freyberg6.wel_stress_period_data_13.txt: -------------------------------------------------------------------------------- 1 | 3 29 50 -150.08331233 2 | 3 35 41 -150.08331233 3 | 3 62 44 -150.08331233 4 | 3 80 32 -150.08331233 5 | 3 89 20 -150.08331233 6 | 3 104 38 -150.08331233 7 | -------------------------------------------------------------------------------- /examples/freyberg_monthly/freyberg6.wel_stress_period_data_14.txt: -------------------------------------------------------------------------------- 1 | 3 29 50 -150.06374300 2 | 3 35 41 -150.06374300 3 | 3 62 44 -150.06374300 4 | 3 80 32 -150.06374300 5 | 3 89 20 -150.06374300 6 | 3 104 38 -150.06374300 7 | -------------------------------------------------------------------------------- /examples/freyberg_monthly/freyberg6.wel_stress_period_data_15.txt: -------------------------------------------------------------------------------- 1 | 3 29 50 -150.07591667 2 | 3 35 41 -150.07591667 3 | 3 62 44 -150.07591667 4 | 3 80 32 -150.07591667 5 | 3 89 20 -150.07591667 6 | 3 104 38 -150.07591667 7 | -------------------------------------------------------------------------------- /examples/freyberg_monthly/freyberg6.wel_stress_period_data_16.txt: -------------------------------------------------------------------------------- 1 | 3 29 50 -150.08184267 2 | 3 35 41 -150.08184267 3 | 3 62 44 -150.08184267 4 | 3 80 32 -150.08184267 5 | 3 89 20 -150.08184267 6 | 3 104 38 -150.08184267 7 | -------------------------------------------------------------------------------- /examples/freyberg_monthly/freyberg6.wel_stress_period_data_17.txt: -------------------------------------------------------------------------------- 1 | 3 29 50 -150.07810400 2 | 3 35 41 -150.07810400 3 | 3 62 44 -150.07810400 4 | 3 80 32 -150.07810400 5 | 3 89 20 -150.07810400 6 | 3 104 38 -150.07810400 7 | -------------------------------------------------------------------------------- /examples/freyberg_monthly/freyberg6.wel_stress_period_data_18.txt: -------------------------------------------------------------------------------- 1 | 3 29 50 -150.07929400 2 | 3 35 41 -150.07929400 3 | 3 62 44 -150.07929400 4 | 3 80 32 -150.07929400 5 | 3 89 20 -150.07929400 6 | 3 104 38 -150.07929400 7 | -------------------------------------------------------------------------------- /examples/freyberg_monthly/freyberg6.wel_stress_period_data_19.txt: -------------------------------------------------------------------------------- 1 | 3 29 50 -150.08408700 2 | 3 35 41 -150.08408700 3 | 3 62 44 -150.08408700 4 | 3 80 32 -150.08408700 5 | 3 89 20 -150.08408700 6 | 3 104 38 -150.08408700 7 | -------------------------------------------------------------------------------- /examples/freyberg_monthly/freyberg6.wel_stress_period_data_2.txt: -------------------------------------------------------------------------------- 1 | 3 29 50 -150.09063167 2 | 3 35 41 -150.09063167 3 | 3 62 44 -150.09063167 4 | 3 80 32 -150.09063167 5 | 3 89 20 -150.09063167 6 | 3 104 38 -150.09063167 7 | -------------------------------------------------------------------------------- /examples/freyberg_monthly/freyberg6.wel_stress_period_data_20.txt: -------------------------------------------------------------------------------- 1 | 3 29 50 -150.05861033 2 | 3 35 41 -150.05861033 3 | 3 62 44 -150.05861033 4 | 3 80 32 -150.05861033 5 | 3 89 20 -150.05861033 6 | 3 104 38 -150.05861033 7 | -------------------------------------------------------------------------------- /examples/freyberg_monthly/freyberg6.wel_stress_period_data_21.txt: -------------------------------------------------------------------------------- 1 | 3 29 50 -150.08308933 2 | 3 35 41 -150.08308933 3 | 3 62 44 -150.08308933 4 | 3 80 32 -150.08308933 5 | 3 89 20 -150.08308933 6 | 3 104 38 -150.08308933 7 | -------------------------------------------------------------------------------- /examples/freyberg_monthly/freyberg6.wel_stress_period_data_22.txt: -------------------------------------------------------------------------------- 1 | 3 29 50 -150.08662633 2 | 3 35 41 -150.08662633 3 | 3 62 44 -150.08662633 4 | 3 80 32 -150.08662633 5 | 3 89 20 -150.08662633 6 | 3 104 38 -150.08662633 7 | -------------------------------------------------------------------------------- /examples/freyberg_monthly/freyberg6.wel_stress_period_data_23.txt: -------------------------------------------------------------------------------- 1 | 3 29 50 -150.07290267 2 | 3 35 41 -150.07290267 3 | 3 62 44 -150.07290267 4 | 3 80 32 -150.07290267 5 | 3 89 20 -150.07290267 6 | 3 104 38 -150.07290267 7 | -------------------------------------------------------------------------------- /examples/freyberg_monthly/freyberg6.wel_stress_period_data_24.txt: -------------------------------------------------------------------------------- 1 | 3 29 50 -150.05935000 2 | 3 35 41 -150.05935000 3 | 3 62 44 -150.05935000 4 | 3 80 32 -150.05935000 5 | 3 89 20 -150.05935000 6 | 3 104 38 -150.05935000 7 | -------------------------------------------------------------------------------- /examples/freyberg_monthly/freyberg6.wel_stress_period_data_25.txt: -------------------------------------------------------------------------------- 1 | 3 29 50 -150.06827167 2 | 3 35 41 -150.06827167 3 | 3 62 44 -150.06827167 4 | 3 80 32 -150.06827167 5 | 3 89 20 -150.06827167 6 | 3 104 38 -150.06827167 7 | -------------------------------------------------------------------------------- /examples/freyberg_monthly/freyberg6.wel_stress_period_data_3.txt: -------------------------------------------------------------------------------- 1 | 3 29 50 -150.08165800 2 | 3 35 41 -150.08165800 3 | 3 62 44 -150.08165800 4 | 3 80 32 -150.08165800 5 | 3 89 20 -150.08165800 6 | 3 104 38 -150.08165800 7 | -------------------------------------------------------------------------------- /examples/freyberg_monthly/freyberg6.wel_stress_period_data_4.txt: -------------------------------------------------------------------------------- 1 | 3 29 50 -150.09366767 2 | 3 35 41 -150.09366767 3 | 3 62 44 -150.09366767 4 | 3 80 32 -150.09366767 5 | 3 89 20 -150.09366767 6 | 3 104 38 -150.09366767 7 | -------------------------------------------------------------------------------- /examples/freyberg_monthly/freyberg6.wel_stress_period_data_5.txt: -------------------------------------------------------------------------------- 1 | 3 29 50 -150.06658367 2 | 3 35 41 -150.06658367 3 | 3 62 44 -150.06658367 4 | 3 80 32 -150.06658367 5 | 3 89 20 -150.06658367 6 | 3 104 38 -150.06658367 7 | -------------------------------------------------------------------------------- /examples/freyberg_monthly/freyberg6.wel_stress_period_data_6.txt: -------------------------------------------------------------------------------- 1 | 3 29 50 -150.08635467 2 | 3 35 41 -150.08635467 3 | 3 62 44 -150.08635467 4 | 3 80 32 -150.08635467 5 | 3 89 20 -150.08635467 6 | 3 104 38 -150.08635467 7 | -------------------------------------------------------------------------------- /examples/freyberg_monthly/freyberg6.wel_stress_period_data_7.txt: -------------------------------------------------------------------------------- 1 | 3 29 50 -150.08077767 2 | 3 35 41 -150.08077767 3 | 3 62 44 -150.08077767 4 | 3 80 32 -150.08077767 5 | 3 89 20 -150.08077767 6 | 3 104 38 -150.08077767 7 | -------------------------------------------------------------------------------- /examples/freyberg_monthly/freyberg6.wel_stress_period_data_8.txt: -------------------------------------------------------------------------------- 1 | 3 29 50 -150.07527667 2 | 3 35 41 -150.07527667 3 | 3 62 44 -150.07527667 4 | 3 80 32 -150.07527667 5 | 3 89 20 -150.07527667 6 | 3 104 38 -150.07527667 7 | -------------------------------------------------------------------------------- /examples/freyberg_monthly/freyberg6.wel_stress_period_data_9.txt: -------------------------------------------------------------------------------- 1 | 3 29 50 -150.05962800 2 | 3 35 41 -150.05962800 3 | 3 62 44 -150.05962800 4 | 3 80 32 -150.05962800 5 | 3 89 20 -150.05962800 6 | 3 104 38 -150.05962800 7 | -------------------------------------------------------------------------------- /examples/freyberg_monthly/freyberg6_freyberg.hds: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pypest/pypestutils/7cf08f36ba09c38580c0b38b08bcfbc0fdeb55bb/examples/freyberg_monthly/freyberg6_freyberg.hds -------------------------------------------------------------------------------- /examples/freyberg_monthly/grid.spc: -------------------------------------------------------------------------------- 1 | 120 60 2 | 0.000000E+00 1.000000E+04 0.000000E+00 3 | 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 4 | 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 8.333334E+01 5 | -------------------------------------------------------------------------------- /examples/freyberg_monthly/mfsim.nam: -------------------------------------------------------------------------------- 1 | # File generated by Flopy version 3.3.6 on 09/22/2023 at 19:14:14. 2 | BEGIN Options 3 | CONTINUE 4 | END Options 5 | 6 | BEGIN TIMING 7 | TDIS6 freyberg6.tdis 8 | END TIMING 9 | 10 | BEGIN MODELS 11 | gwf6 freyberg6.nam freyberg6 12 | END MODELS 13 | 14 | BEGIN EXCHANGES 15 | END EXCHANGES 16 | 17 | BEGIN SOLUTIONGROUP 1 18 | MXITER 1 19 | ims6 freyberg6.ims freyberg6 20 | END SOLUTIONGROUP 1 21 | 22 | -------------------------------------------------------------------------------- /examples/freyberg_monthly/obs_interp_fac.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pypest/pypestutils/7cf08f36ba09c38580c0b38b08bcfbc0fdeb55bb/examples/freyberg_monthly/obs_interp_fac.bin -------------------------------------------------------------------------------- /examples/freyberg_monthly/sfr.csv: -------------------------------------------------------------------------------- 1 | time,HEADWATER,TAILWATER,GAGE_1 2 | 30.00000000000,-1489.209882379979,-1039.743387480741,3030.496748271076 3 | 60.00000000000,-1123.248992626083,-780.6379100089010,2405.485566838892 4 | 90.00000000000,-1636.803353838674,-1154.960612483806,3293.238861964692 5 | 120.0000000000,-2371.843486804758,-1665.044599902775,4538.155323921445 6 | 150.0000000000,-2962.462128032772,-2063.211745189944,5526.739332906966 7 | 180.0000000000,-3212.028004026756,-2220.143683753003,5933.174144538522 8 | 210.0000000000,-3026.119660506225,-2075.779650213462,5603.034843845729 9 | 240.0000000000,-2444.832054916305,-1663.827079442376,4610.058703705339 10 | 270.0000000000,-1620.724054312377,-1095.145103791458,3217.491915771734 11 | 300.0000000000,-768.3381384467601,-519.1798219961902,1789.139461816607 12 | 330.0000000000,-107.5336884297416,-86.60850735253918,695.4109447094671 13 | 360.0000000000,194.5534630051690,94.66765828758500,211.5576348734819 14 | 390.0000000000,60.18865067802530,-8.937495779758097,449.7496866095972 15 | 420.0000000000,-480.6112692002677,-383.1909292699549,1365.190371334231 16 | 450.0000000000,-1290.927530264780,-939.1655648638150,2731.558975185438 17 | 480.0000000000,-2158.179035034808,-1528.573204161184,4188.060791547577 18 | 510.0000000000,-2852.227602964672,-1993.766237419925,5347.087350781913 19 | 540.0000000000,-3187.265441674284,-2207.430215351481,5895.696691643617 20 | 570.0000000000,-3076.635261279348,-2113.598987428637,5691.338823443590 21 | 600.0000000000,-2550.557997972528,-1738.137393026356,4790.052586015565 22 | 630.0000000000,-1751.129476275104,-1184.415948447739,3437.144724136741 23 | 660.0000000000,-888.7819032712812,-599.7322429905486,1990.156581797472 24 | 690.0000000000,-186.9015679446600,-137.2957956359712,825.5407289530482 25 | 720.0000000000,176.3355061470490,85.58309567274031,238.9070665618727 26 | 750.0000000000,108.2664680090604,24.80806155931753,367.8560921585016 27 | -------------------------------------------------------------------------------- /examples/freyberg_monthly/sfr.obs: -------------------------------------------------------------------------------- 1 | # File generated by Flopy version 3.3.6 on 09/22/2023 at 19:14:14. 2 | BEGIN options 3 | END options 4 | 5 | BEGIN continuous FILEOUT sfr.csv 6 | OPEN/CLOSE 'sfr.obs_continuous_sfr.csv.txt' 7 | END continuous FILEOUT sfr.csv 8 | 9 | -------------------------------------------------------------------------------- /examples/freyberg_monthly/sfr.obs_continuous_sfr.csv.txt: -------------------------------------------------------------------------------- 1 | headwater sfr headwater 2 | tailwater sfr tailwater 3 | gage_1 inflow 120 4 | -------------------------------------------------------------------------------- /examples/freyberg_quadtree/freyberg6.chd: -------------------------------------------------------------------------------- 1 | # file generated by flopy version 3.3.6 on 12/30/2022 at 13:26:49. 2 | begin options 3 | end options 4 | 5 | begin dimensions 6 | maxbound 56 7 | end dimensions 8 | 9 | begin period 1 10 | open/close 'freyberg6.chd_stress_period_data_1.txt' 11 | end period 1 12 | 13 | -------------------------------------------------------------------------------- /examples/freyberg_quadtree/freyberg6.chd_stress_period_data_1.txt: -------------------------------------------------------------------------------- 1 | 2,5019,33.5 2 | 3,5019,33.5 3 | 2,5020,33.5 4 | 3,5020,33.5 5 | 2,5021,33.5 6 | 3,5021,33.5 7 | 2,5022,33.5 8 | 3,5022,33.5 9 | 1,5023,33.5 10 | 2,5023,33.5 11 | 3,5023,33.5 12 | 1,5024,33.5 13 | 2,5024,33.5 14 | 3,5024,33.5 15 | 1,5027,33.5 16 | 2,5027,33.5 17 | 3,5027,33.5 18 | 1,5028,33.5 19 | 2,5028,33.5 20 | 3,5028,33.5 21 | 1,5072,33.5 22 | 2,5072,33.5 23 | 3,5072,33.5 24 | 1,5075,33.5 25 | 2,5075,33.5 26 | 3,5075,33.5 27 | 1,5076,33.5 28 | 2,5076,33.5 29 | 3,5076,33.5 30 | 1,5095,33.5 31 | 2,5095,33.5 32 | 3,5095,33.5 33 | 1,5096,33.5 34 | 2,5096,33.5 35 | 3,5096,33.5 36 | 1,5097,33.5 37 | 2,5097,33.5 38 | 3,5097,33.5 39 | 1,5098,33.5 40 | 2,5098,33.5 41 | 3,5098,33.5 42 | 1,5101,33.5 43 | 2,5101,33.5 44 | 3,5101,33.5 45 | 1,5102,33.5 46 | 2,5102,33.5 47 | 3,5102,33.5 48 | 1,5103,33.5 49 | 2,5103,33.5 50 | 3,5103,33.5 51 | 1,5104,33.5 52 | 2,5104,33.5 53 | 3,5104,33.5 54 | 1,5105,33.5 55 | 2,5105,33.5 56 | 3,5105,33.5 57 | -------------------------------------------------------------------------------- /examples/freyberg_quadtree/freyberg6.disv: -------------------------------------------------------------------------------- 1 | # file generated by flopy version 3.3.6 on 12/30/2022 at 13:26:49. 2 | begin options 3 | length_units meters 4 | angrot -55 5 | end options 6 | 7 | begin dimensions 8 | nlay 3 9 | ncpl 5108 10 | nvert 6196 11 | end dimensions 12 | 13 | begin griddata 14 | top 15 | open/close 'freyberg6.disv_top.txt' factor 1.0 16 | botm layered 17 | open/close 'freyberg6.disv_botm_layer1.txt' factor 1.0 18 | open/close 'freyberg6.disv_botm_layer2.txt' factor 1.0 19 | open/close 'freyberg6.disv_botm_layer3.txt' factor 1.0 20 | idomain layered 21 | open/close 'freyberg6.disv_idomain_layer1.txt' factor 1 22 | open/close 'freyberg6.disv_idomain_layer2.txt' factor 1 23 | open/close 'freyberg6.disv_idomain_layer3.txt' factor 1 24 | end griddata 25 | 26 | begin vertices 27 | open/close 'freyberg6.disv_vertices.txt' 28 | end vertices 29 | 30 | begin cell2d 31 | open/close 'freyberg6.disv_cell2d.txt' 32 | end cell2d 33 | 34 | -------------------------------------------------------------------------------- /examples/freyberg_quadtree/freyberg6.disv.grb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pypest/pypestutils/7cf08f36ba09c38580c0b38b08bcfbc0fdeb55bb/examples/freyberg_quadtree/freyberg6.disv.grb -------------------------------------------------------------------------------- /examples/freyberg_quadtree/freyberg6.ic: -------------------------------------------------------------------------------- 1 | # file generated by flopy version 3.3.6 on 12/30/2022 at 13:26:49. 2 | begin griddata 3 | strt layered 4 | open/close 'freyberg6.ic_strt_layer1.txt' factor 1.0 5 | open/close 'freyberg6.ic_strt_layer2.txt' factor 1.0 6 | open/close 'freyberg6.ic_strt_layer3.txt' factor 1.0 7 | end griddata 8 | 9 | -------------------------------------------------------------------------------- /examples/freyberg_quadtree/freyberg6.ims: -------------------------------------------------------------------------------- 1 | # file generated by flopy version 3.3.6 on 12/30/2022 at 13:26:47. 2 | begin options 3 | print_option all 4 | end options 5 | 6 | begin nonlinear 7 | outer_maximum 100 8 | outer_hclose 0.01 9 | end nonlinear 10 | 11 | begin linear 12 | inner_maximum 100 13 | linear_acceleration bicgstab 14 | inner_hclose 0.01 15 | end linear 16 | 17 | -------------------------------------------------------------------------------- /examples/freyberg_quadtree/freyberg6.nam: -------------------------------------------------------------------------------- 1 | # file generated by flopy version 3.3.6 on 12/30/2022 at 13:26:47. 2 | begin options 3 | save_flows 4 | newton under_relaxation 5 | end options 6 | 7 | begin packages 8 | disv6 freyberg6.disv disv 9 | ic6 freyberg6.ic ic 10 | npf6 freyberg6.npf npf 11 | rch6 freyberg6.rcha rcha_0 12 | sfr6 freyberg6.sfr sfr_0 13 | wel6 freyberg6.wel wel_0 14 | chd6 freyberg6.chd chd_0 15 | oc6 freyberg6.oc oc 16 | obs6 freyberg6.obs head_obs 17 | sto6 freyberg6.sto 18 | end packages 19 | 20 | -------------------------------------------------------------------------------- /examples/freyberg_quadtree/freyberg6.npf: -------------------------------------------------------------------------------- 1 | # file generated by flopy version 3.3.6 on 12/30/2022 at 13:26:49. 2 | begin options 3 | save_specific_discharge 4 | end options 5 | 6 | begin griddata 7 | icelltype 8 | open/close 'freyberg6.npf_icelltype.txt' factor 1 9 | k layered 10 | open/close 'freyberg6.npf_k_layer1.txt' factor 1.0 11 | open/close 'freyberg6.npf_k_layer2.txt' factor 1.0 12 | open/close 'freyberg6.npf_k_layer3.txt' factor 1.0 13 | end griddata 14 | 15 | -------------------------------------------------------------------------------- /examples/freyberg_quadtree/freyberg6.obs: -------------------------------------------------------------------------------- 1 | # File generated by Flopy version 3.3.6 on 09/22/2023 at 19:14:14. 2 | BEGIN options 3 | DIGITS 10 4 | END options 5 | 6 | BEGIN continuous FILEOUT heads.csv 7 | OPEN/CLOSE 'freyberg6.obs_continuous_heads.csv.txt' 8 | END continuous FILEOUT heads.csv 9 | 10 | -------------------------------------------------------------------------------- /examples/freyberg_quadtree/freyberg6.obs_continuous_heads.csv.txt: -------------------------------------------------------------------------------- 1 | twgw_2_310,head,3,310 2 | twgw_2_202,head,3,202 3 | twgw_2_1042,head,3,1042 4 | twgw_2_1590,head,3,1590 5 | twgw_2_1960,head,3,1960 6 | twgw_2_2728,head,3,2728 7 | twgw_2_2957,head,3,2957 8 | twgw_2_3076,head,3,3076 9 | twgw_2_3385,head,3,3385 10 | twgw_2_4015,head,3,4015 11 | twgw_2_4369,head,3,4369 12 | twgw_2_4518,head,3,4518 13 | twgw_0_310,head,1,310 14 | twgw_0_202,head,1,202 15 | twgw_0_1042,head,1,1042 16 | twgw_0_1590,head,1,1590 17 | twgw_0_1960,head,1,1960 18 | twgw_0_2728,head,1,2728 19 | twgw_0_2957,head,1,2957 20 | twgw_0_3076,head,1,3076 21 | twgw_0_3385,head,1,3385 22 | twgw_0_4015,head,1,4015 23 | twgw_0_4369,head,1,4369 24 | twgw_0_4518,head,1,4518 25 | -------------------------------------------------------------------------------- /examples/freyberg_quadtree/freyberg6.oc: -------------------------------------------------------------------------------- 1 | # file generated by flopy version 3.3.6 on 12/30/2022 at 13:26:49. 2 | begin options 3 | budget fileout freyberg6.cbc 4 | head fileout freyberg6.hds 5 | end options 6 | 7 | begin period 1 8 | save head all 9 | save budget all 10 | end period 1 11 | 12 | -------------------------------------------------------------------------------- /examples/freyberg_quadtree/freyberg6.rcha: -------------------------------------------------------------------------------- 1 | # File generated by Flopy version 3.3.6 on 09/22/2023 at 19:14:14. 2 | BEGIN options 3 | READASARRAYS 4 | END options 5 | 6 | BEGIN period 1 7 | recharge 8 | OPEN/CLOSE 'freyberg6.rcha_recharge_1.txt' FACTOR 1.0 9 | END period 1 10 | 11 | BEGIN period 2 12 | recharge 13 | OPEN/CLOSE 'freyberg6.rcha_recharge_2.txt' FACTOR 1.0 14 | END period 2 15 | 16 | BEGIN period 3 17 | recharge 18 | OPEN/CLOSE 'freyberg6.rcha_recharge_3.txt' FACTOR 1.0 19 | END period 3 20 | 21 | BEGIN period 4 22 | recharge 23 | OPEN/CLOSE 'freyberg6.rcha_recharge_4.txt' FACTOR 1.0 24 | END period 4 25 | 26 | BEGIN period 5 27 | recharge 28 | OPEN/CLOSE 'freyberg6.rcha_recharge_5.txt' FACTOR 1.0 29 | END period 5 30 | 31 | BEGIN period 6 32 | recharge 33 | OPEN/CLOSE 'freyberg6.rcha_recharge_6.txt' FACTOR 1.0 34 | END period 6 35 | 36 | BEGIN period 7 37 | recharge 38 | OPEN/CLOSE 'freyberg6.rcha_recharge_7.txt' FACTOR 1.0 39 | END period 7 40 | 41 | BEGIN period 8 42 | recharge 43 | OPEN/CLOSE 'freyberg6.rcha_recharge_8.txt' FACTOR 1.0 44 | END period 8 45 | 46 | BEGIN period 9 47 | recharge 48 | OPEN/CLOSE 'freyberg6.rcha_recharge_9.txt' FACTOR 1.0 49 | END period 9 50 | 51 | BEGIN period 10 52 | recharge 53 | OPEN/CLOSE 'freyberg6.rcha_recharge_10.txt' FACTOR 1.0 54 | END period 10 55 | 56 | BEGIN period 11 57 | recharge 58 | OPEN/CLOSE 'freyberg6.rcha_recharge_11.txt' FACTOR 1.0 59 | END period 11 60 | 61 | BEGIN period 12 62 | recharge 63 | OPEN/CLOSE 'freyberg6.rcha_recharge_12.txt' FACTOR 1.0 64 | END period 12 65 | 66 | BEGIN period 13 67 | recharge 68 | OPEN/CLOSE 'freyberg6.rcha_recharge_13.txt' FACTOR 1.0 69 | END period 13 70 | 71 | BEGIN period 14 72 | recharge 73 | OPEN/CLOSE 'freyberg6.rcha_recharge_14.txt' FACTOR 1.0 74 | END period 14 75 | 76 | BEGIN period 15 77 | recharge 78 | OPEN/CLOSE 'freyberg6.rcha_recharge_15.txt' FACTOR 1.0 79 | END period 15 80 | 81 | BEGIN period 16 82 | recharge 83 | OPEN/CLOSE 'freyberg6.rcha_recharge_16.txt' FACTOR 1.0 84 | END period 16 85 | 86 | BEGIN period 17 87 | recharge 88 | OPEN/CLOSE 'freyberg6.rcha_recharge_17.txt' FACTOR 1.0 89 | END period 17 90 | 91 | BEGIN period 18 92 | recharge 93 | OPEN/CLOSE 'freyberg6.rcha_recharge_18.txt' FACTOR 1.0 94 | END period 18 95 | 96 | BEGIN period 19 97 | recharge 98 | OPEN/CLOSE 'freyberg6.rcha_recharge_19.txt' FACTOR 1.0 99 | END period 19 100 | 101 | BEGIN period 20 102 | recharge 103 | OPEN/CLOSE 'freyberg6.rcha_recharge_20.txt' FACTOR 1.0 104 | END period 20 105 | 106 | BEGIN period 21 107 | recharge 108 | OPEN/CLOSE 'freyberg6.rcha_recharge_21.txt' FACTOR 1.0 109 | END period 21 110 | 111 | BEGIN period 22 112 | recharge 113 | OPEN/CLOSE 'freyberg6.rcha_recharge_22.txt' FACTOR 1.0 114 | END period 22 115 | 116 | BEGIN period 23 117 | recharge 118 | OPEN/CLOSE 'freyberg6.rcha_recharge_23.txt' FACTOR 1.0 119 | END period 23 120 | 121 | BEGIN period 24 122 | recharge 123 | OPEN/CLOSE 'freyberg6.rcha_recharge_24.txt' FACTOR 1.0 124 | END period 24 125 | 126 | BEGIN period 25 127 | recharge 128 | OPEN/CLOSE 'freyberg6.rcha_recharge_25.txt' FACTOR 1.0 129 | END period 25 130 | 131 | -------------------------------------------------------------------------------- /examples/freyberg_quadtree/freyberg6.sfr: -------------------------------------------------------------------------------- 1 | # file generated by flopy version 3.3.6 on 12/30/2022 at 13:26:49. 2 | begin options 3 | boundnames 4 | print_stage 5 | print_flows 6 | obs6 filein freyberg6.sfr.obs 7 | maximum_depth_change 1.00000000e-04 8 | unit_conversion 86400.00000000 9 | end options 10 | 11 | begin dimensions 12 | nreaches 1000 13 | end dimensions 14 | 15 | begin packagedata 16 | open/close 'freyberg6.sfr_packagedata.txt' 17 | end packagedata 18 | 19 | begin connectiondata 20 | open/close 'freyberg6.sfr_connectiondata.txt' 21 | end connectiondata 22 | 23 | begin period 1 24 | open/close 'freyberg6.sfr_perioddata_1.txt' 25 | end period 1 26 | 27 | -------------------------------------------------------------------------------- /examples/freyberg_quadtree/freyberg6.sfr.obs: -------------------------------------------------------------------------------- 1 | # file generated by flopy version 3.3.6 on 12/30/2022 at 13:26:49. 2 | begin options 3 | print_input 4 | end options 5 | 6 | begin continuous fileout sfr.csv 7 | open/close 'freyberg6.sfr.obs_continuous_sfr_obs.csv.txt' 8 | end continuous fileout sfr.csv 9 | 10 | -------------------------------------------------------------------------------- /examples/freyberg_quadtree/freyberg6.sfr.obs_continuous_sfr_obs.csv.txt: -------------------------------------------------------------------------------- 1 | upstream sfr upstream 2 | downstream sfr downstream 3 | gage-1 inflow 1000 4 | -------------------------------------------------------------------------------- /examples/freyberg_quadtree/freyberg6.sfr_perioddata_1.txt: -------------------------------------------------------------------------------- 1 | 1 inflow 500.0 2 | -------------------------------------------------------------------------------- /examples/freyberg_quadtree/freyberg6.sto: -------------------------------------------------------------------------------- 1 | # File generated by Flopy version 3.3.6 on 09/22/2023 at 19:14:14. 2 | BEGIN Options 3 | END Options 4 | 5 | BEGIN GRIDDATA 6 | iconvert LAYERED 7 | OPEN/CLOSE 'freyberg6.sto_iconvert_layer1.txt' FACTOR 1 8 | OPEN/CLOSE 'freyberg6.sto_iconvert_layer2.txt' FACTOR 1 9 | OPEN/CLOSE 'freyberg6.sto_iconvert_layer3.txt' FACTOR 1 10 | ss LAYERED 11 | OPEN/CLOSE 'freyberg6.sto_ss_layer1.txt' FACTOR 1.0 12 | OPEN/CLOSE 'freyberg6.sto_ss_layer2.txt' FACTOR 1.0 13 | OPEN/CLOSE 'freyberg6.sto_ss_layer3.txt' FACTOR 1.0 14 | sy LAYERED 15 | OPEN/CLOSE 'freyberg6.sto_sy_layer1.txt' FACTOR 1.0 16 | OPEN/CLOSE 'freyberg6.sto_sy_layer2.txt' FACTOR 1.0 17 | OPEN/CLOSE 'freyberg6.sto_sy_layer3.txt' FACTOR 1.0 18 | END GRIDDATA 19 | 20 | BEGIN Period 1 21 | STEADY-STATE 22 | END Period 1 23 | 24 | BEGIN Period 2 25 | TRANSIENT 26 | END Period 2 27 | 28 | -------------------------------------------------------------------------------- /examples/freyberg_quadtree/freyberg6.tdis: -------------------------------------------------------------------------------- 1 | # File generated by Flopy version 3.3.6 on 09/22/2023 at 19:14:14. 2 | BEGIN Options 3 | TIME_UNITS days 4 | END Options 5 | 6 | BEGIN Dimensions 7 | NPER 25 8 | END Dimensions 9 | 10 | BEGIN PERIODDATA 11 | 30.00000000 1 1.00000000 NSTP TSMULT 12 | 30.00000000 1 1.00000000 NSTP TSMULT 13 | 30.00000000 1 1.00000000 NSTP TSMULT 14 | 30.00000000 1 1.00000000 NSTP TSMULT 15 | 30.00000000 1 1.00000000 NSTP TSMULT 16 | 30.00000000 1 1.00000000 NSTP TSMULT 17 | 30.00000000 1 1.00000000 NSTP TSMULT 18 | 30.00000000 1 1.00000000 NSTP TSMULT 19 | 30.00000000 1 1.00000000 NSTP TSMULT 20 | 30.00000000 1 1.00000000 NSTP TSMULT 21 | 30.00000000 1 1.00000000 NSTP TSMULT 22 | 30.00000000 1 1.00000000 NSTP TSMULT 23 | 30.00000000 1 1.00000000 NSTP TSMULT 24 | 30.00000000 1 1.00000000 NSTP TSMULT 25 | 30.00000000 1 1.00000000 NSTP TSMULT 26 | 30.00000000 1 1.00000000 NSTP TSMULT 27 | 30.00000000 1 1.00000000 NSTP TSMULT 28 | 30.00000000 1 1.00000000 NSTP TSMULT 29 | 30.00000000 1 1.00000000 NSTP TSMULT 30 | 30.00000000 1 1.00000000 NSTP TSMULT 31 | 30.00000000 1 1.00000000 NSTP TSMULT 32 | 30.00000000 1 1.00000000 NSTP TSMULT 33 | 30.00000000 1 1.00000000 NSTP TSMULT 34 | 30.00000000 1 1.00000000 NSTP TSMULT 35 | 30.00000000 1 1.00000000 NSTP TSMULT 36 | END PERIODDATA 37 | 38 | -------------------------------------------------------------------------------- /examples/freyberg_quadtree/freyberg6.wel: -------------------------------------------------------------------------------- 1 | # File generated by Flopy version 3.3.6 on 09/22/2023 at 19:14:15. 2 | BEGIN options 3 | END options 4 | 5 | BEGIN dimensions 6 | MAXBOUND 6 7 | END dimensions 8 | 9 | BEGIN period 1 10 | OPEN/CLOSE 'freyberg6.wel_stress_period_data_1.txt' 11 | END period 1 12 | 13 | BEGIN period 2 14 | OPEN/CLOSE 'freyberg6.wel_stress_period_data_2.txt' 15 | END period 2 16 | 17 | BEGIN period 3 18 | OPEN/CLOSE 'freyberg6.wel_stress_period_data_3.txt' 19 | END period 3 20 | 21 | BEGIN period 4 22 | OPEN/CLOSE 'freyberg6.wel_stress_period_data_4.txt' 23 | END period 4 24 | 25 | BEGIN period 5 26 | OPEN/CLOSE 'freyberg6.wel_stress_period_data_5.txt' 27 | END period 5 28 | 29 | BEGIN period 6 30 | OPEN/CLOSE 'freyberg6.wel_stress_period_data_6.txt' 31 | END period 6 32 | 33 | BEGIN period 7 34 | OPEN/CLOSE 'freyberg6.wel_stress_period_data_7.txt' 35 | END period 7 36 | 37 | BEGIN period 8 38 | OPEN/CLOSE 'freyberg6.wel_stress_period_data_8.txt' 39 | END period 8 40 | 41 | BEGIN period 9 42 | OPEN/CLOSE 'freyberg6.wel_stress_period_data_9.txt' 43 | END period 9 44 | 45 | BEGIN period 10 46 | OPEN/CLOSE 'freyberg6.wel_stress_period_data_10.txt' 47 | END period 10 48 | 49 | BEGIN period 11 50 | OPEN/CLOSE 'freyberg6.wel_stress_period_data_11.txt' 51 | END period 11 52 | 53 | BEGIN period 12 54 | OPEN/CLOSE 'freyberg6.wel_stress_period_data_12.txt' 55 | END period 12 56 | 57 | BEGIN period 13 58 | OPEN/CLOSE 'freyberg6.wel_stress_period_data_13.txt' 59 | END period 13 60 | 61 | BEGIN period 14 62 | OPEN/CLOSE 'freyberg6.wel_stress_period_data_14.txt' 63 | END period 14 64 | 65 | BEGIN period 15 66 | OPEN/CLOSE 'freyberg6.wel_stress_period_data_15.txt' 67 | END period 15 68 | 69 | BEGIN period 16 70 | OPEN/CLOSE 'freyberg6.wel_stress_period_data_16.txt' 71 | END period 16 72 | 73 | BEGIN period 17 74 | OPEN/CLOSE 'freyberg6.wel_stress_period_data_17.txt' 75 | END period 17 76 | 77 | BEGIN period 18 78 | OPEN/CLOSE 'freyberg6.wel_stress_period_data_18.txt' 79 | END period 18 80 | 81 | BEGIN period 19 82 | OPEN/CLOSE 'freyberg6.wel_stress_period_data_19.txt' 83 | END period 19 84 | 85 | BEGIN period 20 86 | OPEN/CLOSE 'freyberg6.wel_stress_period_data_20.txt' 87 | END period 20 88 | 89 | BEGIN period 21 90 | OPEN/CLOSE 'freyberg6.wel_stress_period_data_21.txt' 91 | END period 21 92 | 93 | BEGIN period 22 94 | OPEN/CLOSE 'freyberg6.wel_stress_period_data_22.txt' 95 | END period 22 96 | 97 | BEGIN period 23 98 | OPEN/CLOSE 'freyberg6.wel_stress_period_data_23.txt' 99 | END period 23 100 | 101 | BEGIN period 24 102 | OPEN/CLOSE 'freyberg6.wel_stress_period_data_24.txt' 103 | END period 24 104 | 105 | BEGIN period 25 106 | OPEN/CLOSE 'freyberg6.wel_stress_period_data_25.txt' 107 | END period 25 108 | 109 | -------------------------------------------------------------------------------- /examples/freyberg_quadtree/freyberg6.wel_stress_period_data_1.txt: -------------------------------------------------------------------------------- 1 | 3 1004 -150.06827167 2 | 3 1221 -150.06827167 3 | 3 2563 -150.06827167 4 | 3 3222 -150.06827167 5 | 3 3605 -150.06827167 6 | 3 4386 -150.06827167 7 | -------------------------------------------------------------------------------- /examples/freyberg_quadtree/freyberg6.wel_stress_period_data_10.txt: -------------------------------------------------------------------------------- 1 | 3 1004 -150.068942 2 | 3 1221 -150.068942 3 | 3 2563 -150.068942 4 | 3 3222 -150.068942 5 | 3 3605 -150.068942 6 | 3 4386 -150.068942 7 | -------------------------------------------------------------------------------- /examples/freyberg_quadtree/freyberg6.wel_stress_period_data_11.txt: -------------------------------------------------------------------------------- 1 | 3 1004 -150.065504 2 | 3 1221 -150.065504 3 | 3 2563 -150.065504 4 | 3 3222 -150.065504 5 | 3 3605 -150.065504 6 | 3 4386 -150.065504 7 | -------------------------------------------------------------------------------- /examples/freyberg_quadtree/freyberg6.wel_stress_period_data_12.txt: -------------------------------------------------------------------------------- 1 | 3 1004 -150.08486633 2 | 3 1221 -150.08486633 3 | 3 2563 -150.08486633 4 | 3 3222 -150.08486633 5 | 3 3605 -150.08486633 6 | 3 4386 -150.08486633 7 | -------------------------------------------------------------------------------- /examples/freyberg_quadtree/freyberg6.wel_stress_period_data_13.txt: -------------------------------------------------------------------------------- 1 | 3 1004 -150.08331233 2 | 3 1221 -150.08331233 3 | 3 2563 -150.08331233 4 | 3 3222 -150.08331233 5 | 3 3605 -150.08331233 6 | 3 4386 -150.08331233 7 | -------------------------------------------------------------------------------- /examples/freyberg_quadtree/freyberg6.wel_stress_period_data_14.txt: -------------------------------------------------------------------------------- 1 | 3 1004 -150.063743 2 | 3 1221 -150.063743 3 | 3 2563 -150.063743 4 | 3 3222 -150.063743 5 | 3 3605 -150.063743 6 | 3 4386 -150.063743 7 | -------------------------------------------------------------------------------- /examples/freyberg_quadtree/freyberg6.wel_stress_period_data_15.txt: -------------------------------------------------------------------------------- 1 | 3 1004 -150.07591667 2 | 3 1221 -150.07591667 3 | 3 2563 -150.07591667 4 | 3 3222 -150.07591667 5 | 3 3605 -150.07591667 6 | 3 4386 -150.07591667 7 | -------------------------------------------------------------------------------- /examples/freyberg_quadtree/freyberg6.wel_stress_period_data_16.txt: -------------------------------------------------------------------------------- 1 | 3 1004 -150.08184267 2 | 3 1221 -150.08184267 3 | 3 2563 -150.08184267 4 | 3 3222 -150.08184267 5 | 3 3605 -150.08184267 6 | 3 4386 -150.08184267 7 | -------------------------------------------------------------------------------- /examples/freyberg_quadtree/freyberg6.wel_stress_period_data_17.txt: -------------------------------------------------------------------------------- 1 | 3 1004 -150.078104 2 | 3 1221 -150.078104 3 | 3 2563 -150.078104 4 | 3 3222 -150.078104 5 | 3 3605 -150.078104 6 | 3 4386 -150.078104 7 | -------------------------------------------------------------------------------- /examples/freyberg_quadtree/freyberg6.wel_stress_period_data_18.txt: -------------------------------------------------------------------------------- 1 | 3 1004 -150.079294 2 | 3 1221 -150.079294 3 | 3 2563 -150.079294 4 | 3 3222 -150.079294 5 | 3 3605 -150.079294 6 | 3 4386 -150.079294 7 | -------------------------------------------------------------------------------- /examples/freyberg_quadtree/freyberg6.wel_stress_period_data_19.txt: -------------------------------------------------------------------------------- 1 | 3 1004 -150.084087 2 | 3 1221 -150.084087 3 | 3 2563 -150.084087 4 | 3 3222 -150.084087 5 | 3 3605 -150.084087 6 | 3 4386 -150.084087 7 | -------------------------------------------------------------------------------- /examples/freyberg_quadtree/freyberg6.wel_stress_period_data_2.txt: -------------------------------------------------------------------------------- 1 | 3 1004 -150.09063167 2 | 3 1221 -150.09063167 3 | 3 2563 -150.09063167 4 | 3 3222 -150.09063167 5 | 3 3605 -150.09063167 6 | 3 4386 -150.09063167 7 | -------------------------------------------------------------------------------- /examples/freyberg_quadtree/freyberg6.wel_stress_period_data_20.txt: -------------------------------------------------------------------------------- 1 | 3 1004 -150.05861033 2 | 3 1221 -150.05861033 3 | 3 2563 -150.05861033 4 | 3 3222 -150.05861033 5 | 3 3605 -150.05861033 6 | 3 4386 -150.05861033 7 | -------------------------------------------------------------------------------- /examples/freyberg_quadtree/freyberg6.wel_stress_period_data_21.txt: -------------------------------------------------------------------------------- 1 | 3 1004 -150.08308933 2 | 3 1221 -150.08308933 3 | 3 2563 -150.08308933 4 | 3 3222 -150.08308933 5 | 3 3605 -150.08308933 6 | 3 4386 -150.08308933 7 | -------------------------------------------------------------------------------- /examples/freyberg_quadtree/freyberg6.wel_stress_period_data_22.txt: -------------------------------------------------------------------------------- 1 | 3 1004 -150.08662633 2 | 3 1221 -150.08662633 3 | 3 2563 -150.08662633 4 | 3 3222 -150.08662633 5 | 3 3605 -150.08662633 6 | 3 4386 -150.08662633 7 | -------------------------------------------------------------------------------- /examples/freyberg_quadtree/freyberg6.wel_stress_period_data_23.txt: -------------------------------------------------------------------------------- 1 | 3 1004 -150.07290267 2 | 3 1221 -150.07290267 3 | 3 2563 -150.07290267 4 | 3 3222 -150.07290267 5 | 3 3605 -150.07290267 6 | 3 4386 -150.07290267 7 | -------------------------------------------------------------------------------- /examples/freyberg_quadtree/freyberg6.wel_stress_period_data_24.txt: -------------------------------------------------------------------------------- 1 | 3 1004 -150.05935 2 | 3 1221 -150.05935 3 | 3 2563 -150.05935 4 | 3 3222 -150.05935 5 | 3 3605 -150.05935 6 | 3 4386 -150.05935 7 | -------------------------------------------------------------------------------- /examples/freyberg_quadtree/freyberg6.wel_stress_period_data_25.txt: -------------------------------------------------------------------------------- 1 | 3 1004 -150.06827167 2 | 3 1221 -150.06827167 3 | 3 2563 -150.06827167 4 | 3 3222 -150.06827167 5 | 3 3605 -150.06827167 6 | 3 4386 -150.06827167 7 | -------------------------------------------------------------------------------- /examples/freyberg_quadtree/freyberg6.wel_stress_period_data_3.txt: -------------------------------------------------------------------------------- 1 | 3 1004 -150.081658 2 | 3 1221 -150.081658 3 | 3 2563 -150.081658 4 | 3 3222 -150.081658 5 | 3 3605 -150.081658 6 | 3 4386 -150.081658 7 | -------------------------------------------------------------------------------- /examples/freyberg_quadtree/freyberg6.wel_stress_period_data_4.txt: -------------------------------------------------------------------------------- 1 | 3 1004 -150.09366767 2 | 3 1221 -150.09366767 3 | 3 2563 -150.09366767 4 | 3 3222 -150.09366767 5 | 3 3605 -150.09366767 6 | 3 4386 -150.09366767 7 | -------------------------------------------------------------------------------- /examples/freyberg_quadtree/freyberg6.wel_stress_period_data_5.txt: -------------------------------------------------------------------------------- 1 | 3 1004 -150.06658367 2 | 3 1221 -150.06658367 3 | 3 2563 -150.06658367 4 | 3 3222 -150.06658367 5 | 3 3605 -150.06658367 6 | 3 4386 -150.06658367 7 | -------------------------------------------------------------------------------- /examples/freyberg_quadtree/freyberg6.wel_stress_period_data_6.txt: -------------------------------------------------------------------------------- 1 | 3 1004 -150.08635467 2 | 3 1221 -150.08635467 3 | 3 2563 -150.08635467 4 | 3 3222 -150.08635467 5 | 3 3605 -150.08635467 6 | 3 4386 -150.08635467 7 | -------------------------------------------------------------------------------- /examples/freyberg_quadtree/freyberg6.wel_stress_period_data_7.txt: -------------------------------------------------------------------------------- 1 | 3 1004 -150.08077767 2 | 3 1221 -150.08077767 3 | 3 2563 -150.08077767 4 | 3 3222 -150.08077767 5 | 3 3605 -150.08077767 6 | 3 4386 -150.08077767 7 | -------------------------------------------------------------------------------- /examples/freyberg_quadtree/freyberg6.wel_stress_period_data_8.txt: -------------------------------------------------------------------------------- 1 | 3 1004 -150.07527667 2 | 3 1221 -150.07527667 3 | 3 2563 -150.07527667 4 | 3 3222 -150.07527667 5 | 3 3605 -150.07527667 6 | 3 4386 -150.07527667 7 | -------------------------------------------------------------------------------- /examples/freyberg_quadtree/freyberg6.wel_stress_period_data_9.txt: -------------------------------------------------------------------------------- 1 | 3 1004 -150.059628 2 | 3 1221 -150.059628 3 | 3 2563 -150.059628 4 | 3 3222 -150.059628 5 | 3 3605 -150.059628 6 | 3 4386 -150.059628 7 | -------------------------------------------------------------------------------- /examples/freyberg_quadtree/mfsim.nam: -------------------------------------------------------------------------------- 1 | # file generated by flopy version 3.3.6 on 12/30/2022 at 13:26:47. 2 | begin options 3 | continue 4 | end options 5 | 6 | begin timing 7 | tdis6 freyberg6.tdis 8 | end timing 9 | 10 | begin models 11 | gwf6 freyberg6.nam freyberg6 12 | end models 13 | 14 | begin exchanges 15 | end exchanges 16 | 17 | begin solutiongroup 1 18 | ims6 freyberg6.ims freyberg6 19 | end solutiongroup 1 20 | 21 | -------------------------------------------------------------------------------- /examples/freyberg_quadtree/sfr.csv: -------------------------------------------------------------------------------- 1 | time,UPSTREAM,DOWNSTREAM,GAGE-1 2 | 30.00000000000,-1218.127783014422,-801.2447095983076,2519.372492612730 3 | 60.00000000000,-877.9886079328938,-523.4840855600742,1901.472693492964 4 | 90.00000000000,-1362.288898650037,-942.7233323061016,2805.012230956135 5 | 120.0000000000,-2015.180452951189,-1484.725904608480,3999.906357559670 6 | 150.0000000000,-2511.959104994622,-1887.341913693654,4899.301018688281 7 | 180.0000000000,-2672.233280405604,-2007.213296137124,5179.446576542734 8 | 210.0000000000,-2442.747461650823,-1804.372219901436,4747.119681552253 9 | 240.0000000000,-1908.579975108766,-1344.783159642914,3753.363134751688 10 | 270.0000000000,-1216.189715283682,-769.8192856876526,2486.009000971338 11 | 300.0000000000,-526.5526654795908,-232.7791705697078,1259.331836049299 12 | 330.0000000000,.5181237087492530,117.8610097000381,381.6208665912121 13 | 360.0000000000,230.3913715190807,218.7557119614754,50.85291651944350 14 | 390.0000000000,87.16310165490782,137.1182867776664,275.7186115674256 15 | 420.0000000000,-397.6227243608646,-203.0063886940381,1100.629113054903 16 | 450.0000000000,-1103.696293905674,-758.9563879339635,2362.652681839636 17 | 480.0000000000,-1854.268035967353,-1362.616226432945,3716.884262400301 18 | 510.0000000000,-2435.072258747405,-1829.637442070608,4764.709700818014 19 | 540.0000000000,-2668.083470581651,-2006.645424838986,5174.728895420639 20 | 570.0000000000,-2498.411179895165,-1853.039693594748,4851.450873489913 21 | 600.0000000000,-2001.912281182725,-1424.571114893958,3926.483396076687 22 | 630.0000000000,-1324.259040833351,-857.6025684269359,2681.861609260291 23 | 660.0000000000,-622.8660828641754,-304.4113803849530,1427.277463249126 24 | 690.0000000000,-62.71484857812644,81.09634456926351,481.6185040088645 25 | 720.0000000000,218.9022177372665,217.0229318140396,64.07485044869361 26 | 750.0000000000,132.3028566028616,163.8176054739442,203.8795379231951 27 | -------------------------------------------------------------------------------- /examples/freyberg_quadtree/sfr_obs.csv: -------------------------------------------------------------------------------- 1 | time,upstream,downstream,gage1,gage2 2 | 1.000000000000,-1136.996510823351,-1882.037274895022,-865136.9965108217,-867019.0337857158 3 | -------------------------------------------------------------------------------- /examples/ppu_helpers.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | 4 | def setup_pps(d): 5 | cwd = os.getcwd() 6 | os.chdir(d) 7 | apply_pps() 8 | os.chdir(cwd) 9 | 10 | 11 | def apply_pps(): 12 | import numpy as np 13 | import pandas as pd 14 | 15 | from pypestutils import helpers 16 | 17 | df = pd.read_csv("pp_info.csv") 18 | gridspec_fname = "org.grb" 19 | for model_file, pp_file in zip(df.model_file, df.pp_file): 20 | ppdf = pd.read_csv(pp_file) 21 | results = helpers.interpolate_with_sva_pilotpoints_2d( 22 | ppdf, gridspec_fname, vartransform="log" 23 | ) 24 | org_arr = np.loadtxt(model_file) 25 | interp = results["result"] 26 | interp = interp.reshape(org_arr.shape) 27 | new_arr = org_arr * interp 28 | new_arr = new_arr 29 | new_arr[new_arr < 1.0e-10] = 1.0e-10 30 | np.savetxt(model_file, new_arr, fmt="%15.6E") 31 | np.savetxt("interp_" + model_file, interp, fmt="%15.6E") 32 | np.savetxt("log_" + model_file, np.log10(new_arr), fmt="%15.6E") 33 | 34 | 35 | if __name__ == "__main__": 36 | setup_pps() 37 | -------------------------------------------------------------------------------- /examples/run_notebooks.py: -------------------------------------------------------------------------------- 1 | import shutil 2 | from pathlib import Path 3 | from subprocess import run 4 | 5 | clear = False 6 | pdf = False 7 | allow_errors = True 8 | 9 | exec_cmds = [ 10 | "jupyter", 11 | "nbconvert", 12 | "--execute", 13 | "--ExecutePreprocessor.timeout=180000", 14 | ] 15 | if allow_errors: 16 | exec_cmds.append("--allow-errors") 17 | exec_cmds.append("--inplace") 18 | 19 | 20 | def run_nb(nb_file, nb_dir): 21 | for worker_dir in nb_dir.rglob("worker*"): 22 | if worker_dir.isdir() and worker_dir.name.startswith("worker"): 23 | shutil.rmtree(worker_dir) 24 | run(exec_cmds + [nb_file], cwd=nb_dir, check=True) 25 | if pdf: 26 | run(["jupyter", "nbconvert", "--to", "pdf", nb_file], cwd=nb_dir, check=True) 27 | if clear: 28 | run( 29 | [ 30 | "jupyter", 31 | "nbconvert", 32 | "--ClearOutputPreprocessor.enabled=True", 33 | "--ClearMetadataPreprocessor.enabled=True", 34 | "--inplace", 35 | nb_file, 36 | ], 37 | cwd=nb_dir, 38 | check=True, 39 | ) 40 | return 41 | 42 | 43 | nb_dir = Path(__file__).parent 44 | nb_files = sorted(nb_dir.rglob("*.ipynb")) 45 | assert len(nb_files) > 0 46 | for nb_file in nb_files: 47 | run_nb(nb_file, nb_dir) 48 | -------------------------------------------------------------------------------- /meson.build: -------------------------------------------------------------------------------- 1 | project( 2 | 'PESTUTILS', 3 | 'fortran', 4 | version: '2023.9.21', 5 | meson_version: '>= 1.1.0', 6 | default_options: [ 7 | 'b_vscrt=static_from_buildtype', # Link runtime libraries statically on Windows 8 | 'optimization=2', 9 | ]) 10 | 11 | if get_option('optimization') == '3' 12 | error('Only optimization levels <= 2 are supported') 13 | endif 14 | 15 | if get_option('optimization') == '2' 16 | profile = 'release' 17 | else 18 | profile = 'develop' 19 | endif 20 | 21 | message('The used profile is:', profile) 22 | 23 | # Gather host-system options 24 | system = build_machine.system() 25 | fc = meson.get_compiler('fortran') 26 | fc_id = fc.get_id() 27 | compile_args = [] 28 | link_args = [] 29 | 30 | # Command line options for gfortran 31 | if fc_id == 'gcc' 32 | # General options 33 | compile_args += [ 34 | '-cpp', 35 | '-Wcharacter-truncation', 36 | '-Wno-maybe-uninitialized', 37 | '-Wno-unused-label', 38 | '-Wno-unused-variable', 39 | '-fallow-argument-mismatch', 40 | ] 41 | 42 | # Options specific to profile 43 | if profile == 'release' 44 | compile_args += ['-ffpe-summary=overflow', '-ffpe-trap=overflow,zero,invalid'] 45 | elif profile == 'develop' 46 | compile_args += ['-fcheck=all', '-ffpe-trap=overflow,zero,invalid,denormal'] 47 | endif 48 | 49 | # Define OS with gfortran for OS specific code 50 | # These are identical to pre-defined macros available with ifort 51 | if system == 'linux' 52 | compile_args += '-D__linux__' 53 | elif system == 'darwin' 54 | compile_args += '-D__APPLE__' 55 | elif system == 'windows' 56 | compile_args += '-D_WIN32' 57 | # For "more static" use the following envvar: 58 | # LDFLAGS=-static-libgcc -static-libgfortran -static-libquadmath -Wl,-Bstatic,--whole-archive -lwinpthread -Wl,--no-whole-archive 59 | endif 60 | endif 61 | 62 | # Command line options for ifort 63 | if fc_id == 'intel-cl' 64 | # windows 65 | compile_args += ['/fpe:0', # Activate all floating point exceptions 66 | '/heap-arrays:0', 67 | '/traceback', 68 | '/fpp', # Activate preprocessing 69 | '/Qdiag-disable:7416', # f2008 warning 70 | '/Qdiag-disable:7025', # f2008 warning 71 | '/Qdiag-disable:5268', # Line too long 72 | '/c', 73 | '/fpp' 74 | ] 75 | link_args += ['/ignore:4217', # access through ddlimport might be inefficient 76 | '/ignore:4286' # same as 4217, but more general 77 | ] 78 | elif fc_id == 'intel' 79 | # linux and macOS 80 | compile_args += ['-fpe0', # Activate all floating point exceptions 81 | '-no-heap-arrays', 82 | '-traceback', 83 | '-diag-disable:7416', # f2008 warning 84 | '-diag-disable:7025', # f2008 warning 85 | '-diag-disable:5268', # Line too long 86 | '-c', 87 | '-fpp' 88 | ] 89 | link_args += '-static-intel' 90 | endif 91 | 92 | add_project_arguments(fc.get_supported_arguments(compile_args), language: 'fortran') 93 | add_project_link_arguments(fc.get_supported_arguments(link_args), language: 'fortran') 94 | 95 | subdir('pestutils') 96 | -------------------------------------------------------------------------------- /meson.options: -------------------------------------------------------------------------------- 1 | option('install_drivers', type : 'boolean', value : false, 2 | description : 'Install driver programs used for testing') 3 | -------------------------------------------------------------------------------- /pestutils/deftypes.f90: -------------------------------------------------------------------------------- 1 | MODULE DEFTYPES 2 | 3 | ! -- General dimensioning parameters. 4 | 5 | use dimvar 6 | 7 | ! -- MF6-specific parameters and grid-independent data 8 | 9 | integer, parameter :: MF6HEADERLEN=50 10 | integer, parameter :: MAXLENTXT=120 11 | integer, parameter :: NTXT_DIS=16 12 | integer, parameter :: NTXT_DISV=20 13 | integer :: expect_dis_type(NTXT_DIS),expect_disv_type(NTXT_DISV) 14 | character (len=10) :: expectdefn_dis(NTXT_DIS),expectdefn_disv(NTXT_DISV) 15 | character (len=MF6HEADERLEN) :: mf6header(4) 16 | character (len=MAXLENTXT) :: definition(max(NTXT_DIS,NTXT_DISV)) 17 | 18 | data expectdefn_dis /'NCELLS ','NLAY ','NROW ','NCOL ', & 19 | 'NJA ','XORIGIN ','YORIGIN ','ANGROT ', & 20 | 'DELR ','DELC ','TOP ','BOTM ', & 21 | 'IA ','JA ','IDOMAIN ','ICELLTYPE ' / 22 | 23 | data expect_dis_type /1,1,1,1,1,2,2,2,2,2,2,2,1,1,1,1/ 24 | 25 | 26 | data expectdefn_disv /'NCELLS ','NLAY ','NCPL ','NVERT ', & 27 | 'NJAVERT ','NJA ','XORIGIN ','YORIGIN ', & 28 | 'ANGROT ','TOP ','BOTM ','VERTICES ', & 29 | 'CELLX ','CELLY ','IAVERT ','JAVERT ', & 30 | 'IA ','JA ','IDOMAIN ','ICELLTYPE ' / 31 | 32 | data expect_disv_type /1,1,1,1,1,1,2,2,2,2,2,2,2,2,1,1,1,1,1,1/ 33 | 34 | ! -- Structured grid type 35 | 36 | type strucgrid 37 | character (len=LENGRIDNAME) :: name=' ' 38 | integer :: ncol=0 39 | integer :: nrow=0 40 | integer :: nlay=0 41 | double precision :: e0,n0 ! top left corner 42 | double precision :: rotation,cosang,sinang 43 | double precision, dimension(:), pointer :: delr,delc 44 | end type strucgrid 45 | 46 | ! -- MF6 grid type 47 | 48 | type mf6grid 49 | integer :: distype=0 50 | integer :: ncells=0 51 | integer :: ncrl=0 52 | integer :: ncr=0 53 | integer :: ncol=0 54 | integer :: nrow=0 55 | integer :: nlay=0 56 | integer :: ncpl=0 57 | integer :: nvert=0 58 | integer :: njavert=0 59 | integer :: nja=0 60 | double precision :: xorigin,yorigin,angrot 61 | character (len=LENGRIDNAME) :: name=' ' 62 | 63 | integer, pointer :: idomain(:,:,:),icelltype(:,:,:) 64 | integer, pointer :: iavert(:),javert(:) 65 | integer, pointer :: idomainv(:,:),icelltypev(:,:) 66 | integer, pointer :: ivv(:,:,:) 67 | integer, pointer :: ibound(:,:) 68 | integer, pointer :: nvertcon(:),vertconcell(:,:),identvert(:,:) 69 | integer, pointer :: ia(:),ja(:) 70 | double precision, pointer :: delc(:),delr(:) 71 | double precision, pointer :: botm(:,:,:) 72 | double precision, pointer :: botmv(:,:) 73 | double precision, pointer :: vertices(:,:),cellx(:),celly(:) 74 | double precision, pointer :: bottom(:,:) 75 | end type mf6grid 76 | 77 | ! -- Incidences of grids. 78 | 79 | type (strucgrid), dimension(MAXSTRUCMODGRID) :: strucmodgrid 80 | integer :: numstrucmodgrid=0 81 | type (mf6grid), dimension(MAXMF6MODGRID) :: mf6modgrid 82 | integer :: nummf6modgrid=0 83 | 84 | END MODULE DEFTYPES 85 | -------------------------------------------------------------------------------- /pestutils/dimvar.f90: -------------------------------------------------------------------------------- 1 | module dimvar 2 | 3 | ! -- Dimensioning and size 4 | 5 | integer, parameter :: LENCLINE=1000 6 | integer, parameter :: LENFILENAME=257 7 | integer, parameter :: LENMESSAGE=1500 8 | integer, parameter :: LENGRIDNAME=201 9 | integer, parameter :: LENFUNCNAME=150 10 | integer, parameter :: MAXSTRUCMODGRID=5 11 | integer, parameter :: MAXMF6MODGRID=5 12 | integer, parameter :: MAXINTERPVERT=10 ! Maximum no. of vertices for interpolation 13 | integer, parameter :: LENFACCODE=20 ! Characters in factor file code 14 | 15 | end module dimvar 16 | -------------------------------------------------------------------------------- /pestutils/dimvar_c.f90: -------------------------------------------------------------------------------- 1 | module dimvar_c 2 | use iso_c_binding, only: c_int 3 | use dimvar, only: LENFILENAME, LENMESSAGE, LENGRIDNAME 4 | implicit none 5 | 6 | integer(c_int), bind(C, name="LENFILENAME") :: LENFILENAME_C = LENFILENAME 7 | 8 | integer(c_int), bind(C, name="LENMESSAGE") :: LENMESSAGE_C = LENMESSAGE 9 | 10 | integer(c_int), bind(C, name="LENGRIDNAME") :: LENGRIDNAME_C = LENGRIDNAME 11 | 12 | end module dimvar_c 13 | -------------------------------------------------------------------------------- /pestutils/driver1.f90: -------------------------------------------------------------------------------- 1 | program driver1 2 | 3 | ! -- This program is used as a driver for functions which read and report the contents of 4 | ! MODFLOW binary output files. 5 | 6 | use function_interfaces 7 | use iso_c_binding, only : c_int,c_char 8 | implicit none 9 | 10 | integer (kind=c_int) :: isim,itype,iprec 11 | integer (kind=c_int) :: narray,ntime,ifail 12 | integer :: ibeg,iend 13 | character (kind=c_char,len=1) :: infilestring(256),outfilestring(256) 14 | character (kind=c_char,len=1) :: messagestring(1500) 15 | character (len=30) :: atype,aprec 16 | character (len=256) :: infile,afile,outfile 17 | character (len=1500) :: amessage 18 | 19 | ! -- Record what it does. 20 | 21 | write(6,*) 22 | write(6,20) 23 | 20 format(' Driver for function inquire_modflow_binary_file_specs()') 24 | write(6,*) 25 | 26 | ! -- Initialization 27 | 28 | amessage=' ' 29 | 30 | 50 write(6,60) 31 | 60 format(' A simulation code is required.') 32 | write(6,70) 33 | 70 format(' (1=mf; 21=mfusg_s; 22=mfusg_us; 31=mf6_dis; 32=mfusg_disv; 33=mfusg_disu)') 34 | 79 write(6,80,advance='no') 35 | 80 format(' Enter simulation code: ') 36 | read(5,*,err=79) isim 37 | write(6,*) 38 | 39 | ! -- Acquire the name of the MODFLOW binary file that must be read. 40 | 41 | 100 write(6,110,advance='no') 42 | 110 format(' Enter name of MODFLOW binary output file ( if no more): ') 43 | read(5,'(a)') afile 44 | if(afile.eq.' ') go to 9990 45 | ibeg=1 46 | iend=len_trim(afile) 47 | call getfile(ifail,afile,infile,ibeg,iend) 48 | if(ifail.ne.0) go to 100 49 | 120 write(6,125,advance='no') 50 | 125 format(' Enter file type code (1=state; 2=flow): ') 51 | read(5,*,err=120) itype 52 | ! if((itype.ne.1).and.(itype.ne.2)) go to 120 53 | 54 | ! -- Acquire the name of the file to which contents of this file must be recorded. 55 | 56 | write(6,*) 57 | 130 write(6,140,advance='no') 58 | 140 format(' Enter name for file details file ( if none): ') 59 | read(5,'(a)') afile 60 | if(afile.eq.' ')then 61 | outfile=' ' 62 | else 63 | ibeg=1 64 | iend=len_trim(afile) 65 | call getfile(ifail,afile,outfile,ibeg,iend) 66 | if(ifail.ne.0) go to 130 67 | end if 68 | 69 | ! -- Convert to C-type character strings 70 | 71 | call char2string(256,infile,infilestring) 72 | call char2string(256,outfile,outfilestring) 73 | 74 | ! -- Call the function. 75 | 76 | write(6,*) 77 | write(6,150) 78 | 150 format(' Calling function inquire_modflow_binary_file_specs...') 79 | write(6,*) 80 | ifail=inquire_modflow_binary_file_specs(infilestring,outfilestring, & 81 | isim,itype,iprec,narray,ntime) 82 | 83 | ! -- Report success or failure. 84 | 85 | write(6,160) ifail 86 | 160 format(' IFAIL = ',i1) 87 | if(ifail.ne.0)then 88 | ifail=retrieve_error_message(messagestring) 89 | call string2char(1500,messagestring,amessage) 90 | amessage=' '//trim(amessage) 91 | call writmess(6,amessage) 92 | else 93 | atype='xxxx' 94 | aprec='xxxx' 95 | if(itype.eq.1)then 96 | atype='dependent-variable' 97 | else if(itype.eq.2)then 98 | atype='cell-by-cell flow term' 99 | end if 100 | if(iprec.eq.1)then 101 | aprec='single' 102 | else if(iprec.eq.2)then 103 | aprec='double' 104 | endif 105 | write(6,170) trim(atype) 106 | 170 format(' FILE TYPE = ',a) 107 | write(6,180) trim(aprec) 108 | 180 format(' PRECISION = ',a) 109 | write(6,190) narray 110 | 190 format(' Number of arrays =',i5) 111 | write(6,195) ntime 112 | 195 format(' Number of output times =',i5) 113 | 114 | end if 115 | write(6,*) 116 | go to 100 117 | 118 | 9990 end 119 | 120 | -------------------------------------------------------------------------------- /pestutils/meson.build: -------------------------------------------------------------------------------- 1 | src_dir = '.' 2 | lib_sources = files( 3 | 'deftypes.f90', 4 | 'dimvar.f90', 5 | 'dimvar_c.f90', 6 | 'funcproc1.f90', 7 | 'funcproc2.f90', 8 | 'function_interfaces.f90', 9 | 'lapack1.F', 10 | 'sgsim_code.f90', 11 | 'utl.f90', 12 | 'utl_high.f90' 13 | ) 14 | 15 | lib = shared_library('pestutils', lib_sources, 16 | name_prefix: host_machine.system() == 'windows' ? '': 'lib', 17 | vs_module_defs: 'pestutils.def', 18 | install: true) 19 | 20 | # Set RUNPATH/RPATH for install_rpath for only Linux and macOS 21 | libdir = get_option('libdir') 22 | if target_machine.system() == 'linux' 23 | inst_rpath = '$ORIGIN/..' / libdir 24 | elif target_machine.system() == 'darwin' 25 | inst_rpath = '@loader_path/..' / libdir 26 | else 27 | inst_rpath = '' 28 | endif 29 | 30 | # By default, don't install test driver programs. 31 | # To build them, use: meson setup/configure -Dinstall_drivers=true ... 32 | 33 | inst_drvs = get_option('install_drivers') 34 | 35 | executable('driver1', ['driver1.f90', 'driversubs.f90'], 36 | link_with: [lib], install_rpath: inst_rpath, install: inst_drvs) 37 | executable('driver2', ['driver2.f90', 'driversubs.f90'], 38 | link_with: [lib], install_rpath: inst_rpath, install: inst_drvs) 39 | executable('driver3', ['driver3.f90', 'driversubs.f90'], 40 | link_with: [lib], install_rpath: inst_rpath, install: inst_drvs) 41 | executable('driver4', ['driver4.f90', 'driversubs.f90'], 42 | link_with: [lib], install_rpath: inst_rpath, install: inst_drvs) 43 | executable('driver5', ['driver5.f90', 'driversubs.f90'], 44 | link_with: [lib], install_rpath: inst_rpath, install: inst_drvs) 45 | executable('driver6', ['driver6.f90', 'driversubs.f90'], 46 | link_with: [lib], install_rpath: inst_rpath, install: inst_drvs) 47 | executable('driver7', ['driver7.f90', 'driversubs.f90'], 48 | link_with: [lib], install_rpath: inst_rpath, install: inst_drvs) 49 | executable('driver8', ['driver8.f90', 'driversubs.f90'], 50 | link_with: [lib], install_rpath: inst_rpath, install: inst_drvs) 51 | executable('driver9', ['driver9.f90', 'driversubs.f90'], 52 | link_with: [lib], install_rpath: inst_rpath, install: inst_drvs) 53 | executable('driver10', ['driver10.f90', 'driversubs.f90'], 54 | link_with: [lib], install_rpath: inst_rpath, install: inst_drvs) 55 | executable('driver11', ['driver11.f90', 'driversubs.f90'], 56 | link_with: [lib], install_rpath: inst_rpath, install: inst_drvs) 57 | executable('driver12', ['driver12.f90', 'driversubs.f90'], 58 | link_with: [lib], install_rpath: inst_rpath, install: inst_drvs) 59 | executable('driver13', ['driver13.f90', 'driversubs.f90'], 60 | link_with: [lib], install_rpath: inst_rpath, install: inst_drvs) 61 | executable('driver14', ['driver14.f90', 'driversubs.f90'], 62 | link_with: [lib], install_rpath: inst_rpath, install: inst_drvs) 63 | executable('driver15', ['driver15.f90', 'driversubs.f90'], 64 | link_with: [lib], install_rpath: inst_rpath, install: inst_drvs) 65 | executable('driver16', ['driver16.f90', 'driversubs.f90'], 66 | link_with: [lib], install_rpath: inst_rpath, install: inst_drvs) 67 | executable('driver17', ['driver17.f90', 'driversubs.f90'], 68 | link_with: [lib], install_rpath: inst_rpath, install: inst_drvs) 69 | -------------------------------------------------------------------------------- /pestutils/pestutils.def: -------------------------------------------------------------------------------- 1 | EXPORTS 2 | LENFILENAME DATA 3 | LENMESSAGE DATA 4 | LENGRIDNAME DATA 5 | inquire_modflow_binary_file_specs 6 | retrieve_error_message 7 | install_structured_grid 8 | uninstall_structured_grid 9 | free_all_memory 10 | interp_from_structured_grid 11 | interp_to_obstime 12 | install_mf6_grid_from_file 13 | uninstall_mf6_grid 14 | calc_mf6_interp_factors 15 | interp_from_mf6_depvar_file 16 | extract_flows_from_cbc_file 17 | calc_kriging_factors_2d 18 | calc_kriging_factors_auto_2d 19 | krige_using_file 20 | calc_kriging_factors_3d 21 | build_covar_matrix_2d 22 | build_covar_matrix_3d 23 | calc_structural_overlay_factors 24 | interpolate_blend_using_file 25 | ipd_interpolate_2d 26 | ipd_interpolate_3d 27 | initialize_randgen 28 | fieldgen2d_sva 29 | fieldgen3d_sva 30 | get_cell_centres_structured 31 | get_cell_centres_mf6 32 | -------------------------------------------------------------------------------- /pypestutils/__init__.py: -------------------------------------------------------------------------------- 1 | """PyPestUtils.""" 2 | 3 | __all__ = ["__version__"] 4 | from .version import __version__ 5 | -------------------------------------------------------------------------------- /pypestutils/enum.py: -------------------------------------------------------------------------------- 1 | """Enumeration module.""" 2 | 3 | from __future__ import annotations 4 | 5 | from enum import IntEnum 6 | 7 | 8 | class ParamEnum(IntEnum): 9 | """Wraps IntEnum to provide validation of a requested item. 10 | 11 | Intended for enums used for function parameters. 12 | 13 | Use enum.get_value(item) for this behavior instead of builtin enum[item]. 14 | """ 15 | 16 | @classmethod 17 | def get_valid_options(cls) -> dict[int, str]: 18 | """Get valid options as a dict.""" 19 | return dict((e.value, e.name) for e in cls) 20 | 21 | @classmethod 22 | def get_value(cls, item: str) -> int: 23 | """Get integer value from str key. 24 | 25 | Validate item and raise a ValueError with valid options. 26 | """ 27 | try: 28 | return cls[item].value 29 | except KeyError: 30 | valid_options_list = [ 31 | f"'{n}' ({v})" for (v, n) in cls.get_valid_options().items() 32 | ] 33 | raise ValueError( 34 | "{}: '{}' is not a valid option, must be one of {}".format( 35 | cls.__name__, item, ", ".join(valid_options_list) 36 | ) 37 | ) 38 | 39 | 40 | class Prec(ParamEnum): 41 | """Floating precision type, where 1 is single and 2 is double precision.""" 42 | 43 | single = 1 44 | double = 2 45 | 46 | 47 | class KrigType(ParamEnum): 48 | """Kriging type, where 0 is simple and 1 is ordinary.""" 49 | 50 | simple = 0 51 | ordinary = 1 52 | 53 | 54 | class VarioType(ParamEnum): 55 | """Variogram type, where 1:spher, 2:exp, 3:gauss and 4:pow.""" 56 | 57 | spher = 1 58 | exp = 2 59 | gauss = 3 60 | pow = 4 61 | 62 | 63 | class FactorFileType(ParamEnum): 64 | """Factor file type, where 0 is binary and 1 is text.""" 65 | 66 | binary = 0 67 | text = 1 68 | 69 | 70 | class StrucType(ParamEnum): 71 | """Structure type, where 0 is for polylinear and 1 for polygonal.""" 72 | 73 | polylinear = 0 74 | polygonal = 1 75 | 76 | 77 | class TransType(ParamEnum): 78 | """Enable log-transformation of values.""" 79 | 80 | none = 0 81 | log = 1 82 | -------------------------------------------------------------------------------- /pypestutils/finder.py: -------------------------------------------------------------------------------- 1 | """Locate pestutils shared library by any means necessary.""" 2 | 3 | import ctypes 4 | import os 5 | import platform 6 | import sys 7 | from ctypes.util import find_library 8 | from pathlib import Path 9 | 10 | # the current working directory of this file 11 | pkg_dir = Path(__file__).parent 12 | 13 | # generate a bunch of candidate locations where the 14 | # shared library *might* be hanging out 15 | _candidates = [ 16 | os.environ.get("PESTUTILS_LIBRARY", None), 17 | str(pkg_dir / "lib"), # see scripts/build_lib.sh 18 | str(pkg_dir.parent / "inst" / ("bin" if os.name == "nt" else "lib")), 19 | ".", 20 | ] 21 | 22 | 23 | def load() -> ctypes.CDLL: 24 | """Load the pestutils shared library. 25 | 26 | Returns 27 | ------- 28 | ctypes.CDLL 29 | Loaded shared library 30 | """ 31 | if os.name == "nt": 32 | lib_name = "pestutils.dll" 33 | 34 | # add search paths for conda installs 35 | if ( 36 | os.path.exists(os.path.join(sys.prefix, "conda-meta")) 37 | or "conda" in sys.version 38 | ): 39 | _candidates.append(os.path.join(sys.prefix, "Library", "bin")) 40 | 41 | # get the current PATH 42 | oldenv = os.environ.get("PATH", "").strip().rstrip(";") 43 | # run through our list of candidate locations 44 | for path in _candidates: 45 | if not path or not os.path.exists(path): 46 | continue 47 | # temporarily add the path to the PATH environment variable 48 | # so Windows can find additional DLL dependencies. 49 | os.environ["PATH"] = ";".join([path, oldenv]) 50 | try: 51 | rt = ctypes.cdll.LoadLibrary(os.path.join(path, lib_name)) 52 | if rt is not None: 53 | return rt 54 | except OSError: 55 | pass 56 | except BaseException as err: 57 | print(f"pypestutils.finder unexpected error: {err!s}") 58 | finally: 59 | os.environ["PATH"] = oldenv 60 | raise OSError(f"could not find or load {lib_name}") 61 | 62 | if os.name == "posix": 63 | # posix includes both mac and linux 64 | # use the extension for the specific platform 65 | if platform.system() == "Darwin": 66 | # macos shared libraries are `.dylib` 67 | lib_name = "libpestutils.dylib" 68 | else: 69 | # linux shared libraries are `.so` 70 | lib_name = "libpestutils.so" 71 | 72 | # get the starting working directory 73 | cwd = os.getcwd() 74 | for cand in _candidates: 75 | if cand is None: 76 | continue 77 | if os.path.isdir(cand): 78 | # if our candidate is a directory use best guess 79 | path = cand 80 | target = os.path.join(cand, lib_name) 81 | elif os.path.isfile(cand): 82 | # if candidate is just a file use that 83 | path = os.path.split(cand)[0] 84 | target = cand 85 | else: 86 | continue 87 | 88 | if not os.path.exists(target): 89 | continue 90 | 91 | try: 92 | # move to the location we're checking 93 | os.chdir(path) 94 | # try loading the target file candidate 95 | rt = ctypes.cdll.LoadLibrary(target) 96 | if rt is not None: 97 | return rt 98 | except BaseException as err: 99 | print(f"pypestutils.finder ({target}) unexpected error: {err!s}") 100 | finally: 101 | os.chdir(cwd) 102 | 103 | try: 104 | # try loading library using LD path search 105 | path = find_library("pestutils") 106 | if path is not None: 107 | return ctypes.cdll.LoadLibrary(path) 108 | 109 | except BaseException: 110 | pass 111 | 112 | raise OSError("Could not load pestutils library") 113 | -------------------------------------------------------------------------------- /pypestutils/logger.py: -------------------------------------------------------------------------------- 1 | """Logger module.""" 2 | 3 | from __future__ import annotations 4 | 5 | __all__ = ["get_logger"] 6 | 7 | import logging 8 | import sys 9 | from logging import Logger 10 | 11 | 12 | def get_logger(name: str, level: str | int = 0) -> Logger: 13 | """Return a named logger. 14 | 15 | Parameters 16 | ---------- 17 | name : str 18 | Logger name. 19 | logger_level : str, int, optional 20 | Logger level, default 0 ("NOTSET"). Accepted values are 21 | "DEBUG" (10), "INFO" (20), "WARNING" (30), "ERROR" (40) or 22 | "CRITICAL" (50). 23 | 24 | Returns 25 | ------- 26 | Logger 27 | """ 28 | logger = logging.getLogger(name) 29 | logger.setLevel(level) 30 | 31 | if not logger.hasHandlers(): 32 | formatter = logging.Formatter("%(levelname)s:%(name)s: %(message)s") 33 | handler = logging.StreamHandler(sys.stdout) 34 | handler.setFormatter(formatter) 35 | logger.addHandler(handler) 36 | 37 | return logger 38 | -------------------------------------------------------------------------------- /pypestutils/version.py: -------------------------------------------------------------------------------- 1 | """Package version.""" 2 | 3 | # This is the only place to update version 4 | __version__ = "0.3.1.dev0" 5 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [build-system] 2 | requires = ["setuptools>=61", "wheel"] 3 | build-backend = "setuptools.build_meta" 4 | 5 | [project] 6 | name = "pypestutils" 7 | dynamic = ["version"] 8 | authors = [ 9 | {name = "Jeremy White", email = "jtwhite1000@gmail.com"}, 10 | {name = "Mike Taves", email = "mwtoews@gmail.com"}, 11 | ] 12 | readme = "README.md" 13 | description = "PEST utilities for MODFLOW" 14 | keywords = ["PEST", "MODFLOW", "groundwater", "model"] 15 | license = {text = "Unlicense"} 16 | classifiers = [ 17 | "Development Status :: 2 - Pre-Alpha", 18 | "Intended Audience :: Science/Research", 19 | "License :: OSI Approved :: The Unlicense (Unlicense)", 20 | "Operating System :: Unix", 21 | "Operating System :: MacOS", 22 | "Operating System :: Microsoft :: Windows", 23 | "Programming Language :: Fortran", 24 | "Programming Language :: Python :: 3 :: Only", 25 | "Programming Language :: Python :: 3", 26 | "Programming Language :: Python :: 3.9", 27 | "Programming Language :: Python :: 3.10", 28 | "Programming Language :: Python :: 3.11", 29 | "Programming Language :: Python :: 3.12", 30 | "Programming Language :: Python :: 3.13", 31 | "Topic :: Scientific/Engineering :: Hydrology", 32 | ] 33 | requires-python = ">=3.9" 34 | dependencies = [ 35 | "numpy", 36 | "pandas", 37 | ] 38 | 39 | [project.optional-dependencies] 40 | optional = [ 41 | "flopy", 42 | "jupyter", 43 | "pyemu", 44 | ] 45 | test = [ 46 | "pytest", 47 | ] 48 | 49 | [project.urls] 50 | Repository = "https://github.com/pypest/pypestutils" 51 | 52 | [tool.setuptools] 53 | include-package-data = false 54 | 55 | [tool.setuptools.dynamic] 56 | version = {attr = "pypestutils.version.__version__"} 57 | 58 | [tool.setuptools.packages.find] 59 | include = ["pypestutils", "pypestutils.*"] 60 | 61 | [tool.cibuildwheel] 62 | build = "cp39-*" 63 | build-verbosity = 3 64 | repair-wheel-command = "python scripts/repair_wheel.py -w {dest_dir} {wheel}" 65 | test-requires = "tox" 66 | test-command = "tox --conf {project} --installpkg {wheel}" 67 | test-skip = [ 68 | "*-musllinux*", 69 | "*aarch64", # slow! 70 | ] 71 | # see also CIBW_ENVIRONMENT_MACOS in release.yml 72 | before-build = [ 73 | "pip install meson ninja wheel", 74 | "bash {project}/scripts/build_lib.sh", 75 | ] 76 | 77 | [tool.cibuildwheel.windows] 78 | before-build = "pip install wheel" 79 | 80 | [tool.codespell] 81 | skip = "*.grb,*.log,./pestutils/sgsim_code.f90,./pestutils/lapack1.F" 82 | ignore-words-list = [ 83 | "acount", 84 | "afile", 85 | "aline", 86 | "alo", 87 | "delt", 88 | "ect", 89 | "gaus", 90 | "inout", 91 | "nam", 92 | "nd", 93 | "rel", 94 | "wel", 95 | ] 96 | 97 | [tool.ruff.lint] 98 | select = [ 99 | "D", # pydocstyle 100 | "E", "W", # pycodestyle 101 | "F", # Pyflakes 102 | "I", # isort 103 | "RET", # flake8-return 104 | "UP", # pyupgrade 105 | ] 106 | ignore = [ 107 | "D205", # 1 blank line required between summary line and description 108 | ] 109 | 110 | [tool.ruff.lint.per-file-ignores] 111 | "setup.py" = ["D"] 112 | "docs/*.py" = ["D"] 113 | "examples/*" = ["D"] 114 | "scripts/*.py" = ["D"] 115 | "tests/*.py" = ["D"] 116 | 117 | [tool.ruff.lint.pydocstyle] 118 | convention = "numpy" 119 | -------------------------------------------------------------------------------- /scripts/build_lib.bat: -------------------------------------------------------------------------------- 1 | :: always run from top of repo 2 | cd %~dp0\.. 3 | 4 | :: clean previous attempts 5 | RD /S /Q builddir 2> NUL 6 | RD /S /Q inst 2> NUL 7 | RD /S /Q pypestutils\lib 2> NUL 8 | 9 | :: setup, compile and install 10 | meson setup builddir --prefix=%cd%\inst 11 | meson compile -C builddir 12 | meson install -C builddir 13 | 14 | ::copy lib files to Python module 15 | MD pypestutils\lib 16 | COPY /B inst\bin\pestutils.dll pypestutils\lib 17 | -------------------------------------------------------------------------------- /scripts/build_lib.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | 4 | # always run from top of repo 5 | cd $(dirname $0)/.. 6 | 7 | echo "Running $0 for \$OSTYPE=$OSTYPE ..." 8 | 9 | # this needs bash 10 | case "$OSTYPE" in 11 | darwin*) libname=lib/libpestutils.dylib ;; 12 | linux*) libname=lib/libpestutils.so ;; 13 | msys*|cygwin ) libname=bin/pestutils.dll ;; 14 | *) echo "unknown \$OSTYPE: $OSTYPE" && exit 1 ;; 15 | esac 16 | 17 | # on macOS add "-ld_classic" to LDFLAGS if ld-classic is present and not deprecated 18 | if [[ $OSTYPE == darwin* ]]; then 19 | XCODE_PATH=$(/usr/bin/xcode-select -p 2> /dev/null) 20 | if [ -n $XCODE_PATH ]; then 21 | if [ -x "$XCODE_PATH/usr/bin/ld-classic" -o \ 22 | -x "$XCODE_PATH/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld-classic" ]; then 23 | if [ -z "$(ld -ld_classic 2>&1 | grep 'ld_classic is deprecated')" ]; then 24 | export LDFLAGS="$LDFLAGS -Wl,-ld_classic" 25 | fi 26 | fi 27 | fi 28 | fi 29 | 30 | # clean previous attempts 31 | rm -rf builddir 32 | rm -rf inst 33 | rm -rf pypestutils/lib 34 | 35 | # setup, compile and install 36 | meson setup builddir --prefix=$(pwd)/inst --libdir=lib 37 | meson compile -C builddir 38 | meson install -C builddir 39 | 40 | # copy lib file to Python module 41 | mkdir pypestutils/lib 42 | echo "Copying $libname to pypestutils/lib/" 43 | cp inst/$libname pypestutils/lib/ 44 | -------------------------------------------------------------------------------- /scripts/cross_build_lib.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | 4 | # always run from top of repo 5 | cd $(dirname $0)/.. 6 | 7 | # clean previous attempts 8 | rm -rf builddir 9 | rm -rf inst 10 | rm -rf pypestutils/lib 11 | 12 | # setup, compile and install 13 | meson setup builddir --prefix=$(pwd)/inst --cross-file etc/linux-mingw-w64-64bit.txt 14 | meson compile -C builddir 15 | meson install -C builddir 16 | 17 | # copy lib files to Python module 18 | mkdir pypestutils/lib 19 | cp inst/bin/pestutils.dll pypestutils/lib/ 20 | -------------------------------------------------------------------------------- /scripts/repair_wheel.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | 3 | import argparse 4 | import shutil 5 | import subprocess 6 | import sys 7 | import tempfile 8 | from pathlib import Path 9 | 10 | 11 | def main(): 12 | if sys.platform.startswith("linux"): 13 | os_ = "linux" 14 | elif sys.platform.startswith("darwin"): 15 | os_ = "macos" 16 | elif sys.platform.startswith("win32"): 17 | os_ = "windows" 18 | else: 19 | raise NotImplementedError( 20 | f"sys.platform '{sys.platform}' is not supported yet." 21 | ) 22 | 23 | p = argparse.ArgumentParser( 24 | description="Convert wheel to be independent of python implementation and ABI" 25 | ) 26 | p.set_defaults(prog=Path(sys.argv[0]).name) 27 | p.add_argument("WHEEL_FILE", help="Path to wheel file.") 28 | p.add_argument( 29 | "-w", 30 | "--wheel-dir", 31 | dest="WHEEL_DIR", 32 | help=('Directory to store delocated wheels (default: "wheelhouse/")'), 33 | default="wheelhouse/", 34 | ) 35 | 36 | args = p.parse_args() 37 | 38 | file = Path(args.WHEEL_FILE).resolve(strict=True) 39 | wheelhouse = Path(args.WHEEL_DIR).resolve() 40 | wheelhouse.mkdir(parents=True, exist_ok=True) 41 | 42 | with tempfile.TemporaryDirectory() as tmpdir_: 43 | tmpdir = Path(tmpdir_) 44 | # use the platform specific repair tool first 45 | if os_ == "linux": 46 | subprocess.run( 47 | ["auditwheel", "repair", "-w", str(tmpdir), str(file)], check=True 48 | ) 49 | elif os_ == "macos": 50 | subprocess.run( 51 | [ 52 | "delocate-wheel", 53 | # "--require-archs", 54 | # "arm64,x86_64", 55 | "-w", 56 | str(tmpdir), 57 | str(file), 58 | ], 59 | check=True, 60 | ) 61 | elif os_ == "windows": 62 | # no specific tool, just copy 63 | shutil.copyfile(file, tmpdir / file.name) 64 | (file,) = tmpdir.glob("*.whl") 65 | 66 | # make this a py3 wheel 67 | subprocess.run( 68 | [ 69 | "wheel", 70 | "tags", 71 | "--python-tag", 72 | "py3", 73 | "--abi-tag", 74 | "none", 75 | "--remove", 76 | str(file), 77 | ], 78 | check=True, 79 | ) 80 | (file,) = tmpdir.glob("*.whl") 81 | file.rename(wheelhouse / file.name) 82 | 83 | 84 | if __name__ == "__main__": 85 | main() 86 | -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | import os 3 | 4 | from setuptools import setup 5 | from setuptools.command.install import install 6 | from setuptools.dist import Distribution 7 | from wheel.bdist_wheel import bdist_wheel as _bdist_wheel 8 | 9 | # current working directory of this setup.py file 10 | _cwd = os.path.abspath(os.path.split(__file__)[0]) 11 | 12 | 13 | class bdist_wheel(_bdist_wheel): 14 | def finalize_options(self): 15 | _bdist_wheel.finalize_options(self) 16 | self.root_is_pure = False 17 | 18 | 19 | class BinaryDistribution(Distribution): 20 | """Distribution which always forces a binary package with platform name.""" 21 | 22 | def has_ext_modules(foo): 23 | return True 24 | 25 | 26 | class InstallPlatlib(install): 27 | def finalize_options(self): 28 | """Copy the shared libraries into the wheel. Note that this 29 | will *only* check in `pypestutils/lib` rather than anywhere on 30 | the system so if you are building a wheel you *must* copy or 31 | symlink the `.so`/`.dll`/`.dylib` files into `pypestutils/lib`. 32 | """ 33 | # use for checking extension types 34 | from fnmatch import fnmatch 35 | 36 | install.finalize_options(self) 37 | if self.distribution.has_ext_modules(): 38 | self.install_lib = self.install_platlib 39 | # get the location of the shared library on the filesystem 40 | 41 | # where we're putting the shared library in the build directory 42 | target_dir = os.path.join(self.build_lib, "pypestutils", "lib") 43 | # where are we checking for shared libraries 44 | source_dir = os.path.join(_cwd, "pypestutils", "lib") 45 | 46 | # what patterns represent shared libraries 47 | patterns = {"*.so", "libpestutils*dylib", "*.dll"} 48 | 49 | if not os.path.isdir(source_dir): 50 | # no copying of binary parts to library 51 | # this is so `pip install .` works even 52 | # if `pypestutils/lib` isn't populated 53 | return 54 | 55 | for file_name in os.listdir(source_dir): 56 | # make sure file name is lower case 57 | check = file_name.lower() 58 | # use filename pattern matching to see if it is 59 | # a shared library format file 60 | if not any(fnmatch(check, p) for p in patterns): 61 | continue 62 | 63 | # if the source isn't a file skip it 64 | if not os.path.isfile(os.path.join(source_dir, file_name)): 65 | continue 66 | 67 | # make build directory if it doesn't exist yet 68 | if not os.path.isdir(target_dir): 69 | os.makedirs(target_dir) 70 | 71 | # copy the source file to the target directory 72 | self.copy_file( 73 | os.path.join(source_dir, file_name), os.path.join(target_dir, file_name) 74 | ) 75 | 76 | 77 | # See pyproject.toml for other project metadata 78 | setup( 79 | name="pypestutils", 80 | distclass=BinaryDistribution, 81 | cmdclass={"bdist_wheel": bdist_wheel, "install": InstallPlatlib}, 82 | ) 83 | -------------------------------------------------------------------------------- /tests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pypest/pypestutils/7cf08f36ba09c38580c0b38b08bcfbc0fdeb55bb/tests/__init__.py -------------------------------------------------------------------------------- /tests/common.py: -------------------------------------------------------------------------------- 1 | """Common functions for tests. For pytest fixtures, see conftest.py.""" 2 | 3 | from pathlib import Path 4 | 5 | # key is name, value is number of arguments 6 | pestutils_function_names = { 7 | "inquire_modflow_binary_file_specs": 7, 8 | "retrieve_error_message": 1, 9 | "install_structured_grid": 10, 10 | "get_cell_centres_structured": 4, 11 | "uninstall_structured_grid": 1, 12 | "free_all_memory": 0, 13 | "interp_from_structured_grid": 15, 14 | "interp_to_obstime": 13, 15 | "install_mf6_grid_from_file": 7, 16 | "get_cell_centres_mf6": 5, 17 | "uninstall_mf6_grid": 1, 18 | "calc_mf6_interp_factors": 9, 19 | "interp_from_mf6_depvar_file": 12, 20 | "extract_flows_from_cbc_file": 15, 21 | "calc_kriging_factors_2d": 19, 22 | "calc_kriging_factors_auto_2d": 14, 23 | "calc_kriging_factors_3d": 28, 24 | "krige_using_file": 10, 25 | "build_covar_matrix_2d": 12, 26 | "build_covar_matrix_3d": 16, 27 | "calc_structural_overlay_factors": 15, 28 | "interpolate_blend_using_file": 10, 29 | "ipd_interpolate_2d": 14, 30 | "ipd_interpolate_3d": 20, 31 | "initialize_randgen": 1, 32 | "fieldgen2d_sva": 16, 33 | "fieldgen3d_sva": 21, 34 | } 35 | 36 | data_dir = Path(__file__).parent / "data" 37 | -------------------------------------------------------------------------------- /tests/conftest.py: -------------------------------------------------------------------------------- 1 | """Fixtures for pytest. Other common functions are in common.py.""" 2 | -------------------------------------------------------------------------------- /tests/data/.gitignore: -------------------------------------------------------------------------------- 1 | coast.hds 2 | coast_heads_wells.dat.std 3 | coast_heads_wells_time_interp.dat.std 4 | coastwells_meastime.dat 5 | driver1a.out.std 6 | driver1c.out.std 7 | driver1d.out.std 8 | hd1h.hds 9 | hd1h_wells_sim.dat.std 10 | lock.hds 11 | lock_heads_wells.dat.std 12 | lock_heads_wells_time_interp.dat.std 13 | PT01.cbb 14 | sva_tm.hds 15 | sva_tm_t.cbc 16 | -------------------------------------------------------------------------------- /tests/data/PT01.hds: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pypest/pypestutils/7cf08f36ba09c38580c0b38b08bcfbc0fdeb55bb/tests/data/PT01.hds -------------------------------------------------------------------------------- /tests/data/PT01_r.cbb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pypest/pypestutils/7cf08f36ba09c38580c0b38b08bcfbc0fdeb55bb/tests/data/PT01_r.cbb -------------------------------------------------------------------------------- /tests/data/coast.spc: -------------------------------------------------------------------------------- 1 | 25 50 2 | 0 2500 0.0 3 | 50*100 4 | 25*100 5 | -------------------------------------------------------------------------------- /tests/data/coast_r.hds: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pypest/pypestutils/7cf08f36ba09c38580c0b38b08bcfbc0fdeb55bb/tests/data/coast_r.hds -------------------------------------------------------------------------------- /tests/data/coastwells.crd: -------------------------------------------------------------------------------- 1 | P1 2650 850 13 2 | P2 2750 1650 6 3 | P3 950 550 13 4 | P4 1350 1650 13 5 | O1_U 1550 650 6 6 | O2_U 950 1250 6 7 | O3_U 2850 250 6 8 | O4_U 2150 1850 6 9 | O5_U 1450 2150 6 10 | O6_U 2050 750 6 11 | O7_U 2050 1450 6 12 | O8_U 2950 850 6 13 | O9_U 3450 250 6 14 | O10_U 3050 1750 6 15 | O11_U 3050 1150 6 16 | O1_L 1550 650 15 17 | O2_L 950 1250 15 18 | O3_L 2850 250 15 19 | O4_L 2150 1850 15 20 | O5_L 1450 2150 15 21 | O6_L 2050 750 15 22 | O7_L 2050 1450 15 23 | O8_L 2950 850 15 24 | O9_L 3450 250 15 25 | O10_L 3050 1750 15 26 | O11_L 3050 1150 15 27 | -------------------------------------------------------------------------------- /tests/data/coastwells_meastime_r.dat: -------------------------------------------------------------------------------- 1 | P1 -100.000000 2 | P1 210.000000 3 | P1 320.000000 4 | P2 -100.000000 5 | P2 210.000000 6 | P2 320.000000 7 | P3 -100.000000 8 | P3 210.000000 9 | P3 320.000000 10 | P4 -100.000000 11 | P4 210.000000 12 | P4 320.000000 13 | O1_U -100.000000 14 | O1_U 210.000000 15 | O1_U 320.000000 16 | O2_U -100.000000 17 | O2_U 210.000000 18 | O2_U 320.000000 19 | O3_U -100.000000 20 | O3_U 210.000000 21 | O3_U 320.000000 22 | O4_U -100.000000 23 | O4_U 210.000000 24 | O4_U 320.000000 25 | O5_U -100.000000 26 | O5_U 210.000000 27 | O5_U 320.000000 28 | O6_U -100.000000 29 | O6_U 210.000000 30 | O6_U 320.000000 31 | O7_U -100.000000 32 | O7_U 210.000000 33 | O7_U 320.000000 34 | O8_U -100.000000 35 | O8_U 210.000000 36 | O8_U 320.000000 37 | O9_U -100.000000 38 | O9_U 210.000000 39 | O9_U 320.000000 40 | O10_U -100.000000 41 | O10_U 210.000000 42 | O10_U 320.000000 43 | O11_U -100.000000 44 | O11_U 210.000000 45 | O11_U 320.000000 46 | O1_L -100.000000 47 | O1_L 210.000000 48 | O1_L 320.000000 49 | O2_L -100.000000 50 | O2_L 210.000000 51 | O2_L 320.000000 52 | O3_L -100.000000 53 | O3_L 210.000000 54 | O3_L 320.000000 55 | O4_L -100.000000 56 | O4_L 210.000000 57 | O4_L 320.000000 58 | O5_L -100.000000 59 | O5_L 210.000000 60 | O5_L 320.000000 61 | O6_L -100.000000 62 | O6_L 210.000000 63 | O6_L 320.000000 64 | O7_L -100.000000 65 | O7_L 210.000000 66 | O7_L 320.000000 67 | O8_L -100.000000 68 | O8_L 210.000000 69 | O8_L 320.000000 70 | O9_L -100.000000 71 | O9_L 210.000000 72 | O9_L 320.000000 73 | O10_L -100.000000 74 | O10_L 210.000000 75 | O10_L 320.000000 76 | O11_L -100.000000 77 | O11_L 210.000000 78 | O11_L 320.000000 79 | -------------------------------------------------------------------------------- /tests/data/driver1a_r.out.std: -------------------------------------------------------------------------------- 1 | KSTP KPER PERTIM TOTIM TEXT NCOL NROW ILAY 2 | 1 1 0.500000000 0.500000000 HEAD 50 50 1 3 | 2 1 1.00000000 1.00000000 HEAD 50 50 1 4 | 1 2 1.00000000 2.00000000 HEAD 50 50 1 5 | 2 2 2.00000000 3.00000000 HEAD 50 50 1 6 | -------------------------------------------------------------------------------- /tests/data/driver1b.out.std: -------------------------------------------------------------------------------- 1 | KSTP KPER PERTIM TOTIM TEXT NSTRT NVAL ILAY 2 | 1 1 1.00000000 1.00000000 HEADU 1 6840 1 3 | 1 1 1.00000000 1.00000000 HEADU 6841 13680 2 4 | 1 2 219.000000 220.000000 HEADU 1 6840 1 5 | 1 2 219.000000 220.000000 HEADU 6841 13680 2 6 | 2 2 438.000000 439.000000 HEADU 1 6840 1 7 | 2 2 438.000000 439.000000 HEADU 6841 13680 2 8 | 3 2 657.000000 658.000000 HEADU 1 6840 1 9 | 3 2 657.000000 658.000000 HEADU 6841 13680 2 10 | 4 2 876.000000 877.000000 HEADU 1 6840 1 11 | 4 2 876.000000 877.000000 HEADU 6841 13680 2 12 | 5 2 1095.00000 1096.00000 HEADU 1 6840 1 13 | 5 2 1095.00000 1096.00000 HEADU 6841 13680 2 14 | 1 3 365.000000 1461.00000 HEADU 1 6840 1 15 | 1 3 365.000000 1461.00000 HEADU 6841 13680 2 16 | 2 3 730.000000 1826.00000 HEADU 1 6840 1 17 | 2 3 730.000000 1826.00000 HEADU 6841 13680 2 18 | 3 3 1095.00000 2191.00000 HEADU 1 6840 1 19 | 3 3 1095.00000 2191.00000 HEADU 6841 13680 2 20 | 4 3 1460.00000 2556.00000 HEADU 1 6840 1 21 | 4 3 1460.00000 2556.00000 HEADU 6841 13680 2 22 | 5 3 1825.00000 2921.00000 HEADU 1 6840 1 23 | 5 3 1825.00000 2921.00000 HEADU 6841 13680 2 24 | 1 4 2190.00000 5111.00000 HEADU 1 6840 1 25 | 1 4 2190.00000 5111.00000 HEADU 6841 13680 2 26 | 2 4 4380.00000 7301.00000 HEADU 1 6840 1 27 | 2 4 4380.00000 7301.00000 HEADU 6841 13680 2 28 | 3 4 6570.00000 9491.00000 HEADU 1 6840 1 29 | 3 4 6570.00000 9491.00000 HEADU 6841 13680 2 30 | 4 4 8760.00000 11681.0000 HEADU 1 6840 1 31 | 4 4 8760.00000 11681.0000 HEADU 6841 13680 2 32 | 5 4 10950.0000 13871.0000 HEADU 1 6840 1 33 | 5 4 10950.0000 13871.0000 HEADU 6841 13680 2 34 | -------------------------------------------------------------------------------- /tests/data/driver1c_r.out.std: -------------------------------------------------------------------------------- 1 | KSTP KPER TEXT NVAL INT1 ICODE IMETH DELT PERTIM TOTIM 2 | 1 1 CONSTANT HEAD 13680 1 1 3 | 1 1 FLOW JA FACE 81416 1 1 4 | 1 1 DRAINS 13680 1 1 5 | 1 1 RIVER LEAKAGE 13680 1 1 6 | 1 2 STORAGE 13680 1 1 7 | 1 2 CONSTANT HEAD 13680 1 1 8 | 1 2 FLOW JA FACE 81416 1 1 9 | 1 2 WELLS 13680 1 1 10 | 1 2 DRAINS 13680 1 1 11 | 1 2 RIVER LEAKAGE 13680 1 1 12 | 2 2 STORAGE 13680 1 1 13 | 2 2 CONSTANT HEAD 13680 1 1 14 | 2 2 FLOW JA FACE 81416 1 1 15 | 2 2 WELLS 13680 1 1 16 | 2 2 DRAINS 13680 1 1 17 | 2 2 RIVER LEAKAGE 13680 1 1 18 | -------------------------------------------------------------------------------- /tests/data/driver1d_r.out.std: -------------------------------------------------------------------------------- 1 | KSTP KPER TEXT NCOL NROW NLAY IMETH DELT PERTIM TOTIM TXT1ID1 TXT2ID1 TXT1ID2 TXT2ID2 2 | 1 1 FLOW-JA-FACE 12300 1 -1 1 2.00000000 2.00000000 2.00000000 3 | 1 1 STORAGE-AQUEOUS 50 50 -1 1 2.00000000 2.00000000 2.00000000 4 | 1 1 SOURCE-SINK MIX 50 50 -1 6 2.00000000 2.00000000 2.00000000 SVA_TM_T SVA_TM_T SVA_TM_T SSM 5 | 2 1 FLOW-JA-FACE 12300 1 -1 1 2.00000000 4.00000000 4.00000000 6 | 2 1 STORAGE-AQUEOUS 50 50 -1 1 2.00000000 4.00000000 4.00000000 7 | 2 1 SOURCE-SINK MIX 50 50 -1 6 2.00000000 4.00000000 4.00000000 SVA_TM_T SVA_TM_T SVA_TM_T SSM 8 | -------------------------------------------------------------------------------- /tests/data/driver1e.out.std: -------------------------------------------------------------------------------- 1 | KSTP KPER PERTIM TOTIM TEXT NCPL INT1 ILAY 2 | 1 1 1.00000000 1.00000000 HEAD 121 1 1 3 | -------------------------------------------------------------------------------- /tests/data/driver1f.out.std: -------------------------------------------------------------------------------- 1 | KSTP KPER TEXT NCPL INT1 INT2 IMETH DELT PERTIM TOTIM TXT1ID1 TXT2ID1 TXT1ID2 TXT2ID2 2 | 1 1 FLOW-JA-FACE 601 1 -1 1 1.00000000 1.00000000 1.00000000 3 | 1 1 DATA-SPDIS 121 1 -1 6 1.00000000 1.00000000 1.00000000 EX-GWF-U1DISV NPF EX-GWF-U1DISV NPF 4 | 1 1 CHD 121 1 -1 6 1.00000000 1.00000000 1.00000000 EX-GWF-U1DISV EX-GWF-U1DISV EX-GWF-U1DISV CHD-LEFT 5 | 1 1 CHD 121 1 -1 6 1.00000000 1.00000000 1.00000000 EX-GWF-U1DISV EX-GWF-U1DISV EX-GWF-U1DISV CHD-RIGHT 6 | -------------------------------------------------------------------------------- /tests/data/ex-gwf-disvmesh.cbc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pypest/pypestutils/7cf08f36ba09c38580c0b38b08bcfbc0fdeb55bb/tests/data/ex-gwf-disvmesh.cbc -------------------------------------------------------------------------------- /tests/data/ex-gwf-sfr-p01b.sfr.bud: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pypest/pypestutils/7cf08f36ba09c38580c0b38b08bcfbc0fdeb55bb/tests/data/ex-gwf-sfr-p01b.sfr.bud -------------------------------------------------------------------------------- /tests/data/ex-gwf-u1disv.cbc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pypest/pypestutils/7cf08f36ba09c38580c0b38b08bcfbc0fdeb55bb/tests/data/ex-gwf-u1disv.cbc -------------------------------------------------------------------------------- /tests/data/ex-gwf-u1disv.hds: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pypest/pypestutils/7cf08f36ba09c38580c0b38b08bcfbc0fdeb55bb/tests/data/ex-gwf-u1disv.hds -------------------------------------------------------------------------------- /tests/data/hd1h.dis.grb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pypest/pypestutils/7cf08f36ba09c38580c0b38b08bcfbc0fdeb55bb/tests/data/hd1h.dis.grb -------------------------------------------------------------------------------- /tests/data/hd1h_r.hds: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pypest/pypestutils/7cf08f36ba09c38580c0b38b08bcfbc0fdeb55bb/tests/data/hd1h_r.hds -------------------------------------------------------------------------------- /tests/data/heads_interp1_sgl.dat.std: -------------------------------------------------------------------------------- 1 | well01 1.00000000 1.100000000E+30 2 | well02 1.00000000 5.12286734 3 | well03 1.00000000 4.22284207 4 | well04 1.00000000 1.100000000E+30 5 | well05 1.00000000 3.56402663 6 | well06 1.00000000 2.66401309 7 | well07 1.00000000 1.100000000E+30 8 | well08 1.00000000 1.100000000E+30 9 | well09 1.00000000 1.10516898 10 | well10 1.00000000 1.100000000E+30 11 | well11 1.00000000 1.100000000E+30 12 | well12 1.00000000 1.100000000E+30 13 | -------------------------------------------------------------------------------- /tests/data/inflow_zones.dat: -------------------------------------------------------------------------------- 1 | 1 3 2 | 2 2 3 | 4 | -------------------------------------------------------------------------------- /tests/data/inflows.dat.std: -------------------------------------------------------------------------------- 1 | ZONENUMBER KSTP KPER SIMTIME SIMFLOW 2 | 2 1 1 2628000.00 0.00000000 3 | 2 15 2 5256000.00 0.00000000 4 | 2 15 3 7884000.00 0.00000000 5 | 2 15 4 10512000.0 0.00000000 6 | 2 15 5 13140000.0 0.00000000 7 | 2 15 6 15768000.0 0.00000000 8 | 2 15 7 18396000.0 0.00000000 9 | 2 15 8 21024000.0 0.00000000 10 | 2 15 9 23652000.0 0.00000000 11 | 2 15 10 26280000.0 0.00000000 12 | 2 15 11 28908000.0 0.00000000 13 | 2 15 12 31536000.0 0.00000000 14 | 2 15 13 34164000.0 0.00000000 15 | 2 15 14 36792000.0 0.00000000 16 | 2 15 15 39420000.0 0.00000000 17 | 2 15 16 42048000.0 0.00000000 18 | 2 15 17 44676000.0 0.00000000 19 | 2 15 18 47304000.0 0.00000000 20 | 2 15 19 49932000.0 0.00000000 21 | 2 15 20 52560000.0 0.00000000 22 | 2 15 21 55188000.0 0.00000000 23 | 2 15 22 57816000.0 0.00000000 24 | 2 15 23 60444000.0 0.00000000 25 | 2 15 24 63072000.0 0.00000000 26 | 3 1 1 2628000.00 25.0000000 27 | 3 15 2 5256000.00 25.0000000 28 | 3 15 3 7884000.00 25.0000000 29 | 3 15 4 10512000.0 25.0000000 30 | 3 15 5 13140000.0 25.0000000 31 | 3 15 6 15768000.0 25.0000000 32 | 3 15 7 18396000.0 25.0000000 33 | 3 15 8 21024000.0 25.0000000 34 | 3 15 9 23652000.0 25.0000000 35 | 3 15 10 26280000.0 25.0000000 36 | 3 15 11 28908000.0 25.0000000 37 | 3 15 12 31536000.0 25.0000000 38 | 3 15 13 34164000.0 25.0000000 39 | 3 15 14 36792000.0 25.0000000 40 | 3 15 15 39420000.0 25.0000000 41 | 3 15 16 42048000.0 25.0000000 42 | 3 15 17 44676000.0 25.0000000 43 | 3 15 18 47304000.0 25.0000000 44 | 3 15 19 49932000.0 25.0000000 45 | 3 15 20 52560000.0 25.0000000 46 | 3 15 21 55188000.0 25.0000000 47 | 3 15 22 57816000.0 25.0000000 48 | 3 15 23 60444000.0 25.0000000 49 | 3 15 24 63072000.0 25.0000000 50 | -------------------------------------------------------------------------------- /tests/data/lock_bore.csv: -------------------------------------------------------------------------------- 1 | 14320084A,441427.42,6956801.878,1 2 | 14320086A,442086.588,6956651.159,1 3 | 14320090A,442910.345,6956501.174,1 4 | 14320101A,441731.84,6956249.461,1 5 | 14320109A,443283.46,6958872.222,1 6 | 14320110A,443748.098,6959274.376,1 7 | 14320121A,441350.42,6955693.772,1 8 | 14320124A,440637.621,6955598.025,1 9 | 14320129A,439896.947,6955594.412,1 10 | 14320130A,440063.65,6955164.441,1 11 | 14320131A,440477.814,6954612.591,1 12 | 14320140A,439336.58,6952422.268,1 13 | 14320165A,428175.496,6952177.182,1 14 | 14320277A,438377.213,6946878.706,1 15 | 14320312A,434507.716,6942550.564,1 16 | 14320313A,435393.439,6946063.223,1 17 | 14320321A,439077.446,6943897.43,1 18 | 14320324A,439296.695,6943898.524,1 19 | 14320325A,439461.285,6943868.571,1 20 | 14320327A,439409.838,6943191.351,1 21 | 14320331A,438137.924,6940015.522,1 22 | 14320332A,438412.365,6939924.599,1 23 | 14320336A,437431.285,6938904.14,1 24 | 14320337A,437869.919,6938844.845,1 25 | 14320339A,437553.823,6936381.51,1 26 | 14320340A,437855.263,6936352.284,1 27 | 14320348A,431595.385,6953673.809,1 28 | 14320349A,431488.084,6953242.412,1 29 | 14320351A,431379.582,6953026.405,1 30 | 14320372A,437702,6939693,1 31 | 14320379A,434939.195,6954153.61,1 32 | 14320405A,429514,6952499,1 33 | 14320437A,443862.792,6958197.943,1 34 | 14320445A,427336.105,6950356.701,1 35 | 14320450A,438843.921,6941280.711,1 36 | 14320451A,439033.104,6941804.77,1 37 | 14320457A,429104.565,6952767.26,1 38 | 14320463A,427378.519,6952449.419,1 39 | 14320475A,438949.512,6942081.292,1 40 | 14320480A,442553.41,6956561.046,1 41 | 14320483A,438731.528,6952757.73,1 42 | 14320491A,426512.913,6950444.093,1 43 | 14320503A,432208.533,6951923.264,1 44 | 14320510A,438885.449,6943927.24,1 45 | 14320517A,432076.197,6951060.935,1 46 | 14320518A,432287.398,6952539.125,1 47 | 14320519A,432340.548,6952847.131,1 48 | 14320520A,433222.734,6952021.159,1 49 | 14320521A,435396.923,6950586.6,1 50 | 14320525A,437024.298,6948748.835,1 51 | 14320526A,436637.106,6949393.024,1 52 | 14320527A,439151.834,6945467.126,1 53 | 14320528A,437085.475,6947518.308,1 54 | 14320529A,435949.382,6949820.232,1 55 | 14320530A,437801.545,6952260.703,1 56 | 14320531A,436713.465,6950531.947,1 57 | 14320534A,443968.747,6959029.224,1 58 | 14320538A,439313.383,6946052.581,1 59 | 14320542A,436210.949,6946990.66,1 60 | 14320545A,438783.707,6942357.401,1 61 | 14320547A,438850.258,6940019.121,1 62 | 14320550A,440045.566,6953256.573,1 63 | 14320551A,438695.931,6954388.401,1 64 | 14320553A,438658.32,6940048.927,1 65 | 14320558A,444171.761,6956630.07,1 66 | 14320594A,430041.819,6951941.831,1 67 | 14320595A,431115.193,6951270.956,1 68 | 14320596A,432983.841,6950573.606,1 69 | 14320597A,433116.57,6951374.384,1 70 | 14320599A,435459.379,6954340.99,1 71 | 14320600A,444458.624,6959923.789,1 72 | 14320604A,446592.661,6961410.228,1 73 | 14320605A,446650.896,6960641.231,1 74 | 14320633A,445169.362,6960542.389,1 75 | 14320642A,447754.006,6959384.409,1 76 | 14320643A,448055.331,6959508.769,1 77 | 14320651A,445501.279,6959959.236,1 78 | 14320652A,440113.246,6956241.654,1 79 | 14320654A,435593.29,6954957.113,1 80 | 14320655A,439407.58,6954699.652,1 81 | 14320656A,444709.486,6959063.357,1 82 | 14320658A,437278.483,6947303.904,1 83 | 14320659A,436372.38,6947576.154,1 84 | 14320660A,436134.185,6945944.038,1 85 | 14320662A,440058.319,6945071.592,1 86 | 14320665A,438649.795,6947187.789,1 87 | 14320666A,438486.244,6947002.34,1 88 | 14320667A,438675.972,6947434.089,1 89 | 14320668A,438729.41,6947711.296,1 90 | 14320669A,437149.039,6951149.614,1 91 | 14320670A,437369.523,6950935.349,1 92 | 14320672A,438217.584,6951339.687,1 93 | 14320673A,437997.889,6951400.116,1 94 | 14320674A,437804.362,6951706.842,1 95 | 14320746A,436709.641,6951270.431,1 96 | 14320776A,433875.269,6953070.922,1 97 | 14320779A,436643.16,6953516.363,1 98 | 14320780A,438069.096,6953585.205,1 99 | 14320787A,433943,6952829,1 100 | 14320788A,438233,6954427,1 101 | 14320809A,430921,6951984,1 102 | 14320916A,436641,6938204,1 103 | 55889A,434106,6953701,1 104 | 66443A,439339.425,6940821.621,1 105 | 73523A,443650.504,6956627.683,1 106 | 98005A,443127.534,6956994.511,1 107 | 98109A,436084,6953531,1 108 | 98199A,438749.251,6954696.375,1 109 | -------------------------------------------------------------------------------- /tests/data/lock_heads_wells_time_interp_r.dat.std: -------------------------------------------------------------------------------- 1 | 14320084a 1.00000000 53.7924075 2 | 14320084a 10045.0000 1.100000000E+30 3 | 14320086a 1054.00000 1.100000000E+30 4 | 14320086a 2152.50000 1.100000000E+30 5 | 14320086a 2807.20000 1.100000000E+30 6 | 14320086a 3689.40000 1.100000000E+30 7 | 14320086a 5000.00000 1.100000000E+30 8 | 14320086a 6022.20000 1.100000000E+30 9 | 14320086a 7523.10000 1.100000000E+30 10 | 14320086a 8699.90000 1.100000000E+30 11 | 14320086a 9688.80000 1.100000000E+30 12 | 14320090a 102.300000 56.0675794 13 | 14320090a 973.200000 1.100000000E+30 14 | 14320090a 2134.60000 1.100000000E+30 15 | 14320090a 2808.00000 1.100000000E+30 16 | 14320090a 4019.90000 1.100000000E+30 17 | 14320090a 5187.30000 1.100000000E+30 18 | 14320090a 6152.20000 1.100000000E+30 19 | 14320090a 7187.00000 1.100000000E+30 20 | 14320090a 8443.50000 1.100000000E+30 21 | 14320090a 10045.0000 1.100000000E+30 22 | 14320140a 0.00000000 62.2332631 23 | 14320140a 1323.90000 1.100000000E+30 24 | 14320140a 2334.60000 1.100000000E+30 25 | 14320140a 3682.90000 1.100000000E+30 26 | 14320140a 10050.0000 1.100000000E+30 27 | 14320379a 1000.00000 1.100000000E+30 28 | 14320379a 2000.00000 1.100000000E+30 29 | 14320379a 3000.00000 1.100000000E+30 30 | 14320379a 4000.00000 1.100000000E+30 31 | 14320379a 5000.00000 1.100000000E+30 32 | 14320379a 6000.00000 1.100000000E+30 33 | 14320379a 7000.00000 1.100000000E+30 34 | 14320379a 8000.00000 1.100000000E+30 35 | 14320379a 9000.00000 1.100000000E+30 36 | 14320379a 10000.0000 1.100000000E+30 37 | 14320542a 640.200000 1.100000000E+30 38 | 14320542a 792.000000 1.100000000E+30 39 | 14320542a 2102.90000 1.100000000E+30 40 | 14320542a 3067.00000 1.100000000E+30 41 | 14320542a 5234.50000 1.100000000E+30 42 | 14320542a 7377.70000 1.100000000E+30 43 | 14320542a 9423.30000 1.100000000E+30 44 | 14320542a 10043.9000 1.100000000E+30 45 | 98199a 11.1000000 58.2701071 46 | 98199a 1845.10000 1.100000000E+30 47 | 98199a 3932.00000 1.100000000E+30 48 | 98199a 5935.00000 1.100000000E+30 49 | 98199a 7777.70000 1.100000000E+30 50 | 98199a 9599.90000 1.100000000E+30 51 | 98199a 10045.0000 1.100000000E+30 52 | -------------------------------------------------------------------------------- /tests/data/lock_r.hds: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pypest/pypestutils/7cf08f36ba09c38580c0b38b08bcfbc0fdeb55bb/tests/data/lock_r.hds -------------------------------------------------------------------------------- /tests/data/lockwells_meastime.dat: -------------------------------------------------------------------------------- 1 | 14320084A 1.0 2 | 14320084A 10045.0 3 | 14320086A 1054.0 4 | 14320086A 2152.5 5 | 14320086A 2807.2 6 | 14320086A 3689.4 7 | 14320086A 5000.0 8 | 14320086A 6022.2 9 | 14320086A 7523.1 10 | 14320086A 8699.9 11 | 14320086A 9688.8 12 | 14320090A 102.3 13 | 14320090A 973.2 14 | 14320090A 2134.6 15 | 14320090A 2808.0 16 | 14320090A 4019.9 17 | 14320090A 5187.3 18 | 14320090A 6152.2 19 | 14320090A 7187.0 20 | 14320090A 8443.5 21 | 14320090A 10045.0 22 | 14320140A 0.0 23 | 14320140A 1323.9 24 | 14320140A 2334.6 25 | 14320140A 3682.9 26 | 14320140A 10050.0 27 | 14320379A 1000.0 28 | 14320379A 2000.0 29 | 14320379A 3000.0 30 | 14320379A 4000.0 31 | 14320379A 5000.0 32 | 14320379A 6000.0 33 | 14320379A 7000.0 34 | 14320379A 8000.0 35 | 14320379A 9000.0 36 | 14320379A 10000.0 37 | 14320542A 640.2 38 | 14320542A 792.0 39 | 14320542A 2102.9 40 | 14320542A 3067.0 41 | 14320542A 5234.5 42 | 14320542A 7377.7 43 | 14320542A 9423.3 44 | 14320542A 10043.9 45 | 98199A 11.1 46 | 98199A 1845.1 47 | 98199A 3932.0 48 | 98199A 5935.0 49 | 98199A 7777.7 50 | 98199A 9599.9 51 | 98199A 10045.0 52 | -------------------------------------------------------------------------------- /tests/data/lockyer.spc: -------------------------------------------------------------------------------- 1 | 100 150 2 | 421172.3 6945479 56 3 | 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 4 | 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 5 | 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 6 | 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 7 | 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 8 | 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 9 | 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 10 | 200 200 200 200 200 200 200 200 200 200 11 | 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 12 | 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 13 | 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 14 | 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 15 | 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 200 16 | 420000 6930000 17 | 460000 6980000 18 | 1 19 | -------------------------------------------------------------------------------- /tests/data/nfseg.cbb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pypest/pypestutils/7cf08f36ba09c38580c0b38b08bcfbc0fdeb55bb/tests/data/nfseg.cbb -------------------------------------------------------------------------------- /tests/data/nfseg.cbb.contents.std: -------------------------------------------------------------------------------- 1 | KSTP KPER TEXT NCOL NROW NLAY IMETH DELT PERTIM TOTIM 2 | 1 1 ET 704 752 7 3 | 1 1 RECHARGE 704 752 7 4 | 1 2 ET 704 752 7 5 | 1 2 RECHARGE 704 752 7 6 | -------------------------------------------------------------------------------- /tests/data/nfseg_rech.dat.std: -------------------------------------------------------------------------------- 1 | ZONENUMBER KSTP KPER SIMTIME SIMFLOW 2 | 1 1 1 -1.00000000 7998429.34 3 | 1 1 2 -1.00000000 13403337.3 4 | 2 1 1 -1.00000000 7917101.73 5 | 2 1 2 -1.00000000 12143338.1 6 | 3 1 1 -1.00000000 13637685.6 7 | 3 1 2 -1.00000000 22599659.9 8 | -------------------------------------------------------------------------------- /tests/data/p09/gwf-p09-mf6.chd: -------------------------------------------------------------------------------- 1 | # File generated by Flopy version 3.7.0.dev0 on 05/14/2024 at 15:14:54. 2 | BEGIN options 3 | auxiliary CONCENTRATION 4 | END options 5 | 6 | BEGIN dimensions 7 | MAXBOUND 28 8 | END dimensions 9 | 10 | BEGIN period 1 11 | 1 1 1 2.50000000E+02 0.00000000E+00 12 | 1 18 1 2.00000000E+01 0.00000000E+00 13 | 1 1 2 2.50000000E+02 0.00000000E+00 14 | 1 18 2 2.25000000E+01 0.00000000E+00 15 | 1 1 3 2.50000000E+02 0.00000000E+00 16 | 1 18 3 2.50000000E+01 0.00000000E+00 17 | 1 1 4 2.50000000E+02 0.00000000E+00 18 | 1 18 4 2.75000000E+01 0.00000000E+00 19 | 1 1 5 2.50000000E+02 0.00000000E+00 20 | 1 18 5 3.00000000E+01 0.00000000E+00 21 | 1 1 6 2.50000000E+02 0.00000000E+00 22 | 1 18 6 3.25000000E+01 0.00000000E+00 23 | 1 1 7 2.50000000E+02 0.00000000E+00 24 | 1 18 7 3.50000000E+01 0.00000000E+00 25 | 1 1 8 2.50000000E+02 0.00000000E+00 26 | 1 18 8 3.75000000E+01 0.00000000E+00 27 | 1 1 9 2.50000000E+02 0.00000000E+00 28 | 1 18 9 4.00000000E+01 0.00000000E+00 29 | 1 1 10 2.50000000E+02 0.00000000E+00 30 | 1 18 10 4.25000000E+01 0.00000000E+00 31 | 1 1 11 2.50000000E+02 0.00000000E+00 32 | 1 18 11 4.50000000E+01 0.00000000E+00 33 | 1 1 12 2.50000000E+02 0.00000000E+00 34 | 1 18 12 4.75000000E+01 0.00000000E+00 35 | 1 1 13 2.50000000E+02 0.00000000E+00 36 | 1 18 13 5.00000000E+01 0.00000000E+00 37 | 1 1 14 2.50000000E+02 0.00000000E+00 38 | 1 18 14 5.25000000E+01 0.00000000E+00 39 | END period 1 40 | 41 | -------------------------------------------------------------------------------- /tests/data/p09/gwf-p09-mf6.dis: -------------------------------------------------------------------------------- 1 | # File generated by Flopy version 3.7.0.dev0 on 05/14/2024 at 15:14:54. 2 | BEGIN options 3 | LENGTH_UNITS meters 4 | END options 5 | 6 | BEGIN dimensions 7 | NLAY 1 8 | NROW 18 9 | NCOL 14 10 | END dimensions 11 | 12 | BEGIN griddata 13 | delr 14 | CONSTANT 100.00000000 15 | delc 16 | CONSTANT 100.00000000 17 | top 18 | CONSTANT 0.00000000 19 | botm 20 | CONSTANT -10.00000000 21 | idomain 22 | INTERNAL FACTOR 1 23 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 24 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 25 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 26 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 27 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 28 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 29 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 30 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 31 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 32 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 33 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 34 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 35 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 36 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 37 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 38 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 39 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 40 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 41 | END griddata 42 | 43 | -------------------------------------------------------------------------------- /tests/data/p09/gwf-p09-mf6.dis.grb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pypest/pypestutils/7cf08f36ba09c38580c0b38b08bcfbc0fdeb55bb/tests/data/p09/gwf-p09-mf6.dis.grb -------------------------------------------------------------------------------- /tests/data/p09/gwf-p09-mf6.hds: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pypest/pypestutils/7cf08f36ba09c38580c0b38b08bcfbc0fdeb55bb/tests/data/p09/gwf-p09-mf6.hds -------------------------------------------------------------------------------- /tests/data/p09/gwf-p09-mf6.hds.all.csv: -------------------------------------------------------------------------------- 1 | ,site1 2 | 2000-04-10,0.9201481898615829 3 | 2000-07-19,1.8174624075062107 4 | 2000-10-27,2.673376944047418 5 | 2001-02-04,3.478759967373495 6 | 2001-05-15,4.230300686465257 7 | 2001-08-23,4.928176343388853 8 | 2001-12-01,5.574558339297976 9 | 2002-03-11,6.172667022899383 10 | 2002-06-19,6.726183761086104 11 | 2002-09-27,7.238894344063356 12 | 2003-01-05,7.714480997061258 13 | 2003-04-15,8.156408812297478 14 | 2003-07-24,8.567871250830635 15 | 2003-11-01,8.951771778224016 16 | 2004-02-09,9.310726863434926 17 | 2004-05-19,9.647080926047904 18 | 2004-08-27,9.962927316107594 19 | 2004-12-05,10.26013168493022 20 | 2005-03-15,10.540355572727687 21 | 2005-06-23,10.805078976632442 22 | 2005-10-01,11.055621253955753 23 | 2006-01-09,11.293160081237884 24 | 2006-04-19,11.518748409603724 25 | 2006-07-28,11.7333294835427 26 | -------------------------------------------------------------------------------- /tests/data/p09/gwf-p09-mf6.ic: -------------------------------------------------------------------------------- 1 | # File generated by Flopy version 3.7.0.dev0 on 05/14/2024 at 15:14:54. 2 | BEGIN griddata 3 | strt 4 | INTERNAL FACTOR 1.0 5 | 250.00000000 250.00000000 250.00000000 250.00000000 250.00000000 250.00000000 250.00000000 250.00000000 250.00000000 250.00000000 250.00000000 250.00000000 250.00000000 250.00000000 6 | 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 7 | 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 8 | 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 9 | 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 10 | 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 11 | 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 12 | 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 13 | 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 14 | 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 15 | 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 16 | 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 17 | 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 18 | 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 19 | 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 20 | 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 21 | 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 0.00000000 22 | 20.00000000 22.50000000 25.00000000 27.50000000 30.00000000 32.50000000 35.00000000 37.50000000 40.00000000 42.50000000 45.00000000 47.50000000 50.00000000 52.50000000 23 | END griddata 24 | 25 | -------------------------------------------------------------------------------- /tests/data/p09/gwf-p09-mf6.ims: -------------------------------------------------------------------------------- 1 | # File generated by Flopy version 3.7.0.dev0 on 05/14/2024 at 15:14:54. 2 | BEGIN options 3 | PRINT_OPTION summary 4 | END options 5 | 6 | BEGIN nonlinear 7 | OUTER_DVCLOSE 1.00000000E-06 8 | OUTER_MAXIMUM 100 9 | UNDER_RELAXATION none 10 | END nonlinear 11 | 12 | BEGIN linear 13 | INNER_MAXIMUM 300 14 | INNER_DVCLOSE 1.00000000E-06 15 | inner_rclose 1.00000000E-06 16 | LINEAR_ACCELERATION cg 17 | RELAXATION_FACTOR 1.00000000 18 | SCALING_METHOD none 19 | REORDERING_METHOD none 20 | END linear 21 | 22 | -------------------------------------------------------------------------------- /tests/data/p09/gwf-p09-mf6.nam: -------------------------------------------------------------------------------- 1 | # File generated by Flopy version 3.7.0.dev0 on 05/14/2024 at 15:14:54. 2 | BEGIN options 3 | SAVE_FLOWS 4 | END options 5 | 6 | BEGIN packages 7 | DIS6 gwf-p09-mf6.dis dis 8 | IC6 gwf-p09-mf6.ic ic 9 | NPF6 gwf-p09-mf6.npf npf 10 | STO6 gwf-p09-mf6.sto sto 11 | CHD6 gwf-p09-mf6.chd chd-1 12 | WEL6 gwf-p09-mf6.wel wel-1 13 | OC6 gwf-p09-mf6.oc oc 14 | END packages 15 | 16 | -------------------------------------------------------------------------------- /tests/data/p09/gwf-p09-mf6.oc: -------------------------------------------------------------------------------- 1 | # File generated by Flopy version 3.7.0.dev0 on 05/14/2024 at 15:14:54. 2 | BEGIN options 3 | BUDGET FILEOUT gwf-p09-mf6.bud 4 | HEAD FILEOUT gwf-p09-mf6.hds 5 | HEAD PRINT_FORMAT COLUMNS 10 WIDTH 15 DIGITS 6 GENERAL 6 | END options 7 | 8 | BEGIN period 1 9 | SAVE HEAD LAST 10 | SAVE BUDGET LAST 11 | PRINT HEAD LAST 12 | PRINT BUDGET LAST 13 | END period 1 14 | 15 | -------------------------------------------------------------------------------- /tests/data/p09/gwf-p09-mf6.sto: -------------------------------------------------------------------------------- 1 | # File generated by Flopy version 3.7.0.dev0 on 05/14/2024 at 15:14:54. 2 | BEGIN options 3 | END options 4 | 5 | BEGIN griddata 6 | iconvert 7 | CONSTANT 0 8 | ss 9 | CONSTANT 1.00000000E-05 10 | sy 11 | CONSTANT 0.15000000 12 | END griddata 13 | 14 | -------------------------------------------------------------------------------- /tests/data/p09/gwf-p09-mf6.wel: -------------------------------------------------------------------------------- 1 | # File generated by Flopy version 3.7.0.dev0 on 05/14/2024 at 15:14:54. 2 | BEGIN options 3 | auxiliary CONCENTRATION 4 | PRINT_INPUT 5 | PRINT_FLOWS 6 | END options 7 | 8 | BEGIN dimensions 9 | MAXBOUND 2 10 | END dimensions 11 | 12 | BEGIN period 1 13 | 1 4 7 1.00000000E-03 5.78700000E+01 14 | 1 11 7 -1.89000000E-02 0.00000000E+00 15 | END period 1 16 | 17 | BEGIN period 2 18 | 1 4 7 1.00000000E-03 0.00000000E+00 19 | 1 11 7 -1.89000000E-02 0.00000000E+00 20 | END period 2 21 | 22 | -------------------------------------------------------------------------------- /tests/data/p09/gwt-p09-mf6.adv: -------------------------------------------------------------------------------- 1 | # File generated by Flopy version 3.7.0.dev0 on 05/14/2024 at 15:14:54. 2 | BEGIN options 3 | SCHEME upstream 4 | END options 5 | 6 | -------------------------------------------------------------------------------- /tests/data/p09/gwt-p09-mf6.dis: -------------------------------------------------------------------------------- 1 | # File generated by Flopy version 3.7.0.dev0 on 05/14/2024 at 15:14:54. 2 | BEGIN options 3 | END options 4 | 5 | BEGIN dimensions 6 | NLAY 1 7 | NROW 18 8 | NCOL 14 9 | END dimensions 10 | 11 | BEGIN griddata 12 | delr 13 | CONSTANT 100.00000000 14 | delc 15 | CONSTANT 100.00000000 16 | top 17 | CONSTANT 0.00000000 18 | botm 19 | CONSTANT -10.00000000 20 | idomain 21 | INTERNAL FACTOR 1 22 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 23 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 24 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 25 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 26 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 27 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 28 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 29 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 30 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 31 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 32 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 33 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 34 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 35 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 36 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 37 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 38 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 39 | 1 1 1 1 1 1 1 1 1 1 1 1 1 1 40 | END griddata 41 | 42 | -------------------------------------------------------------------------------- /tests/data/p09/gwt-p09-mf6.dsp: -------------------------------------------------------------------------------- 1 | # File generated by Flopy version 3.7.0.dev0 on 05/14/2024 at 15:14:54. 2 | BEGIN options 3 | END options 4 | 5 | BEGIN griddata 6 | alh 7 | CONSTANT 20.00000000 8 | ath1 9 | CONSTANT 4.00000000 10 | END griddata 11 | 12 | -------------------------------------------------------------------------------- /tests/data/p09/gwt-p09-mf6.ic: -------------------------------------------------------------------------------- 1 | # File generated by Flopy version 3.7.0.dev0 on 05/14/2024 at 15:14:54. 2 | BEGIN griddata 3 | strt 4 | CONSTANT 0.00000000 5 | END griddata 6 | 7 | -------------------------------------------------------------------------------- /tests/data/p09/gwt-p09-mf6.ims: -------------------------------------------------------------------------------- 1 | # File generated by Flopy version 3.7.0.dev0 on 05/14/2024 at 15:14:54. 2 | BEGIN options 3 | PRINT_OPTION summary 4 | END options 5 | 6 | BEGIN nonlinear 7 | OUTER_DVCLOSE 1.00000000E-06 8 | OUTER_MAXIMUM 100 9 | UNDER_RELAXATION none 10 | END nonlinear 11 | 12 | BEGIN linear 13 | INNER_MAXIMUM 300 14 | INNER_DVCLOSE 1.00000000E-06 15 | inner_rclose 1.00000000E-06 16 | LINEAR_ACCELERATION bicgstab 17 | RELAXATION_FACTOR 1.00000000 18 | SCALING_METHOD none 19 | REORDERING_METHOD none 20 | END linear 21 | 22 | -------------------------------------------------------------------------------- /tests/data/p09/gwt-p09-mf6.mst: -------------------------------------------------------------------------------- 1 | # File generated by Flopy version 3.7.0.dev0 on 05/14/2024 at 15:14:54. 2 | BEGIN options 3 | END options 4 | 5 | BEGIN griddata 6 | porosity 7 | CONSTANT 0.0030000000 8 | END griddata 9 | 10 | -------------------------------------------------------------------------------- /tests/data/p09/gwt-p09-mf6.nam: -------------------------------------------------------------------------------- 1 | # File generated by Flopy version 3.7.0.dev0 on 05/14/2024 at 15:14:54. 2 | BEGIN options 3 | SAVE_FLOWS 4 | END options 5 | 6 | BEGIN packages 7 | DIS6 gwt-p09-mf6.dis dis 8 | IC6 gwt-p09-mf6.ic ic 9 | ADV6 gwt-p09-mf6.adv adv 10 | DSP6 gwt-p09-mf6.dsp dsp 11 | MST6 gwt-p09-mf6.mst mst 12 | SSM6 gwt-p09-mf6.ssm ssm 13 | OC6 gwt-p09-mf6.oc oc 14 | END packages 15 | 16 | -------------------------------------------------------------------------------- /tests/data/p09/gwt-p09-mf6.oc: -------------------------------------------------------------------------------- 1 | # File generated by Flopy version 3.7.0.dev0 on 05/14/2024 at 15:14:54. 2 | BEGIN options 3 | BUDGET FILEOUT gwt-p09-mf6.cbc 4 | CONCENTRATION FILEOUT gwt-p09-mf6.ucn 5 | CONCENTRATION PRINT_FORMAT COLUMNS 10 WIDTH 15 DIGITS 6 GENERAL 6 | END options 7 | 8 | BEGIN period 1 9 | SAVE CONCENTRATION LAST 10 | SAVE BUDGET LAST 11 | PRINT CONCENTRATION LAST 12 | PRINT BUDGET LAST 13 | END period 1 14 | 15 | -------------------------------------------------------------------------------- /tests/data/p09/gwt-p09-mf6.ssm: -------------------------------------------------------------------------------- 1 | # File generated by Flopy version 3.7.0.dev0 on 05/14/2024 at 15:14:54. 2 | BEGIN options 3 | PRINT_FLOWS 4 | END options 5 | 6 | BEGIN sources 7 | WEL-1 AUX CONCENTRATION 8 | CHD-1 AUX CONCENTRATION 9 | END sources 10 | 11 | -------------------------------------------------------------------------------- /tests/data/p09/gwt-p09-mf6.ucn: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pypest/pypestutils/7cf08f36ba09c38580c0b38b08bcfbc0fdeb55bb/tests/data/p09/gwt-p09-mf6.ucn -------------------------------------------------------------------------------- /tests/data/p09/gwt-p09-mf6.ucn.all.csv: -------------------------------------------------------------------------------- 1 | ,site1 2 | 2000-04-10,4.4353143291128874e-82 3 | 2000-07-19,5.918477463812964e-76 4 | 2000-10-27,-4.599533988825224e-72 5 | 2001-02-04,-1.786767028993061e-68 6 | 2001-05-15,-7.067315942313057e-66 7 | 2001-08-23,-8.537630062700176e-64 8 | 2001-12-01,-4.677262695826896e-62 9 | 2002-03-11,-1.4414109434879991e-60 10 | 2002-06-19,-2.8557803595129363e-59 11 | 2002-09-27,-3.9759484774471454e-58 12 | 2003-01-05,-4.139365523411823e-57 13 | 2003-04-15,-3.370367487892094e-56 14 | 2003-07-24,-2.2179862008872092e-55 15 | 2003-11-01,-1.2084975559895304e-54 16 | 2004-02-09,-5.545721192244058e-54 17 | 2004-05-19,-2.1668792722006044e-53 18 | 2004-08-27,-7.244221641879166e-53 19 | 2004-12-05,-2.0692914044296422e-52 20 | 2005-03-15,-5.017847066555784e-52 21 | 2005-06-23,-1.033088658715319e-51 22 | 2005-10-01,-1.9580242601831116e-51 23 | 2006-01-09,-4.902601642485831e-51 24 | 2006-04-19,-2.1439689316120016e-50 25 | 2006-07-28,-1.1060437885320614e-49 26 | -------------------------------------------------------------------------------- /tests/data/p09/mfsim.nam: -------------------------------------------------------------------------------- 1 | # File generated by Flopy version 3.7.0.dev0 on 05/14/2024 at 15:14:54. 2 | BEGIN options 3 | END options 4 | 5 | BEGIN timing 6 | TDIS6 temp.tdis 7 | END timing 8 | 9 | BEGIN models 10 | gwf6 gwf-p09-mf6.nam gwf-p09-mf6 11 | gwt6 gwt-p09-mf6.nam gwt-p09-mf6 12 | END models 13 | 14 | BEGIN exchanges 15 | GWF6-GWT6 p09-mf6.gwfgwt gwf-p09-mf6 gwt-p09-mf6 16 | END exchanges 17 | 18 | BEGIN solutiongroup 1 19 | ims6 gwf-p09-mf6.ims gwf-p09-mf6 20 | ims6 gwt-p09-mf6.ims gwt-p09-mf6 21 | END solutiongroup 1 22 | 23 | -------------------------------------------------------------------------------- /tests/data/p09/obs.csv: -------------------------------------------------------------------------------- 1 | ,site,x,y,layer,datetime 2 | 0,site1,101,221,1,2000-04-10 00:00:00.000000000 3 | 1,site1,101,221,1,2000-05-02 05:19:59.999999998 4 | 2,site1,101,221,1,2000-05-24 10:40:00.000000004 5 | 3,site1,101,221,1,2000-06-15 16:00:00.000000002 6 | 4,site1,101,221,1,2000-07-07 21:20:00.000000000 7 | 5,site1,101,221,1,2000-07-30 02:39:59.999999999 8 | 6,site1,101,221,1,2000-08-21 07:59:59.999999997 9 | 7,site1,101,221,1,2000-09-12 13:19:59.999999995 10 | 8,site1,101,221,1,2000-10-04 18:40:00.000000001 11 | 9,site1,101,221,1,2000-10-27 00:00:00.000000000 12 | -------------------------------------------------------------------------------- /tests/data/p09/obs_interp_fac.bin: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pypest/pypestutils/7cf08f36ba09c38580c0b38b08bcfbc0fdeb55bb/tests/data/p09/obs_interp_fac.bin -------------------------------------------------------------------------------- /tests/data/p09/obs_interp_fac.bln: -------------------------------------------------------------------------------- 1 | 5 0 "1" 2 | 50.0000 250.0000 3 | 150.0000 250.0000 4 | 150.0000 150.0000 5 | 50.0000 150.0000 6 | 50.0000 250.0000 7 | -------------------------------------------------------------------------------- /tests/data/p09/p09-mf6.gwfgwt: -------------------------------------------------------------------------------- 1 | # File generated by Flopy version 3.7.0.dev0 on 05/14/2024 at 15:14:54. 2 | -------------------------------------------------------------------------------- /tests/data/p09/temp.tdis: -------------------------------------------------------------------------------- 1 | # File generated by Flopy version 3.7.0.dev0 on 05/14/2024 at 15:14:54. 2 | BEGIN options 3 | TIME_UNITS seconds 4 | END options 5 | 6 | BEGIN dimensions 7 | NPER 24 8 | END dimensions 9 | 10 | BEGIN perioddata 11 | 100 1 1.00000000 12 | 100 1 1.00000000 13 | 100 1 1.00000000 14 | 100 1 1.00000000 15 | 100 1 1.00000000 16 | 100 1 1.00000000 17 | 100 1 1.00000000 18 | 100 1 1.00000000 19 | 100 1 1.00000000 20 | 100 1 1.00000000 21 | 100 1 1.00000000 22 | 100 1 1.00000000 23 | 100 1 1.00000000 24 | 100 1 1.00000000 25 | 100 1 1.00000000 26 | 100 1 1.00000000 27 | 100 1 1.00000000 28 | 100 1 1.00000000 29 | 100 1 1.00000000 30 | 100 1 1.00000000 31 | 100 1 1.00000000 32 | 100 1 1.00000000 33 | 100 1 1.00000000 34 | 100 1 1.00000000 35 | END perioddata 36 | 37 | -------------------------------------------------------------------------------- /tests/data/pp.dat: -------------------------------------------------------------------------------- 1 | point1 10573.878756612 20008.455612214 1 33.09472898 2 | point2 11670.518421482 20391.618868614 1 39.00021237 3 | point3 12456.663723407 21052.245172753 2 52.13744511 4 | point4 13328.69044487 21309.889431367 2 61.64696319 5 | point5 10917.404434764 19294.979203744 1 37.07478991 6 | point6 11518.57437153 19915.967929634 1 57.52001219 7 | point7 12403.813619076 20391.618868614 2 42.48673892 8 | point8 13222.990236208 20682.294442435 2 41.38308306 9 | point9 11564.81821282 18971.272314716 1 46.13677594 10 | point10 12370.782303869 19519.592147151 1 55.91406942 11 | point11 13090.86497538 20127.368346959 2 55.67195376 12 | point12 14055.379379423 20266.099870828 2 51.48889079 13 | -------------------------------------------------------------------------------- /tests/data/rchflow.dat.std: -------------------------------------------------------------------------------- 1 | ZONENUMBER KSTP KPER SIMTIME SIMFLOW 2 | 1 1 1 1.00000000 6.99850667 3 | 2 1 1 1.00000000 6.81615628 4 | 3 1 1 1.00000000 6.02087066 5 | 4 1 1 1.00000000 12135.0230 6 | 5 1 1 1.00000000 5.81944614 7 | 6 1 1 1.00000000 5.80001428 8 | 7 1 1 1.00000000 4.63840491 9 | -------------------------------------------------------------------------------- /tests/data/rect.spc: -------------------------------------------------------------------------------- 1 | 80 50 2 | 0.0 800.0 30.0 3 | 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10 4 | 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10 5 | 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10 6 | 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10 7 | 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10 8 | 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10 9 | 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10.0 10 10 | 11 | -------------------------------------------------------------------------------- /tests/data/rect_sgl.hds: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pypest/pypestutils/7cf08f36ba09c38580c0b38b08bcfbc0fdeb55bb/tests/data/rect_sgl.hds -------------------------------------------------------------------------------- /tests/data/rectmodel.spc: -------------------------------------------------------------------------------- 1 | 100 200 2 | 10000.0 20000.0 30 3 | 200*20 4 | 100*20 5 | -------------------------------------------------------------------------------- /tests/data/sop.cbc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pypest/pypestutils/7cf08f36ba09c38580c0b38b08bcfbc0fdeb55bb/tests/data/sop.cbc -------------------------------------------------------------------------------- /tests/data/sop_chd_flows.dat.std: -------------------------------------------------------------------------------- 1 | ZONENUMBER KSTP KPER SIMTIME SIMFLOW 2 | 21 1 1 1.00000000 246.320712 3 | 22 1 1 1.00000000 -248.254950 4 | 41 1 1 1.00000000 63.2943636 5 | 42 1 1 1.00000000 -61.3608273 6 | -------------------------------------------------------------------------------- /tests/data/sop_flow_contents.dat.std: -------------------------------------------------------------------------------- 1 | KSTP KPER TEXT NCOL NROW NLAY IMETH DELT PERTIM TOTIM TXT1ID1 TXT2ID1 TXT1ID2 TXT2ID2 2 | 1 1 FLOW-JA-FACE 777200 1 -1 1 1.00000000 1.00000000 1.00000000 3 | 1 1 CHD 150 200 -4 6 1.00000000 1.00000000 1.00000000 BLOCKMODEL BLOCKMODEL BLOCKMODEL CHD 4 | -------------------------------------------------------------------------------- /tests/data/sva_tm_r.hds: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pypest/pypestutils/7cf08f36ba09c38580c0b38b08bcfbc0fdeb55bb/tests/data/sva_tm_r.hds -------------------------------------------------------------------------------- /tests/data/sva_tm_t_r.cbc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pypest/pypestutils/7cf08f36ba09c38580c0b38b08bcfbc0fdeb55bb/tests/data/sva_tm_t_r.cbc -------------------------------------------------------------------------------- /tests/data/umodel_obstimes.dat: -------------------------------------------------------------------------------- 1 | zone5 1.00000000 2 | zone5 5.82550526 3 | zone5 15.0788202 4 | zone5 34.6228104 5 | zone5 78.3730011 6 | zone5 137.111206 7 | zone5 150.0 8 | zone10 1.00000000 9 | zone10 5.82550526 10 | zone10 15.0788202 11 | zone10 34.6228104 12 | zone10 78.3730011 13 | zone10 137.111206 14 | zone10 150.0 15 | zone10 7305.00000 16 | zone60 7265.24316 17 | zone60 7275.47119 18 | zone60 7294.50781 19 | zone60 7305.00000 20 | -------------------------------------------------------------------------------- /tests/data/umodel_usg_wel.cbc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pypest/pypestutils/7cf08f36ba09c38580c0b38b08bcfbc0fdeb55bb/tests/data/umodel_usg_wel.cbc -------------------------------------------------------------------------------- /tests/data/umodel_wellflow_interp.dat.std: -------------------------------------------------------------------------------- 1 | zone5 1.00000000 -22458.3301 2 | zone5 5.82550526 -21703.7402 3 | zone5 15.0788202 -21388.0605 4 | zone5 34.6228104 -21419.9609 5 | zone5 78.3730011 -18868.0391 6 | zone5 137.111206 -12090.1699 7 | zone5 150.000000 -11517.6984 8 | zone10 1.00000000 -44916.6719 9 | zone10 5.82550526 -44171.1992 10 | zone10 15.0788202 -43330.5313 11 | zone10 34.6228104 -43046.5391 12 | zone10 78.3730011 -39475.4414 13 | zone10 137.111206 -24127.9492 14 | zone10 150.000000 -22838.6874 15 | zone10 7305.00000 -2989.77100 16 | zone60 7265.24316 -2334.06201 17 | zone60 7275.47119 -2330.61792 18 | zone60 7294.50781 -2329.42090 19 | zone60 7305.00000 -2328.88501 20 | -------------------------------------------------------------------------------- /tests/data/vdl.disv.grb: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pypest/pypestutils/7cf08f36ba09c38580c0b38b08bcfbc0fdeb55bb/tests/data/vdl.disv.grb -------------------------------------------------------------------------------- /tests/data/vdl.fac.std: -------------------------------------------------------------------------------- 1 | 6 2 2751 1 1 2 | 207191.8368369600 11362.82357307800 1 3 | 209686.4359243600 11865.20811151300 1 4 | 210465.9981391700 10531.29054394500 1 5 | 211418.7964017200 9855.669957774700 1 6 | 209045.4625477400 8244.574713829399 1 7 | 211228.2367492100 6910.657146261800 1 8 | 3 1902 0.4991398419418456 1903 8.6264033088855219E-02 1998 0.4145961249692992 9 | 3 2375 0.5973823319139104 2337 3.6236880621929209E-02 2383 0.3663807874641604 10 | 3 2514 0.8666393167860941 2468 7.7925584987015850E-02 2469 5.5435098226890078E-02 11 | 3 2438 0.3811897991389743 2437 0.2803094148870822 2480 0.3385007859739435 12 | 3 2086 0.8535932255277098 2087 9.3221432348128533E-02 2160 5.3185342124161691E-02 13 | 3 2311 0.8831492060187387 2310 2.6685482203034273E-02 2358 9.0165311778227036E-02 14 | -------------------------------------------------------------------------------- /tests/data/vdl.hds: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/pypest/pypestutils/7cf08f36ba09c38580c0b38b08bcfbc0fdeb55bb/tests/data/vdl.hds -------------------------------------------------------------------------------- /tests/data/vdl_interp.bln.std: -------------------------------------------------------------------------------- 1 | 4 0 "1" 2 | 207115.3710 11215.2588 3 | 207002.3910 11484.4369 4 | 207323.3130 11515.1757 5 | 207115.3710 11215.2588 6 | 4 0 "2" 7 | 209601.9970 11767.3574 8 | 209350.6210 12003.5276 9 | 209857.3270 12011.0728 10 | 209601.9970 11767.3574 11 | 4 0 "3" 12 | 210503.3970 10558.9917 13 | 210139.5710 10481.0572 14 | 210340.1880 10168.8406 15 | 210503.3970 10558.9917 16 | 4 0 "4" 17 | 211399.3750 9805.4876 18 | 211371.5710 9903.4762 19 | 211479.7740 9872.5930 20 | 211399.3750 9805.4876 21 | 4 0 "5" 22 | 209016.7520 8245.3389 23 | 209215.6980 8154.8991 24 | 209207.8670 8389.4903 25 | 209016.7520 8245.3389 26 | 4 0 "6" 27 | 211189.7250 6910.4842 28 | 211369.9300 6668.3252 29 | 211563.5150 6984.0721 30 | 211189.7250 6910.4842 31 | -------------------------------------------------------------------------------- /tests/data/vdl_well_heads.dat.std: -------------------------------------------------------------------------------- 1 | well01 1.00000000 6.91517631 2 | well01 10959.0000 -6.40804913 3 | well01 18264.0000 -6.15513090 4 | well01 18265.0000 5.64418156 5 | well02 1.00000000 7.20399017 6 | well02 10959.0000 -7.07930324 7 | well02 18264.0000 -6.83425807 8 | well02 18265.0000 5.81999029 9 | well03 1.00000000 7.48643823 10 | well03 10959.0000 -6.50222777 11 | well03 18264.0000 -6.27850560 12 | well03 18265.0000 5.99827332 13 | well04 1.00000000 8.00149769 14 | well04 10959.0000 -5.23701574 15 | well04 18264.0000 -5.42398925 16 | well04 18265.0000 6.31289262 17 | well05 1.00000000 6.46252007 18 | well05 10959.0000 -3.50459367 19 | well05 18264.0000 -3.40626462 20 | well05 18265.0000 5.37814413 21 | well06 1.00000000 6.65723001 22 | well06 10959.0000 -3.15309659 23 | well06 18264.0000 -3.10470186 24 | well06 18265.0000 5.50741815 25 | -------------------------------------------------------------------------------- /tests/data/vdl_wells.csv: -------------------------------------------------------------------------------- 1 | well01, 207191.83683696, 11362.823573078,1 2 | well02, 209686.43592436, 11865.208111513,1 3 | well03, 210465.99813917, 10531.290543945,1 4 | well04, 211418.79640172, 9855.6699577747,1 5 | well05, 209045.46254774, 8244.5747138294,1 6 | well06, 211228.23674921, 6910.6571462618,1 7 | -------------------------------------------------------------------------------- /tests/data/wells.crd: -------------------------------------------------------------------------------- 1 | well01 65.0 615.0 1 2 | well02 245.0 615.0 1 3 | well03 425.0 615.0 1 4 | well04 65.0 435.0 1 5 | well05 245.0 435.0 1 6 | well06 425.0 435.0 1 7 | well07 65.0 255.0 1 8 | well08 245.0 255.0 1 9 | well09 425.0 255.0 1 10 | well10 65.0 75.0 1 11 | well11 245.0 75.0 1 12 | well12 425.0 75.0 1 13 | -------------------------------------------------------------------------------- /tests/data/wellzone.dat: -------------------------------------------------------------------------------- 1 | 1097 5 2 | 1102 10 3 | 1107 15 4 | 1112 20 5 | 1117 25 6 | 1122 30 7 | 1127 35 8 | 1132 40 9 | 1137 45 10 | 1142 50 11 | 1147 55 12 | 1152 60 13 | -------------------------------------------------------------------------------- /tests/test_crash.py: -------------------------------------------------------------------------------- 1 | """Test previous crash scenarios.""" 2 | 3 | import numpy as np 4 | import pytest 5 | 6 | from pypestutils.pestutilslib import PestUtilsLib 7 | 8 | from .common import data_dir 9 | 10 | 11 | def test_kb2d_1(tmp_path): 12 | """This was a Fatal Python error: Segmentation fault 13 | gdb trace: 14 | 0x00007fffde30ca80 in kb2d_1 (n_ndmin=1, n_ndmax=6, r_radius=2216.427, 15 | k_ktype=0, s_skmean=0, n_nst=1, c_c0=0, i_it=..., c_cc=..., a_ang=..., 16 | a_aa=..., a_anis=..., unestimated=0, n_npts=1, n_ndat=6, inumdat=..., 17 | icellno=..., epoint=..., npoint=..., aoutfile=..., outunit=10, 18 | pmx=10000, x=..., y=..., af1=..., af2=..., _aoutfile=1, _af1=10, 19 | _af2=10) at ../pestutils/sgsim_code.f90:317 20 | 317 dist(isam) = 1.0e+20 21 | """ 22 | flopy = pytest.importorskip("flopy") 23 | spc_pth = data_dir / "rectmodel.spc" 24 | spc = flopy.discretization.StructuredGrid.from_gridspec(spc_pth) 25 | lib = PestUtilsLib() 26 | aa = np.loadtxt(data_dir / "aa.ref", dtype=float) 27 | anis = np.loadtxt(data_dir / "anis.ref", dtype=float) 28 | bearing = np.loadtxt(data_dir / "bearing.ref", dtype=float) 29 | znt = np.loadtxt(data_dir / "zones.inf", dtype=int) 30 | npts = np.loadtxt( 31 | data_dir / "pp.dat", 32 | dtype=[ 33 | ("point", "U8"), 34 | ("ecs", float), 35 | ("ncs", float), 36 | ("zns", int), 37 | ("vals", float), 38 | ], 39 | ) 40 | vartype = 1 # enum.VarioType.spher 41 | searchrad = 1e20 42 | minpts = 10 43 | maxpts = 20 44 | krigtype = 1 # enum.KrigType.ordinary 45 | factorfile = "factors.dat" 46 | factorfile_pth = tmp_path / factorfile 47 | factorfiletype = 1 # enum.FactorFileType.text 48 | ect = spc.get_xcellcenters_for_layer(0).ravel("C") 49 | nct = spc.get_ycellcenters_for_layer(0).ravel("C") 50 | _ = lib.calc_kriging_factors_2d( 51 | npts["ecs"], 52 | npts["ncs"], 53 | npts["zns"], 54 | ect.copy(), 55 | nct.copy(), 56 | znt.copy(), 57 | vartype, 58 | krigtype, 59 | aa.copy(), 60 | anis.copy(), 61 | bearing.copy(), 62 | searchrad, 63 | maxpts, 64 | minpts, 65 | factorfile_pth, 66 | factorfiletype, 67 | ) 68 | # crash only happened when this is called first, which deallocated dist 69 | lib.free_all_memory() 70 | # crash happened next, when assignment to dist was attempted 71 | _ = lib.calc_kriging_factors_auto_2d( 72 | npts["ecs"], 73 | npts["ncs"], 74 | npts["zns"], 75 | ect, 76 | nct, 77 | znt, 78 | krigtype, 79 | anis, 80 | bearing, 81 | factorfile_pth, 82 | factorfiletype, 83 | ) 84 | -------------------------------------------------------------------------------- /tests/test_ctypes_declarations.py: -------------------------------------------------------------------------------- 1 | """Tests for ctypes_declarations module.""" 2 | 3 | from ctypes import c_int 4 | 5 | import pytest 6 | 7 | from pypestutils.ctypes_declarations import get_char_array, get_dimvar_int, prototype 8 | from pypestutils.finder import load 9 | 10 | from .common import pestutils_function_names 11 | 12 | 13 | def test_get_dimvar_int(): 14 | lib = load() 15 | for name in ["LENVARTYPE", "LENFILENAME"]: 16 | res = get_dimvar_int(lib, name) 17 | assert isinstance(res, int) 18 | assert res > 0 19 | 20 | with pytest.raises(ValueError): 21 | get_dimvar_int(lib, "lenfilename") # case-sensitive 22 | 23 | 24 | def test_get_char_array(): 25 | lib = load() 26 | filename_t = get_char_array(lib, "LENFILENAME") 27 | assert filename_t() 28 | 29 | 30 | def test_prototype(): 31 | lib = load() 32 | 33 | # not really necessary, but check they don't have a prototype after loading 34 | for function_name in pestutils_function_names.keys(): 35 | obj = getattr(lib, function_name) 36 | assert obj.argtypes is None, function_name 37 | 38 | prototype(lib) 39 | 40 | # everything should be prototyped 41 | for function_name, num_args in pestutils_function_names.items(): 42 | obj = getattr(lib, function_name) 43 | assert isinstance(obj.argtypes, tuple), function_name 44 | assert len(obj.argtypes) == num_args, function_name 45 | assert obj.restype is c_int, function_name 46 | -------------------------------------------------------------------------------- /tests/test_enum.py: -------------------------------------------------------------------------------- 1 | """Tests for enum module.""" 2 | 3 | import pytest 4 | 5 | from pypestutils.enum import KrigType 6 | 7 | 8 | def test_get_valid_options(): 9 | assert KrigType.get_valid_options() == {0: "simple", 1: "ordinary"} 10 | 11 | 12 | def test_get_value(): 13 | assert KrigType.get_value("simple") == 0 14 | assert KrigType.get_value("ordinary") == 1 15 | 16 | with pytest.raises(ValueError, match="'other' is not a valid option"): 17 | KrigType.get_value("other") 18 | with pytest.raises(ValueError, match="'1' is not a valid option"): 19 | KrigType.get_value(1) 20 | -------------------------------------------------------------------------------- /tests/test_helpers.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | import numpy as np 4 | import pandas as pd 5 | 6 | 7 | def test_mf6_mod2obs(): 8 | import pypestutils.helpers as helpers 9 | 10 | start_datetime = pd.to_datetime("1-1-2000") 11 | 12 | dts = [] 13 | for dt in np.linspace(100, 300, 10): 14 | dts.append(start_datetime + pd.to_timedelta(dt, unit="d")) 15 | obs_df = pd.DataFrame( 16 | { 17 | "site": ["site1" for _ in range(len(dts))], 18 | "x": [101 for _ in range(len(dts))], 19 | "y": [221 for _ in range(len(dts))], 20 | "layer": [1 for _ in range(len(dts))], 21 | } 22 | ) 23 | obs_df.loc[:, "datetime"] = dts 24 | 25 | ws = os.path.join("tests", "data", "p09") 26 | case = "gwf-p09-mf6" 27 | obs_csv = os.path.join(ws, "obs.csv") 28 | obs_df.to_csv(obs_csv) 29 | 30 | dv_name = os.path.join(ws, case + ".hds") 31 | grb_name = os.path.join(ws, case + ".dis.grb") 32 | 33 | results = helpers.mod2obs_mf6( 34 | grb_name, dv_name, obs_csv, 31, start_datetime, 1, "head" 35 | ) 36 | iresults = results["interpolated_results"] 37 | assert iresults.shape[0] == obs_df.shape[0] 38 | 39 | dv_name = os.path.join(ws, "gwt-p09-mf6.ucn") 40 | results = helpers.mod2obs_mf6( 41 | grb_name, dv_name, obs_csv, 31, start_datetime, 1, "concentration" 42 | ) 43 | iresults = results["interpolated_results"] 44 | assert iresults.shape[0] == obs_df.shape[0] 45 | 46 | 47 | if __name__ == "__main__": 48 | import sys 49 | 50 | sys.path.insert(0, os.path.join("..")) 51 | test_mf6_mod2obs() 52 | -------------------------------------------------------------------------------- /tests/test_notebooks.py: -------------------------------------------------------------------------------- 1 | """Tests for example notebooks.""" 2 | 3 | from pathlib import Path 4 | from subprocess import run 5 | 6 | import pytest 7 | 8 | try: 9 | import nbformat 10 | except ImportError: 11 | pytest.skip("requires nbformat", allow_module_level=True) 12 | 13 | examples_dir = Path(__file__).parent.parent / "examples" 14 | 15 | 16 | @pytest.mark.parametrize("nb_file", [pth.name for pth in examples_dir.glob("*.ipynb")]) 17 | def test_notebooks(nb_file): 18 | with open(examples_dir / nb_file) as f: 19 | nb = nbformat.read(f, as_version=4) 20 | for cell in nb["cells"]: 21 | for line in cell["source"].splitlines(): 22 | if line.startswith("import ") and "ppu_helpers" not in line: 23 | module = line.split()[1] 24 | pytest.importorskip(module) 25 | 26 | run( 27 | [ 28 | "jupyter", 29 | "nbconvert", 30 | "--execute", 31 | "--ExecutePreprocessor.timeout=180000", 32 | "--inplace", 33 | nb_file, 34 | ], 35 | cwd=examples_dir, 36 | check=True, 37 | ) 38 | run( 39 | [ 40 | "jupyter", 41 | "nbconvert", 42 | "--ClearOutputPreprocessor.enabled=True", 43 | "--ClearMetadataPreprocessor.enabled=True", 44 | "--inplace", 45 | nb_file, 46 | ], 47 | cwd=examples_dir, 48 | check=True, 49 | ) 50 | -------------------------------------------------------------------------------- /tests/test_pestutilslib.py: -------------------------------------------------------------------------------- 1 | """Tests for pestutilslib module.""" 2 | 3 | import logging 4 | from pathlib import PureWindowsPath 5 | 6 | import pytest 7 | 8 | from pypestutils.pestutilslib import PestUtilsLib 9 | 10 | 11 | def test_init_del(): 12 | lib = PestUtilsLib() 13 | del lib 14 | 15 | 16 | def test_init_logger(caplog): 17 | caplog.set_level(logging.DEBUG) 18 | lib = PestUtilsLib(logger_level=logging.INFO) 19 | assert len(caplog.records) == 0 20 | lib.initialize_randgen(123) 21 | assert len(caplog.records) > 0 22 | 23 | 24 | def test_create_char_array(): 25 | lib = PestUtilsLib() 26 | filein = PureWindowsPath("path") / "to" / "a" / "file.txt" 27 | char_ar = lib.create_char_array(bytes(filein), "LENFILENAME") 28 | assert char_ar.value == rb"path\to\a\file.txt" 29 | gridname = "mygrid" 30 | char_ar = lib.create_char_array(gridname, "LENGRIDNAME") 31 | assert char_ar.value == b"mygrid" 32 | with pytest.raises(ValueError): 33 | lib.create_char_array("foo", "lengridname") 34 | with pytest.raises(TypeError): 35 | lib.create_char_array(1, "LENGRIDNAME") 36 | 37 | 38 | def test_inquire_modflow_binary_file_specs(): ... 39 | 40 | 41 | def test_retrieve_error_message(): ... 42 | 43 | 44 | def test_install_structured_grid(): ... 45 | 46 | 47 | def test_get_cell_centres_structured(): ... 48 | 49 | 50 | def test_uninstall_structured_grid(): ... 51 | 52 | 53 | def test_free_all_memory(): ... 54 | 55 | 56 | def test_interp_from_structured_grid(): ... 57 | 58 | 59 | def test_interp_to_obstime(): ... 60 | 61 | 62 | def test_install_mf6_grid_from_file(): ... 63 | 64 | 65 | def test_get_cell_centres_mf6(): ... 66 | 67 | 68 | def test_uninstall_mf6_grid(): ... 69 | 70 | 71 | def test_calc_mf6_interp_factors(): ... 72 | 73 | 74 | def test_interp_from_mf6_depvar_file(): ... 75 | 76 | 77 | def test_extract_flows_from_cbc_file(): ... 78 | 79 | 80 | def test_calc_kriging_factors_2d(): ... 81 | 82 | 83 | def test_calc_kriging_factors_auto_2d(): ... 84 | 85 | 86 | def test_calc_kriging_factors_3d(): ... 87 | 88 | 89 | def test_krige_using_file(): ... 90 | 91 | 92 | def test_build_covar_matrix_2d(): ... 93 | 94 | 95 | def test_build_covar_matrix_3d(): ... 96 | 97 | 98 | def test_calc_structural_overlay_factors(): ... 99 | 100 | 101 | def test_interpolate_blend_using_file(): ... 102 | 103 | 104 | def test_ipd_interpolate_2d(): ... 105 | 106 | 107 | def test_ipd_interpolate_3d(): ... 108 | 109 | 110 | def test_initialize_randgen(): ... 111 | 112 | 113 | def test_fieldgen2d_sva(): ... 114 | 115 | 116 | def test_fieldgen3d_sva(): ... 117 | -------------------------------------------------------------------------------- /tox.ini: -------------------------------------------------------------------------------- 1 | [tox] 2 | requires = 3 | tox>=4 4 | env_list = py{39,310,311,312,313} 5 | 6 | [testenv] 7 | description = run unit tests 8 | deps = 9 | pytest>=6 10 | numpy 11 | pandas 12 | install_command = 13 | python -I -m pip install --only-binary=:all: {opts} {packages} 14 | ignore_errors = True 15 | ignore_outcome = True 16 | commands = 17 | pytest --import-mode=importlib {posargs:tests} 18 | --------------------------------------------------------------------------------