Skip to content

Commit b797fcc

Browse files
authored
Merge pull request #25 from precice/precice-v3-update
Make adapter compatible with preCICE v3.0.0
2 parents ce995e0 + 18eb7bf commit b797fcc

File tree

2 files changed

+52
-60
lines changed

2 files changed

+52
-60
lines changed

cht/adapter.comm

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,8 @@ adapter = Adapter(preciceConfigFile,
4747
BCs = [{'CHARGE': bc} for bc in BC]
4848
LOADS = BCs + adapter.LOADS
4949

50-
dt = adapter.initialize(INIT_T)
50+
adapter.initialize(INIT_T)
51+
dt = adapter.getMaxTimeStepSize()
5152

5253
# ==========================================================================================
5354
# ==========================================================================================
@@ -127,7 +128,8 @@ while adapter.isCouplingOngoing():
127128
)
128129

129130
adapter.writeCouplingData(T)
130-
dt = adapter.advance()
131+
adapter.advance()
132+
dt = adapter.getMaxTimeStepSize()
131133
adapter.readCheckpoint()
132134

133135
if adapter.isCouplingTimestepComplete():

cht/adapter.py

Lines changed: 48 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@ def __init__(self, preciceConfigFile, participantName, config, MESH, MODEL, MAT,
2020
self.LOADS = []
2121
self.isNonLinear = isNonLinear
2222
self.participantName = participantName
23-
self.preciceDt = -1
24-
self.precice = precice.Interface(participantName, preciceConfigFile, 0, 1)
23+
self.precice = precice.Participant(participantName, preciceConfigFile, 0, 1)
2524
self.configure(config)
2625

2726
def configure(self, config):
@@ -40,48 +39,44 @@ def configure(self, config):
4039
self.interfaces.append(interface)
4140

4241
def initialize(self, INIT_T):
43-
44-
self.preciceDt = self.precice.initialize()
45-
if self.precice.is_action_required(precice.action_write_initial_data()):
42+
if self.precice.requires_initial_data():
4643
self.writeCouplingData(INIT_T)
47-
self.precice.fulfilled_action(precice.action_write_initial_data())
48-
49-
self.precice.initialize_data()
50-
return self.preciceDt
44+
self.precice.initialize()
5145

5246
def isCouplingOngoing(self):
5347
return self.precice.is_coupling_ongoing()
5448

5549
def writeCouplingData(self, TEMP):
56-
if self.precice.is_write_data_required(self.preciceDt):
57-
for interface in self.interfaces:
58-
interface.writeBCs(TEMP)
50+
for interface in self.interfaces:
51+
interface.writeBCs(TEMP)
5952

6053
def readCouplingData(self):
61-
if self.precice.is_read_data_available():
62-
for interface in self.interfaces:
63-
interface.readAndUpdateBCs()
54+
for interface in self.interfaces:
55+
interface.readAndUpdateBCs()
6456

6557
def writeCheckpoint(self):
66-
if self.precice.is_action_required(precice.action_write_iteration_checkpoint()):
58+
if self.precice.requires_writing_checkpoint():
6759
# Do nothing
68-
self.precice.fulfilled_action(precice.action_write_iteration_checkpoint())
60+
pass
6961

7062
def readCheckpoint(self):
71-
if self.precice.is_action_required(precice.action_read_iteration_checkpoint()):
63+
if self.precice.requires_reading_checkpoint():
7264
# Do nothing
73-
self.precice.fulfilled_action(precice.action_read_iteration_checkpoint())
65+
pass
7466

7567
def isCouplingTimestepComplete(self):
7668
return self.precice.is_time_window_complete()
7769

7870
def advance(self):
79-
self.preciceDt = self.precice.advance(self.preciceDt)
80-
return self.preciceDt
71+
dt = self.precice.get_max_time_step_size()
72+
self.precice.advance(dt)
8173

8274
def finalize(self):
8375
self.precice.finalize()
8476

77+
def getMaxTimeStepSize(self):
78+
return self.precice.get_max_time_step_size()
79+
8580

8681
class Interface:
8782
def __init__(self, precice, participantName, names, MESH, SHMESH, MODEL, MAT, isNonLinear = False):
@@ -108,16 +103,9 @@ def __init__(self, precice, participantName, names, MESH, SHMESH, MODEL, MAT, is
108103
self.preciceNodeIndices = []
109104
self.preciceFaceCenterIndices = []
110105

111-
self.preciceFaceCentersMeshID = 0
112-
self.preciceNodesMeshID = 0
106+
self.readData = dict()
113107

114-
self.readHCoeffDataID = 0
115-
self.readTempDataID = 0
116-
self.writeHCoeffDataID = 0
117-
self.writeTempDataID = 0
118-
119-
self.writeTemp = []
120-
self.writeHCoeff = []
108+
self.writeDataNames = []
121109

122110
self.MESH = MESH
123111
# Shifted mesh (contains only the interface, and is shifted by delta in the direction opposite to the normal)
@@ -142,7 +130,14 @@ def configure(self, names):
142130

143131
self.computeNormals()
144132

145-
dims = self.precice.get_dimensions()
133+
nodes_mesh_dims = self.precice.get_mesh_dimensions(self.nodesMeshName)
134+
face_centers_mesh_dims = self.precice.get_mesh_dimensions(self.faceCentersMeshName)
135+
136+
if nodes_mesh_dims != face_centers_mesh_dims:
137+
raise ValueError("Dimensions of the read mesh and the write mesh do not match")
138+
else:
139+
# Set dimensions to nodes mesh dimensions
140+
dims = nodes_mesh_dims
146141

147142
self.nodeCoordinates = np.array([p for p in self.SHMESH.sdj.COORDO.VALE.get()])
148143
self.nodeCoordinates = np.resize(self.nodeCoordinates, (int(len(self.nodeCoordinates)/dims), dims))
@@ -153,7 +148,7 @@ def configure(self, names):
153148
self.faceCenterCoordinates = np.array([np.array([self.mesh.cn[node] for node in elem]).mean(0) for elem in self.connectivity])
154149
self.setVertices()
155150

156-
self.setDataIDs(names)
151+
self.setDataNames(names)
157152

158153
def computeNormals(self):
159154
# Get normals at the nodes
@@ -173,43 +168,35 @@ def computeNormals(self):
173168
)
174169
self.normals = N.EXTR_COMP().valeurs
175170

176-
dims = self.precice.get_dimensions()
171+
dims = self.precice.get_mesh_dimensions(self.nodesMeshName)
177172

178173
self.normals = np.resize(np.array(self.normals), (int(len(self.normals)/dims), dims))
179174
DETRUIRE(CONCEPT=({"NOM": N}, {"NOM": DUMMY}))
180175

181176
def setVertices(self):
182177
# Nodes
183-
self.preciceNodesMeshID = self.precice.get_mesh_id(self.nodesMeshName)
184-
self.preciceNodeIndices = self.precice.set_mesh_vertices(self.preciceNodesMeshID, self.nodeCoordinates)
178+
self.preciceNodeIndices = self.precice.set_mesh_vertices(self.nodesMeshName, self.nodeCoordinates)
185179
# Face centers
186-
self.preciceFaceCentersMeshID = self.precice.get_mesh_id(self.faceCentersMeshName)
187-
self.preciceFaceCenterIndices = self.precice.set_mesh_vertices(self.preciceFaceCentersMeshID, self.faceCenterCoordinates)
180+
self.preciceFaceCenterIndices = self.precice.set_mesh_vertices(self.faceCentersMeshName, self.faceCenterCoordinates)
188181

189-
def setDataIDs(self, names):
182+
def setDataNames(self, names):
190183
for writeDataName in names["write-data"]:
191-
if writeDataName.find("Heat-Transfer-Coefficient-") >= 0:
192-
self.writeHCoeffDataID = self.precice.get_data_id(writeDataName, self.preciceNodesMeshID)
193-
elif writeDataName.find("Sink-Temperature-") >= 0:
194-
self.writeTempDataID = self.precice.get_data_id(writeDataName, self.preciceNodesMeshID)
184+
if writeDataName.find("Heat-Transfer-Coefficient-Solid") >= 0:
185+
self.writeDataNames.append(writeDataName)
186+
elif writeDataName.find("Sink-Temperature-Solid") >= 0:
187+
self.writeDataNames.append(writeDataName)
195188
for readDataName in names["read-data"]:
196-
if readDataName.find("Heat-Transfer-Coefficient-") >= 0:
197-
self.readHCoeffDataID = self.precice.get_data_id(readDataName, self.preciceFaceCentersMeshID)
198-
elif readDataName.find("Sink-Temperature-") >= 0:
199-
self.readTempDataID = self.precice.get_data_id(readDataName, self.preciceFaceCentersMeshID)
189+
if readDataName.find("Heat-Transfer-Coefficient-Fluid") >= 0:
190+
self.readData[readDataName] = None
191+
elif readDataName.find("Sink-Temperature-Fluid") >= 0:
192+
self.readData[readDataName] = None
200193

201194
def getPreciceNodeIndices(self):
202195
return self.preciceNodeIndices
203196

204197
def getPreciceFaceCenterIndices(self):
205198
return self.preciceFaceCenterIndices
206199

207-
def getPreciceNodesMeshID(self):
208-
return self.preciceNodesMeshID
209-
210-
def getPreciceFaceCentersMeshID(self):
211-
return self.preciceFaceCentersMeshID
212-
213200
def getNodeCoordinates(self):
214201
return self.nodeCoordinates
215202

@@ -245,14 +232,17 @@ def updateBCs(self, temp, hCoeff):
245232
1)
246233

