Plaxis远程脚本教程一——总纲

Plaxis简介

PLAXIS 2D/3D程序是由荷兰PLAXIS B.V.公司推出的一系列功能强大的通用岩土有限元计算软件,已广泛应用于各种复杂岩土工程项目的有限元分析中,如:大型基坑与周边环境相互影响、盾构隧道施工与周边既有建筑物相互作用、大型桩筏基础(桥桩基础)与邻近基坑的相互影响、板桩码头应力变形分析、库水位骤升骤降对坝体稳定性的影响、软土地基固结排水分析、基坑降水渗流分析及完全流固耦合分析、建筑物自由振动及地震荷载作用下的动力分析、边坡开挖及加固后稳定性分析等等。

Plaixs远程脚本应用的学习需要具备一定的Plaxis图形用户界面是使用知识和能力,同时对Python脚本语言的基本语法有一定的了解,达到能够按照逻辑编写指定的程序的程序设计能力。

Plaxis中的Python API

Plaxis提供Python API分析接口使得可以通过运行Python脚本实现GUI界面相同的结构创建能力,包括:创建土层、几何形状、结构和材料参数。对于网格曲线点的选取能力,实现能够选取划分好临近指定坐标的Node节点和Stress应力点对于网格划分功能,能够实现网格划分密度和指示是否在结构元素周围加密的功能。对于施工阶段的创建和配置,提供施工阶段各个参数的配置方法。对于曲线点和监控实体,提供对曲线点和实体的变形、应力和应变的数据提取功能。对于完成计算的模型,提供重新建立模型的能力,使得可以不间断持续进行多参数敏感性分析。

Plaxis文档中对于Python API描述如下所示:

In PLAXIS 3D it is possible to design the model using Python scripting. This approach allows saving time when many calculations of similar applications are needed. The user can use command line available in Input and Output to run multiple commands in the Command runner, but now it is also possible to use the remote scripting interface and its Python wrapper. Both command runner and remote scripting allow the user to use commands that are not exposed by the UI tools, as well as store and run macros using the extensive help (manuals and references). The full list of commands with parameters information is available in the Command Reference under the Help menu.

Plaxis分析基本模块的安装与测试

Plaxis的脚本服务器简介绍和测试

Plaxis的脚本服务器是以TCP网络监听服务为载体,接受客户端发送的指令,将接受的指令实时传递给命令处理器的一个中台系统。在使用之前需要先在软件中启动远程脚本服务器。对于Plaxis 2DPlaxis 3D软件中的脚本服务器的启动方式是相同的,具体步骤如下所示:

(1) 首先进入软件的主控制台视图界面,点击专业菜单栏,选择配置远程脚本服务器,如下图所示:

点击菜单栏,选择远程脚本服务器

(2) 配置好端口和连接密码,点击启动服务器,如下图所示:

启动服务器

(3) 验证服务器是否开启成功,首先点击专业菜单栏,选择Python -> 解译器,如下图所示:

开启python解释器

(4) 在弹出的解释器中输入以下代码,如果输出和下图中相同且无报错,则服务器启动成功:

1
2
3
4
# 注意,把下面的密码和端口改成你自己服务器的密码和端口
from plxscripting.easy import *
passwd = 'zV=BUCU?aR7H%e<L'
s_i, g_i = new_server('localhost', 10000, password=passwd)

命令行测试服务器是否启动成功

Plaxis的python模块

由上文的测试步骤可以的得到:使用本地脚本与Plaxis服务器进行交互依赖于plxscripting模块。上文的示例基于Plaxis自带的脚本解释器,如果需要使用自己的解释器需要安装相应的模块。下面介绍如何如何在自己电脑默认的解释器上安装plxscripting模块。本例中的python版本为3.7.11

(1) 打开Plaxis自带的python解释器,输入以下命令,该命令会打印指定模块的文件路径:

1
2
import plxscripting
print(plxscripting.__file__)

获取plxscripting的文件路径

