1 引言
在打开FLAC3D时,偶然发现原来预加载PFC模块的信息不见了,于是想知道到底是把这个功能删除了,还是只是不显示信息了。经测试发现只是不显示信息了,功能还保留着。因此借此机会回顾一下程序之间的通讯方法。
8/07/2020的运行环境
2 FLAC3D与PFC之间的通讯
在《FLAC3D 7.0 新特性简介(P4)---软件集成》讨论过,FLAC3D集成了与PFC之间的通讯,但与其它程序还得通过socket进行通讯。当启动FLAC3D时,程序自动加载了PFC的DLL模块,用来实例化所有与PFC相关的模型分量。这些模块是:
program load module 'contact'
program load module 'pfc'
program load guimodule 'pfc'
program load module 'pfcthermal'
program load guimodule 'pfcthermal'
program load module 'ccfd'
program load guimodule 'ccfd'
program load module 'wallsel'
program load module 'wallzone'
3 通过FISH TCP Socket通讯
总的来说,程序之间的直接通讯是通过socket工具来实现的,socket工具是在FISH函数下运行的。FISH允许两个或多个程序作为独立的进程运行,使用socket连接(就像在互联网上的TCP/IP传输一样)交换数据。可以在同一程序的两个或多个实例之间传递数据(例如UDEC的两个实例),但主要用途是耦合不同的程序,FISH数组中包含的数据可以在两个程序之间任意方向传递。数据是以二进制方式传输的,因此没有精度损失。最多可以开放六个数据通道;这些通道可以存在于两个程序之间,也可以同时连接多个程序。这些工具包括:
socket.close
socket.create
socket.delete
socket.open
socket.read
socket.read.array
socket.write
socket.write.array
例如打开任一程序作为服务器端运行下面的代码:
fish def serve
array arr(3)
arr(1) = 1234
arr(2) = 57.89
arr(3) = 'hello from the server'
oo = socket.open(1,1)
oo = socket.write(arr,3,1)
oo = socket.read(arr,1,1)
oo = socket.close(1)
oo = io.out(arr(1))
end
@serve
然后打开另外任一程序作为客户端运行下面的代码:
fish def client
array arr(3)
oo = socket.open(0,1)
oo = socket.read(arr,3,1)
oo = io.out(' Received values ... ')
oo = io.out(' ' string(arr(1)))
oo = io.out(' ' string(arr(2)))
oo = io.out(' ' string(arr(3)))
arr(1) = 'greetings from the client'
oo = socket.write(arr,1,1)
oo = socket.close(1)
end
@client
就会接收到来自服务器端的数据。
顺便说一下,PFC还可以通过cfd connect实现与CFD之间的通讯。
4 通过Python p2pLink类通讯
除了使用传统的FISH socket进行通讯之外,现在还可以通过Python的p2pLink类进行通讯。其中p2pLinkServer是服务器端的类,p2pLinkClient是客户端的类。但不幸的是系统总是提示"cannot import name 'p2pLinkServer'"的错误信息,也就是说p2pLinkServer这个模块没有输入到环境中,不知道啥原因,安装路径按理说没有问题,使用import itasca as it也没有问题。
from itasca import p2pLinkServer
import numpy as np
with p2pLinkServer() as s:
s.start()
while True:
a = s.read_data()
if type(a) is int and a ==-1:
print("done")
break
print(f"got {a}")
if type(a) is np.ndarray:
print(a.shape)
本文相关文档:
FLAC3D 7.0 新特性简介(P4)---软件集成
FLAC3D与Python的集成 (1)---简述
Python 与 PLAXIS 的集成方法
清理Itasca软件的冗余数据