247234
def readAndUpdateBCs(self):
248-
readHCoeff = self.precice.read_block_scalar_data(self.readHCoeffDataID, self.preciceFaceCenterIndices)
249-
readTemp = self.precice.read_block_scalar_data(self.readTempDataID, self.preciceFaceCenterIndices)
250-
self.updateBCs(readTemp, readHCoeff)
235+
dt = self.precice.get_max_time_step_size()
236+
for name in self.readData.keys():
237+
self.readData[name] = self.precice.read_data(self.faceCentersMeshName, name, self.preciceFaceCenterIndices, dt)
238+
239+
self.updateBCs(self.readData["Sink-Temperature-Fluid"], self.readData["Heat-Transfer-Coefficient-Fluid"])
251240

252241
def writeBCs(self, TEMP):
253242
writeTemp, writeHCoeff = self.getBoundaryValues(TEMP)
254-
self.precice.write_block_scalar_data(self.writeHCoeffDataID, self.preciceNodeIndices, writeHCoeff)
255-
self.precice.write_block_scalar_data(self.writeTempDataID, self.preciceNodeIndices, writeTemp)
243+
244+
self.precice.write_data(self.nodesMeshName, self.writeDataNames[0], self.preciceNodeIndices, writeHCoeff)
245+
self.precice.write_data(self.nodesMeshName, self.writeDataNames[1], self.preciceNodeIndices, writeTemp)
256246

257247
def getBoundaryValues(self, T):
258248

@@ -271,7 +261,7 @@ def setLoad(self, LOAD):
271261
self.LOAD = LOAD
272262

273263
def shiftMesh(self):
274-
dims = self.precice.get_dimensions()
264+
dims = self.precice.get_mesh_dimensions(self.nodesMeshName)
275265
coords = [p for p in self.SHMESH.sdj.COORDO.VALE.get()]
276266
for i in range(len(self.normals)):
277267
for c in range(dims):

0 commit comments

Comments
 (0)