(2) 复制上文得到的模块路径,进入模块的文件夹的上一级目录,在本例中也就是:C:\ProgramData\Bentley\Geotechnical\PLAXIS Python Distribution v1.0.0\01.00\python\lib\site-packages\,将其中的plxscripting文件夹和encryption.py文件复制出来,文件夹和文件的形式如下图所示:

plxscripting模块文件夹
encryption.py文件

(3) 将上文中复制出来的文件夹和文件,复制到你自己电脑的Python的模块库中,打开命令提示符,输入以下命令查询本机Python的安装目录,运行结果如下图所示:

Python安装目录

输出的第一条就是Python默认路径,找到python安装目录后打开文件夹,进入Lib -> site-packages 文件夹,把前面复制的模块文件夹和文件复制进来即可,默认Python解释器的site-packages文件夹路径如下图所示:

site-packages文件夹示例

(4) 打开默认的Python解释器,运行上一章节中的测试代码,如果输出同上一章节中的相同且没有报错,则该模块安装完成,如下图所示:

检查本地Plaxis模块脚本是否安装成功

远程脚本服务器命令查询文档

由于Plaxis中的命令多而复杂,因此我们在编写远程脚本时需要查阅相关文档,获得不同命令的作用和用法。本博客将Plaxis 2D和Plaxis 3D中的命令行参考文档集成到了本网站中,访问如下链接进行查阅。

命令手册分为输入命令和输出命令,点进去相关的超链接就能够看到相应的命令列表。一般我们使用右上角的命令查询栏进行指定的命令查询,查询到的命令会显示该命令的作用和用法,包括命令参数的解释等。

一个简单示例

本文展示一个基于Plaxis 2D的python分析程序,该程序的每一行代码都有相应的注释说明,解释不同函数和方法库的功能和用法。

同时在分析完简单示例模型代码之后,对PlaxisPython API的一般设计方法进行详细解析,使得可以基于文中总结归纳的一般设计方法完成对更多类型、更复杂的场景完成模拟分析能力。

简单示例的代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
from plxscripting.easy import *

passwd = 'zV=BUCU?aR7H%e<L'

s_i, g_i = new_server('localhost', 10000, password=passwd)
s_i.new()
# Create a new Contour of soil, the meaning of the following parameters is as follows (x_min, y_min, x_max, y_max)
g_i.SoilContour.initializerectangular(0, -20, 20, 10)
# rectangular = g_i.polygon(*[(0, 0), (10, 0), (10, 5), (0, 5)])
# Create a borehole (x_position, y_position), if Plaxis.version is 2d, then (x_position)
g_i.borehole(0)
# g_i.soillayer(1)
g_i.soillayer(10)
# create a soil material set
material = g_i.soilmat()
# Set the parameters to the soil
# parameter 1: SoilModel represent the types of new materials
# parameter 2: Linear elastic is a kind of constitutive models
# parameter 3: GammaUbsat is the unsaturated unit weight of soil
# parameter 4: GammaSat is the saturated unit weight of soil
# parameter 5: Gref is the reference shear modulus of soil
material.setproperties('SoilModel', 'Linear elastic', 'gammaUnsat', 16,
'gammaSat', 20, 'Gref', 10000)
# Assign the material to the first soil
g_i.Soils[0].Material = material
# Switch the current mode to the structures mode
g_i.gotostructures()
# Create a line load, if Plaxis.version is 2d, then ((x1, y1), (x2, y2)) else ((x1, y1, z1), (x2, y2, z2))
# if you want to create a line, use g_i.line(point1, point2)
g_i.lineload((3, -5), (7, -5))

