我有Ubuntu的LTS 16.04上的Windows 7的服务器计算机上托管的虚拟框运行。我运行需要两个不同的软件(OpenFOAM和PFC3D)之间耦合的耦合的模拟。这里是我的客户端和服务器的代码:
客户:
from itasca import p2pLinkClient
import numpy as np
from pyDemFoam import pyDemIcoFoam
solver = pyDemIcoFoam()
with p2pLinkClient() as pfc_link:
pfc_link.connect("10.0.2.2")
pfc_link.send_data(solver.nodes())
pfc_link.send_data(solver.elements())
pfc_link.send_data(solver.rho())
pfc_link.send_data(solver.mu())
while True:
print "waiting for run time"
deltat = pfc_link.read_data()
if deltat == 0.0:
print "solve finished"
break
print "got run time", deltat
solver.n(pfc_link.read_data())
solver.f(pfc_link.read_data())
print "got runtime and data"
solver.set_dt(deltat)
solver.solve(deltat)
print "sending data to pfc"
pfc_link.send_data(solver.p()*solver.rho())
pfc_link.send_data(solver.gradp()*solver.rho())
pfc_link.send_data(solver.U())
print "send finished"
服务器:
import itasca as it
from itasca import cfdarray as ca
from itasca.util import p2pLinkServer
import numpy as np
with p2pLinkServer() as cfd_link:
cfd_link.start()
nodes = cfd_link.read_data()
elements = cfd_link.read_data()
fluid_density = cfd_link.read_data()
fluid_viscosity = cfd_link.read_data()
print fluid_density, fluid_viscosity
nmin, nmax = np.amin(nodes,axis=0), np.amax(nodes,axis=0)
diag = np.linalg.norm(nmin-nmax)
dmin, dmax = nmin -0.1*diag, nmax+0.1*diag
print dmin, dmax
it.command("""
new
domain extent {} {} {} {} {} {}
""".format(dmin[0], dmax[0],
dmin[1], dmax[1],
dmin[2], dmax[2]))
ca.create_mesh(nodes, elements)
it.command("""
config cfd
set timestep max 1e-5
element cfd ini density {}
element cfd ini visc {}
cfd porosity poly
cfd buoy on
ball create rad 0.005 x 0.5 y 0.5 z 0.5
ball ini dens 2500
ball prop kn 1e2 ks 1e2 fric 0.25
set gravity 0 0 -9.81
def fluid_time
global fluid_time = mech.age
end
ball history id 1 zvelocity id 1
history add id 2 fish @fluid_time
plot clear
plot add hist 1 vs 2
plot add cfdelement shape arrow colorby vectorattribute "velocity"
""".format(fluid_density, fluid_viscosity))
element_volume = ca.volume()
dt = 0.005
for i in range(100):
it.command("solve age {}".format(it.mech_age()+dt))
print "sending solve time"
cfd_link.send_data(dt) # solve interval
cfd_link.send_data(ca.porosity())
cfd_link.send_data((ca.drag().T/element_volume).T/fluid_density)
print " cfd solve started"
ca.set_pressure(cfd_link.read_data())
ca.set_pressure_gradient(cfd_link.read_data())
ca.set_velocity(cfd_link.read_data())
print " cfd solve ended"
cfd_link.send_data(0.0) # solve interval
print "ball z velocity", it.ball.find(1).vel_z()
我跑进错误:Socket.Errno:[107]的Trasnport终点未连接,当我开始所耦合的计算。这个问题被张贴,并解决了MAC操作系统,但没有窗户。我试过MAC解决方案,但它并没有帮助。任何人都可以请帮助呢?
在Python代码客户端,IP地址是不允许进行连接。我曾尝试相同的例子,但在主机的Ubuntu,游客窗口组合。通过VirtualBox的创建静态IP我解决了这个问题。使用在pfc_link.connect("Static Ip of VBox")
上的代码客户端。