未提供项目描述
项目描述
ogs6py
ogs6py 是 OpenGeoSys 有限元软件的 python-API。其主要功能包括创建和修改 OGS6 输入文件以及执行 OGS。该包允许使用 python 或 Julia 在 jupyter 或 pluto 笔记本中完全简化 OGS 工作流程,如下面视频所示
要修改和执行 OGS 输入,例如,遍历参数范围,存在两种方法
1. creating a new input file using python method calls
2. altering existing input files
0. 安装
ogs6py 可以轻松地从 PyPI 安装
# pip install [--user] ogs6py
或从 github 上的最新版本
# pip install [--user] https://github.com/joergbuchwald/ogs6py/archive/refs/heads/master.zip
注意:ogs6py 的日志文件解析器至少需要 Python 3.8。
可以通过以下方式运行单元测试
# python tests/test_ogs6py.py
注意:方法命名风格已更改(2021-05-20)
1. ogs6py 文档
您可以在以下位置找到文档:https://joergbuchwald.github.io/ogs6py-doc
2. 创建新的输入文件
以下示例包含一个简单的力学问题。源文件可以在示例目录中找到。方法调用名称基于相应的XML标签。
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")
可以在example_THM.py中找到一个使用MPL的示例。
3. 或者,可以使用现有的替换方法来修改现有文件
例如,要遍历三个杨氏模量,可以使用替换参数方法
Es = [1,2,3]
filename = "simple_mechanics.prj"
for E in Es:
model = OGS(INPUT_FILE=filename, PROJECT_FILE=filename)
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")
除了replace_parameter
方法外,更通用的replace_text
方法也可以用来替换此示例中的杨氏模量
model.replace_text(E, xpath="./parameters/parameter[name='E']/value")
此文件中的杨氏模量也可以通过xpath ./parameters/parameter/value
指向的位置的0次出现来访问
model.replace_text(E, xpath="./parameters/parameter/value", occurrence=0)
对于基于MPL的过程,存在特定函数来设置相和介质属性:例如
model.replace_phase_property(mediumid=0, phase="Solid", name="thermal_expansivity", value="42")
对于相属性
model.replace_medium_property(mediumid=0, name="porosity", value="0.24")
对于位于介质级别的属性。
4. 日志解析器
要解析管道到文件的OGS输出,请执行
df = model.parse_out("examples/out_thm.log")
它将返回一个pandas数据框。
5. 示例
有一些示例已经在OGS工作流程中使用,并可能推广到其他用例
- 通过从数据文件(csv)读取参数,从文件模板生成输入文件(prj),
- 找到交错方案的优化耦合方案参数。
6. 常见问题/故障排除
- OGS执行失败且日志文件中没有写入任何内容。请检查是否从终端正确执行了OGS。一个常见问题是交互式Python环境与终端中的环境不同。通常,这可以通过通过包装命令设置所需的环境变量来解决。例如,
model.run_model(wrapper="source /opt/intel/oneapi/setvars.sh intel64 &&")
。
项目详情
下载文件
下载您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。
源分布
此版本没有可用的源分布文件。请参阅生成分布存档的教程。
构建分布
ogs6py-0.402-py2.py3-none-any.whl (42.3 kB 查看散列)
关闭
ogs6py-0.402-py2.py3-none-any.whl的散列
算法 | 散列摘要 | |
---|---|---|
SHA256 | 00e6846304434eeba18b007d30ed6f3b8da6045328aa5f18bd387f9ebdb3d11c |
|
MD5 | 7c22c15b6e251718b705e1ad06fb82ee |
|
BLAKE2b-256 | 08eb6a6e2f7ea40fef3208a9edc7108b73ef6fdbce190aafd1d09c71e77d53cc |