# Switch the current mode to the mesh mode
g_i.gotomesh()
# Generate a mesh of the available meshable objects
# parameter 1: (0.2) is the relative element size factor, which is equal to the size of mesh size divided by object size.
# parameter 2: The boolean value 'True' means enhanced mesh refinements.
g_i.mesh(0.05, True)
# Create the mesh viewer port that runs at localhost, and allow you to select points-of-interest in the mesh.
output_port = g_i.selectmeshpoints()
# function new_server can create a viewer board, to realize GUI operation
# s_o is the server object, and g_o is the viewer object or GUI console object.
s_o, g_o = new_server('localhost', output_port, password=passwd)
# Add the node closest to the specified point to the curve point set.
# parameter 1: Node indicates the tyoe of point selected, which can be set to: ['Node', 'Stress point', 'Material point', 'Rigid body']
# parameter 2: gi.Soil_1_1 is an Entity, the selected curve point is from specified entity.
# parameter 3: (5, -5) is the specified coordinate.
g_o.addcurvepoint('Node', g_o.Soil_1_1, (5, -5))
# Update the changes to the Main GUI console, and close the mesh viewer.
g_o.update()
# Switch the current mode to the stage mode.
g_i.gotostages()
# Define the first construction phase.
# g_i.phase(Existing_phase) creates a new phase which will take place after the existing_phase
# Existing_phase can be one of the global phase set in g_i console.
phase1 = g_i.phase(g_i.Phases[0])
# g_i.Lineloads is the set of all line loads in current model.
# lineload.Active[phase] means this element is active at the specified phase.
g_i.LineLoads[0].Active[phase1] = True
# Start calculating
g_i.calculate()
# Create a phase viewer port which runs at localhost to display the result of calculate.
output_port = g_i.view(phase1)
# Create a result viewer
s_o, g_o = new_server('localhost', output_port, password=passwd)
# utot means the total displacement of the specified point in the specified phase.
# g_o.getcurveresults Displays results for curve points that have been previously selected.
# parameter 1: g_o.CurvePoints.Nodes.value[0] is the value of the specified node.
# parameter 2: g_o.Phases[1] is the specified construction phase
# parameter 3: g_o.ResultTypes.Soil.Utot is the specified type of result in the soil, it can be other entities.
# The displacement 'Utot' can be set to ['Utot''Ux', 'Uy', 'X', 'Y', 'dUx', 'dUy', 'dUtot', 'PUx', 'PUy', 'PUtot', ...]
utot = g_o.getcurveresults(g_o.CurvePoints.Nodes[0],
g_o.Phases[1], g_o.ResultTypes.Soil.Utot)
# Output the total displacement of the specified Node
print(utot)
# Save the model as a .p2d file, which is located at E:/plaxis2D/python_model/, and named example
g_i.save(r'E:/plaxis2D/python_model/example')

直接上文的python代码复制粘贴运行即可,Plaxis主程序将会根据上面的指令做出相应的行为。

简单示例的流程分析

上节中的简单示例主要包括以下执行顺序:

(1) 创建一个新的项目,代码:s_i.new(),该操作会将Plaxis控制台(以下简称主控制台)中的已有的元素和结构全部清除,初始化主控制台。

(2) 规定模型土层的最大边界,代码:g_i.SoilContour.initializerectangular(0, -5, 20, 10),该代码定义了Plaxis生成的土层x轴左侧最小值的坐标为:0,x轴右侧最小值的坐标为:20。但是Y轴的规定似乎不起作用,当设置了Y轴的最小值为-5时,仍然能够创建在X坐标轴下厚度为10的土层。如下图所示:

厚度为10,宽度为20的土层

(3) 在X坐标为0的点创建一个钻孔,该钻孔返回一个钻孔对象的引用,可以通过赋值的方式保留使用。本例中创建一个钻孔,该钻孔为默认钻孔,后文中对土层的定义等操作均默认使用该钻孔。若在其他位置处定义了其他钻孔,则默认钻孔会更新为新定义的钻孔。

(4) 在默认钻孔上,创建一个厚为10m的土层,该土层从Y=0的位置开始向下创建,土层底部的Y坐标为y=-10。可以通过赋值的方式保留该土层对象使用,可以对保留的对象进行材料的赋值等操作。

