welltestpy - package to handle well-based Field-campaigns.
Project description
Welcome to WellTestPy
Purpose
WellTestPy provides a framework to handle and plot data from well based field campaigns as well as a data interpretation module.
Installation
You can install the latest version with the following command:
pip install welltestpy
Documentation for WellTestPy
You can find the documentation under geostat-framework.readthedocs.io.
Example 1: Create a Campaign containing a pumping test
In the following a simple pumping test is created with artificial drawdown data generated by the Theis-solution.
import numpy as np
import welltestpy as wtp
import anaflow as ana
### create the field-site and the campaign
field = wtp.data.FieldSite(name="UFZ", coordinates=[51.353839, 12.431385])
campaign = wtp.data.Campaign(name="UFZ-campaign", fieldsite=field)
### add 4 wells to the campaign
campaign.add_well(name="well_0", radius=0.1, coordinates=(0., 0.))
campaign.add_well(name="well_1", radius=0.1, coordinates=(1., -1.))
campaign.add_well(name="well_2", radius=0.1, coordinates=(2., 2.))
campaign.add_well(name="well_3", radius=0.1, coordinates=(-2., -1.))
### generate artificial drawdown data with the Theis solution
prate = -1e-4
time = np.geomspace(10, 7200, 10)
transmissivity = 1e-4
storage = 1e-4
rad = [
campaign.wells["well_0"].radius, # well radius of well_0
campaign.wells["well_0"] - campaign.wells["well_1"], # distance between 0-1
campaign.wells["well_0"] - campaign.wells["well_2"], # distance between 0-2
campaign.wells["well_0"] - campaign.wells["well_3"], # distance between 0-3
]
drawdown = ana.theis(
rad=rad,
time=time,
T=transmissivity,
S=storage,
Qw=prate,
)
### create a pumping test at well_0
pumptest = wtp.data.PumpingTest(
name="well_0",
pumpingwell="well_0",
pumpingrate=prate,
description="Artificial pump test with Theis",
)
### add the drawdown observation at the 4 wells
pumptest.add_transient_obs("well_0", time, drawdown[:, 0])
pumptest.add_transient_obs("well_1", time, drawdown[:, 1])
pumptest.add_transient_obs("well_2", time, drawdown[:, 2])
pumptest.add_transient_obs("well_3", time, drawdown[:, 3])
### add the pumping test to the campaign
campaign.addtests(pumptest)
### plot the well constellation and a test overview
campaign.plot_wells()
campaign.plot()
### save the whole campaign
campaign.save()
This will give the following plots:
And the campaign is stored to a file called Cmp_UFZ-campaign.cmp
Example 2: Estimate transmissivity and storativity
The pumping test from example 1 can now be loaded and used to estimate the values for transmissivity and storativity.
import welltestpy as wtp
campaign = wtp.data.load_campaign("Cmp_UFZ-campaign.cmp")
estimation = wtp.estimate.Theisest("Estimate_theis", campaign)
estimation.setpumprate()
estimation.settime()
estimation.genrtdata()
estimation.run(
dbname="database",
plotname1="paratrace.pdf",
plotname2="fit_plot.pdf",
plotname3="parainteract.pdf",
estname="estimation.txt",
)
This will give the following plots:
The results are:
ln(T) = -9.22
which is equivalent toT = 0.99 * 10^-4 m^2/s
ln(S) = -9.10
which is equivalent toS = 1.11 * 10^-4
Provided Subpackages
welltestpy.data # Subpackage to handle data from field campaigns
welltestpy.estimate # Subpackage to estimate field parameters
welltestpy.process # Subpackage to pre- and post-process data
welltestpy.tools # Subpackage with miscellaneous tools
Requirements
Contact
You can contact us via info@geostat-framework.org.
License
GPL © 2018-2019
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distributions
Hashes for welltestpy-0.3.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | da8260f7613a49a36670ad3668e472ba06c4611274a72cb3ccbb53ecc57d42e6 |
|
MD5 | c92a7e60d80a59a94e5b51b30d0e3acd |
|
BLAKE2b-256 | 22e073c3507c938b8d391e274225cf7650dbda620a717425f4d365d7c884bb91 |
Hashes for welltestpy-0.3.0-py2-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b2527d4f5db221de85269cf0e50e0d5174a85a9640707b182c9b1d66c7cde2f1 |
|
MD5 | ff0591fd7450e6ca1aaa9fd85f2b7d26 |
|
BLAKE2b-256 | 3df9c0b1270be00547fb0f81cc91d984195f2d5a32098bae20e8f963307b4f71 |