equinor / pysand Goto Github PK
View Code? Open in Web Editor NEWSand Management in Python
License: GNU General Public License v3.0
Sand Management in Python
License: GNU General Public License v3.0
Added parameters to erosion input validation from choke mode. needs to be tested.
Create a pseudo model based off DNVGL work for non-slam check valves. Inlcude warnings on sonic velocity.
Update the bringing together jupyter notebook after implementation of issue #43.
D
boundaries in RP-O501 (0.01 - 1 m) should be stated in the warningd_p
boundaries in RP-O501 (0.02 - 5 mm) should be stated in the warningD
and d_p
are negative, they should not give resultalpha
in probes should be limited to 10-90 deg (page 34 in RP-O501)Following parameters gave no error:
v_m
to be positive (limitations exist in RP-O501: 0-200)rho_m
to be positive (limitations exist in RP-O501: 1-1500)mu_m
to be positive (limitations exist in RP-O501: 1e-6-1e-2)Q_s
to be positive (limitations exist in RP-O501: 0-500 ppmV)R
to be positive (limitations exist in RP-O501: 0.5-50)All above checked for bend model in version 1.2
rho_p and material functions missing, need to check RP:
rho_p not part of model, need to check RP:
rho_p missing in models using bend model, should be added to:
(raw-zero)^exp. default exp=1.
Liquid density and liquid viscosity is used for horisontal sand transport models. Should be included in the fluid properties module.
K, n, rho_p, rho_t etc
Wait for issue #4 has been completed
Include as function within erosion.py?
Fix readme
The description of Hydro transport model currently reads:
Equinor sand transport model for horizontal pipelines Based on T. Søntvedt (1995) and R. Schulkes (2002) work in Hydro
This is not 100% correct, as the model appear to have been influenced by other test-data, and is not able to re-produce 1:1 lab measurements from the mentioned Schulkes report. New description should reflect this
Inputs like v_m, rho_m, mu_m, Q_s..
Maybe the simplest thing would be to say
if E < 0: return np.nan
for all erosion models? This way, any negative input will throw np.nan...
Then another function to convert to mm/year
Dersom en av input-verdiene til validate_asd er negativ vil asd_step_emerson og asd_step_clampon returnere "None". I logger.warning-teksten til validate_asd står det at nan vil bli returnert. Foreslår at asd_step_emerson og asd_step_clampon endres til å returnere np.nan is stedet for None dersom validate_asd returnerer True
Convert to poetry package management
Example:
v_m = np.arange(5,50,10) # Mix velocity [m/s]
D = 0.2
for hastighet in v_m:
st_pipe = pysand.erosion.straight_pipe(hastighet, D)
raises exception that 'v_m is not a number' (v_m = hastighet)
Extend Github action "test pysand" with a build test to test.pypi.org. Ref to tagreader.
The check valve model has been added in v 1.6.3. The Jupyter Notebook on Erosion examples should be updated to reflect added model.
ER probe included from version 1.2 (er-probe branch)
Implement type hinting:
https://peps.python.org/pep-0484/
np.vectorize(std_step_emerson)(df['v_m'], df['GOR'])
raises GOR is not a number
exception when df['v_m']
is float and df['GOR']
is int data types. May be related to #63 ?
Ductile should be default
Add functionality for crushed proppants in erosion functions, e.g
crushed=false
as input. if crushed=True: return 3xE
Do not get travis checks on pull requests.
Currently some inputs validation is done assuming integer or float types only. Should be updated to handle series input too.
To ease integration with pysand-web, adding a display name to the material properties dictionary would be of great help (pysand.erosion.material_properties):
{ 'carbon_steel': {'rho_t': 7800, 'K': 2e-9, 'n': 2.6, 'angle_dependency': 'ductile', 'name': 'Carbon Steel'}, 'duplex': {'rho_t': 7850, 'K': 2e-9, 'n': 2.6, 'angle_dependency': 'ductile', 'name': 'Duplex'}, 'ss316': {'rho_t': 8000, 'K': 2e-9, 'n': 2.6, 'angle_dependency': 'ductile', 'name': 'SS316'}, 'inconel': {'rho_t': 8440, 'K': 2e-9, 'n': 2.6, 'angle_dependency': 'ductile', 'name': 'Inconel'}, 'grp_epoxy': {'rho_t': 1800, 'K': 3e-10, 'n': 3.6, 'angle_dependency': 'ductile', 'name': 'GRP Epoxy'}, 'grp_vinyl_ester': {'rho_t': 1800, 'K': 6e-10, 'n': 3.6, 'angle_dependency': 'ductile', 'name': 'GRP Vinyl Ester'}, 'hdpe': {'rho_t': 1150, 'K': 3.5e-9, 'n': 2.9, 'angle_dependency': 'ductile', 'name': 'HDPE'}, 'aluminium': {'rho_t': 2700, 'K': 5.8e-9, 'n': 2.3, 'angle_dependency': 'ductile', 'name': 'Aluminium'}, 'dc_05_tungsten': {'rho_t': 15250, 'K': 1.1e-10, 'n': 2.3, 'angle_dependency': 'brittle', 'name': 'DC 05 Tungsten'}, 'cs_10_tungsten': {'rho_t': 14800, 'K': 3.2e-10, 'n': 2.2, 'angle_dependency': 'brittle', 'name': 'CS 10 Tungsten'}, 'cr_37_tungsten': {'rho_t': 14600, 'K': 8.8e-11, 'n': 2.5, 'angle_dependency': 'brittle', 'name': 'CR 37 Tungsten'}, '95_alu_oxide': {'rho_t': 3700, 'K': 6.8e-8, 'n': 2, 'angle_dependency': 'brittle', 'name': '95 Alu Oxide'}, '99_alu_oxide': {'rho_t': 3700, 'K': 9.5e-7, 'n': 1.2, 'angle_dependency': 'brittle', 'name': '99 Alu Oxide'}, 'psz_ceramic_zirconia': {'rho_t': 5700, 'K': 4.1e-9, 'n': 2.5, 'angle_dependency': 'brittle', 'name': 'PSZ Ceramic Zirconia'}, 'ZrO2-Y3_ceramic_zirconia': {'rho_t': 6070, 'K': 4e-11, 'n': 2.7, 'angle_dependency': 'brittle', 'name': 'Zr02-Y3 Ceramic Zirconia'}, 'SiC_silicon_carbide': {'rho_t': 3100, 'K': 6.5e-9, 'n': 1.9, 'angle_dependency': 'brittle', 'name': 'Silicon Carbide'}, 'Si3N4_silicon_nitride': {'rho_t': 3200, 'K': 2e-10, 'n': 2, 'angle_dependency': 'brittle', 'name': 'Silicon Nitride'}, 'TiB2_titanium_diboride': {'rho_t': 4250, 'K': 9.3e-9, 'n': 1.9, 'angle_dependency': 'brittle', 'name': 'Titanium Diboride'}, 'B4C_boron_carbide': {'rho_t': 2500, 'K': 3e-8, 'n': .9, 'angle_dependency': 'brittle', 'name': 'Boron Carbide'}, 'SiSiC_ceramic_carbide': {'rho_t': 3100, 'K': 7.4e-11, 'n': 2.7, 'angle_dependency': 'brittle', 'name': 'Ceramic Carbide'} }
currently tested on version 3.6 on Travis. Add following to readme. Version number should be updated in setup.py classifiers. Possible to update setup.py classifiers from travis.yml?
ps.__version__
etc to indicate what version was used in the examplesin setup.py file
Jupyter notebook showing example use of choke opening calculations
.. to transport.py
After implementing pysand in IOC erosion calculations we have encountered several issues with NaN values. IOC accept NaNs as a valid result, however pysand throws an exception if a NaN value is passed as input. The result is that the IOC calculations fail and cannot progress past the timestamp containing a NaN and data starts to lag.
We have made some modifications to the pythonscripts in IOC to replace NaN values before they are passed to pysand, but maybe pysand should accept NaNs as this is a valid datapoint in python?
minimum choke opening based on actual sand production for plug and cage type chokes, ref DNVGL RP-O501
Add CD functionality for automatic versioning and pushing to PyPi when merging PR's.
At the moment there is a logger warning when geometry factors above 4 in erosion.py. In reality one could use higher GF for components to adjust for special cases like jets.
Implement something like codacy. Github Actions may be used?
When sand production or velocity input is not known, minimum relative choke opening should be 0.2
As of now, requirements are stated in requirements.txt and within setup.py < install_requires.
Requirements should only be needed one (1) place.
4.63 from DNVGL RP-O501
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.