(5) 创建一个材料对象的集合,本例中创建了一个土体材料的集合,名为soillayer,若要创建其他类型材料的集合可以使用命令:g_i.{材料代码},不同的材料类型与代码的对应表如下所示,其中标注(3D)的材料为Plaxis 3D中特有材料类型:

材料类型 代码
土体和界面 soilmat
platemat
土工格栅 geogridmat
embedded桩 embeddedbeammat
锚杆 anchormat
梁(3D) beammat

(6) 设置当前材料的属性,代码:material.setproperties,土体可以设置的材料参数可以参考链接:Soil材料参数表

(7) 将生成的土层赋值为上一步设置好的材料属性,代码:g_i.Soils[0].Material = material

(8) 进入结构设计阶段

(9) 创建一条起点为(3, -5),终点为(7, -5)的线荷载,默认为均布竖向荷载大小为1kNm/m/m,根据单位可见创建的是矩形均布荷载。线荷载可以设置为动荷载,类似于土质参数设定,可以通过设置线荷载对象的其他参数对线荷载进行完善,创建线荷载命令构造型式参考:lineloadm命令,线荷载对象参数:线荷载对象参数

(10) 进入网格划分阶段

(11) 在实体(entities)上创建网格,代码:g_i.mesh(element_size_factor, boolean),其中参数element_size_factor是一个介于0-1之间的小数,表示网格尺寸/实体在该方向的尺寸,当element_size_factor=(0)1时,则会在一条直线上创建11个节点,相邻两个节点的边长等于直线长度的0.1倍;参数boolean指示是否在存在除土体以外实体的区域加密网格,True表示加密网格

(12) 获取生成网格之后的网格浏览器窗口句柄,在Plaxis中python API中网格浏览器窗口句柄为一个虚拟地址端口,将该端口传入到new_server创建网格浏览器视图

(13) 添加监控的曲线点,代码:g_o.addcurvepoint('Node', g_o.Soil_1_1, (5, -5)),第一个参数指定了曲线点的类型,Node代表节点,可选的其他参数如下表所示。g_o.Soil_1_1表示在指定的土层块中选取节点,$(5, -5)$表示在指定的土块中选取距离$(5, -5)$坐标最近的点

曲线点类型 代码
节点 Node
应力点 Stress point
材料点 Material point
刚体 Rigid body

(14) 将选取的曲线点更新到主控制台中,关系网格展示视图

(15) 进入施工段划分阶段

(16) 在初始施工段之后创建一个新的施工段,代码:phase1 = g_i.phase(g_i.Phases[0]),新建的施工段基于初始施工段:所有土体处于激活状态,所有外部结构处于冻结状态

(17) 在新创建的阶段中激活先前创建的线荷载,代码:g_i.LineLoads[0].Active[phase1] = True

(18) 开始计算

(19) 获取计算结果输出窗口句柄,创建计算结果输出窗口

(20) 获取所选曲线点在指定阶段的总变形,代码:utot = g_o.getcurveresults(g_o.CurvePoints.Nodes[0], g_o.Phases[1], g_o.ResultTypes.Soil.Utot)。其中,g_o.ResultTypes.Soil.Utot为从计算结果中提取的参数类型,这里是土体的总位移,另有其他可选参数,如:['Utot''Ux', 'Uy', 'X', 'Y', 'dUx', 'dUy', 'dUtot', 'PUx', 'PUy', 'PUtot', ...]等,具体选取方法参考文档:土体输出结果类型

(21) 保存当前的项目至指定的文件夹,如果是Plaxis 2D项目,保存项目的后缀名为:p2d,Plaxis 3D项目保存项目后缀名为:p3d

下一章

下一章将针对更复杂的工程案例进行示例分析,同时根据官方文档详细说明官方文档和命令手册的使用方法。最后根据当前的示例,进一步分析Plaxis自动化脚本的设计理念和使用技巧。


Plaxis远程脚本教程一——总纲
https://www.eatrice.cn/post/Plaxis2DPythonAPIOne/
作者
吃白饭-EatRice
发布于
2022年3月16日
许可协议