No project description provided
Project description
ogs6py
ogs6py is a python-API for the OpenGeoSys finite element sofware. Its main functionalities include creating and altering OGS6 input files as well as executing OGS. The package allows to streamline OGS-workflows with python or Julia entirely in jupyter or pluto notebooks as demonstrated in the following video:
To alter and execute OGS input, e.g., for looping over parameter ranges, two approaches exist:
1. creating a new input file using python method calls
2. altering existing input files
0. Installation
clone the repository and use pip/pip3 to install the package.
# git clone https://github.com/joergbuchwald/ogs6py.git
# cd ogs6py
# pip install --user .
CAUTION: naming style of methods has changed (2021-05-20)
1. Creating a new input file
The following example consists of a simple mechanics problem. The source file can be found in the examples directory The names of the method calls are based on the corresponing XML tags. The MKL=True
option executes source /opt/intel/mkl/bin/mklvars.sh intel64
before the ogs call.
from ogs6py import ogs
model = ogs.OGS(PROJECT_FILE="simple_mechanics.prj")
model.geo.add_geom(filename="square_1x1.gml")
model.mesh.add_mesh(filename="square_1x1_quad_1e2.vtu")
model.processes.set_process(name="SD",
type="SMALL_DEFORMATION",
integration_order="2",
solid_density="rho_sr",
specific_body_force="0 0")
model.processes.set_constitutive_relation(type="LinearElasticIsotropic",
youngs_modulus="E",
poissons_ratio="nu")
model.processes.add_process_variable(process_variable="process_variable",
process_variable_name="displacement")
model.processes.add_process_variable(secondary_variable="sigma",
output_name="sigma")
model.timeloop.add_process(process="SD",
nonlinear_solver_name="basic_newton",
convergence_type="DeltaX",
norm_type="NORM2",
abstol="1e-15",
time_discretization="BackwardEuler")
model.timeloop.set_stepping(process="SD", type="FixedTimeStepping",
t_initial="0",
t_end="1",
repeat="4",
delta_t="0.25")
model.timeloop.add_output(type="VTK",
prefix="blubb",
repeat="1",
each_steps="10",
variables=["displacement", "sigma"])
model.parameters.add_parameter(name="E", type="Constant", value="1")
model.parameters.add_parameter(name="nu", type="Constant", value="0.3")
model.parameters.add_parameter(name="rho_sr", type="Constant", value="1")
model.parameters.add_parameter(name="displacement0",
type="Constant",
values="0 0")
model.parameters.add_parameter(name="dirichlet0", type="Constant", value="0")
model.parameters.add_parameter(name="dirichlet1", type="Constant", value="0.05")
model.processvars.set_ic(process_variable_name="displacement",
components="2",
order="1",
initial_condition="displacement0")
model.processvars.add_bc(process_variable_name="displacement",
geometrical_set="square_1x1_geometry",
geometry="left",
type="Dirichlet",
component="0",
parameter="dirichlet0")
model.processvars.add_bc(process_variable_name="displacement",
geometrical_set="square_1x1_geometry",
geometry="bottom",
type="Dirichlet",
component="1",
parameter="dirichlet0")
model.processvars.add_bc(process_variable_name="displacement",
geometrical_set="square_1x1_geometry",
geometry="top",
type="Dirichlet",
component="1",
parameter="dirichlet1")
model.nonlinsolvers.add_non_lin_solver(name="basic_newton",
type="Newton",
max_iter="4",
linear_solver="general_linear_solver")
model.linsolvers.add_lin_solver(name="general_linear_solver",
kind="lis",
solver_type="cg",
precon_type="jacobi",
max_iteration_step="10000",
error_tolerance="1e-16")
model.linsolvers.add_lin_solver(name="general_linear_solver",
kind="eigen",
solver_type="CG",
precon_type="DIAGONAL",
max_iteration_step="10000",
error_tolerance="1e-16")
model.linsolvers.add_lin_solver(name="general_linear_solver",
kind="petsc",
prefix="sd",
solver_type="cg",
precon_type="bjacobi",
max_iteration_step="10000",
error_tolerance="1e-16")
model.write_input()
model.run_model(logfile="out.log")
model.runModel(path="~/github/ogs/build_mkl/bin")
An example using the MPL can be find in example_THM.py.
2. Alternatively it is possible to alter existing files using the available replace methods:
E.g., to iterate over three Young's moduli one can use the replace parameter method:
Es = [1,2,3]
filename = "simple_mechanics.prj"
for E in Es:
model = OGS(INPUT_FILE=filename, PROJECT_FILE=filename, MKL=True)
model.replace_parameter(name="E", value=E)
model.replace_text("out_E="+str(E), xpath="./time_loop/output/prefix")
model.write_input()
model.run_model(path="~/github/ogs/build_mkl/bin")
Instead of the replaceParameter
method, the more general replaceTxt
method can be used
model.replace_text(E, xpath="./parameters/parameter[name='E']/value")
The Young's modulus in this file can also be accessed through 0'th occurrence of the place addressed by the xpath ./parameters/parameter/value
model.replace_text(E, xpath="./parameters/parameter/value", occurrence=0)
For MPL based processes, there exist specific functions to set phase and medium properties: E.g.,
model.replace_phase_property(mediumid=0, phase="Solid", name="thermal_expansivity", value="42")
for a phse property and
model.replace_medium_property(mediumid=0, name="porosity", value="0.24")
for a property that lives on the medium level.
3. Log-Parser
To parse the output that is piped into a file named out.log
you can simply do:
df = model.parse_out("examples/out_thm.log")
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
File details
Details for the file ogs6py-0.31.linux-x86_64.tar.gz
.
File metadata
- Download URL: ogs6py-0.31.linux-x86_64.tar.gz
- Upload date:
- Size: 37.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/3.4.1 importlib_metadata/4.0.1 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.54.0 CPython/3.9.5
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a42465ea20c875e0bff43f9eed7478312936fc5a24d91a84d4626eeb9026a6b3 |
|
MD5 | 9571b75072e73755cd20b18ca624cb6f |
|
BLAKE2b-256 | 173dffa60aa6c84e348cf136482a27a4ca5a304ece8fe3661f1ef5543119f83d |