8#include "precice/impl/versions.hpp"
13#pragma GCC diagnostic push
14#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
17#pragma clang diagnostic push
18#pragma clang diagnostic ignored "-Wdeprecated-declarations"
25static std::string errormsg =
"preCICE has not been created properly. Be sure to call \"precicec_createParticipant\" or \"precicec_createParticipant_withCommunicator\" before any other call to preCICE.";
26static std::string errormsgCreate =
"preCICE has been created already! Be sure to call either \"precicec_createParticipant\" or \"precicec_createParticipant_withCommunicator\" exactly once.";
29 const char *participantName,
30 const char *configFileName,
31 int solverProcessIndex,
32 int solverProcessSize,
46 const char *participantName,
47 const char *configFileName,
48 int solverProcessIndex,
49 int solverProcessSize)
71 impl->advance(computedTimeStepSize);
88 return impl->getMeshDimensions(meshName);
97 return impl->getDataDimensions(meshName, dataName);
106 if (
impl->isCouplingOngoing()) {
118 if (
impl->isTimeWindowComplete()) {
129 return impl->getMaxTimeStepSize();
138 return impl->requiresInitialData() ? 1 : 0;
147 return impl->requiresWritingCheckpoint() ? 1 : 0;
156 return impl->requiresReadingCheckpoint() ? 1 : 0;
165 if (
impl->requiresMeshConnectivityFor(meshName)) {
177 impl->resetMesh(meshName);
183 const char *meshName,
184 const double *position)
187 auto size =
static_cast<long unsigned>(
impl->getMeshDimensions(meshName));
188 return impl->setMeshVertex(meshName, {position, size});
195 const char *meshName,
197 const double *positions,
201 auto idsSize =
static_cast<long unsigned>(size);
202 auto posSize =
static_cast<long unsigned>(
impl->getMeshDimensions(meshName) * size);
203 impl->setMeshVertices(meshName, {positions, posSize}, {ids, idsSize});
209 const char *meshName)
212 return impl->getMeshVertexSize(meshName);
219 const char *meshName,
224 impl->setMeshEdge(meshName, firstVertexID, secondVertexID);
230 const char *meshName,
235 auto verticesSize =
static_cast<long unsigned>(size) * 2;
236 impl->setMeshEdges(meshName, {vertices, verticesSize});
242 const char *meshName,
248 impl->setMeshTriangle(meshName, firstVertexID, secondVertexID, thirdVertexID);
254 const char *meshName,
259 auto verticesSize =
static_cast<long unsigned>(size) * 3;
260 impl->setMeshTriangles(meshName, {vertices, verticesSize});
266 const char *meshName,
273 impl->setMeshQuad(meshName, firstVertexID, secondVertexID, thirdVertexID, fourthVertexID);
279 const char *meshName,
284 auto verticesSize =
static_cast<long unsigned>(size) * 4;
285 impl->setMeshQuads(meshName, {vertices, verticesSize});
291 const char *meshName,
298 impl->setMeshTetrahedron(meshName, firstVertexID, secondVertexID, thirdVertexID, fourthVertexID);
304 const char *meshName,
309 auto verticesSize =
static_cast<long unsigned>(size) * 4;
310 impl->setMeshTetrahedra(meshName, {vertices, verticesSize});
316 const char *meshName,
317 const char *dataName,
319 const int *valueIndices,
320 const double *values)
323 auto dataSize = size *
impl->getDataDimensions(meshName, dataName);
324 impl->writeData(meshName, dataName, {valueIndices,
static_cast<unsigned long>(size)}, {values,
static_cast<unsigned long>(dataSize)});
330 const char *meshName,
331 const char *dataName,
333 const int *valueIndices,
334 double relativeReadTime,
338 auto dataSize = size *
impl->getDataDimensions(meshName, dataName);
339 impl->readData(meshName, dataName, {valueIndices,
static_cast<unsigned long>(size)}, relativeReadTime, {values,
static_cast<unsigned long>(dataSize)});
345 const char *meshName,
346 const char *dataName,
348 const double *coordinates,
349 const double *values)
352 auto coordinatesSize = size *
impl->getMeshDimensions(meshName);
353 auto dataSize = size *
impl->getDataDimensions(meshName, dataName);
354 impl->writeAndMapData(meshName, dataName, {coordinates,
static_cast<unsigned long>(coordinatesSize)}, {values,
static_cast<unsigned long>(dataSize)});
360 const char *meshName,
361 const char *dataName,
363 const double *coordinates,
364 double relativeReadTime,
368 auto coordinatesSize = size *
impl->getMeshDimensions(meshName);
369 auto dataSize = size *
impl->getDataDimensions(meshName, dataName);
370 impl->mapAndReadData(meshName, dataName, {coordinates,
static_cast<unsigned long>(coordinatesSize)}, relativeReadTime, {values,
static_cast<unsigned long>(dataSize)});
376 const char *dataName)
379 if (
impl->requiresGradientDataFor(meshName, dataName)) {
389 const char *meshName,
390 const char *dataName,
392 const int *valueIndices,
393 const double *gradients)
396 auto gradientComponents =
impl->getDataDimensions(meshName, dataName) *
impl->getMeshDimensions(meshName);
397 auto gradientSize = size * gradientComponents;
398 impl->writeGradientData(meshName, dataName, {valueIndices,
static_cast<unsigned long>(size)}, {gradients,
static_cast<unsigned long>(gradientSize)});
405 return precice::versionInformation;
409 const char *meshName,
410 const double *boundingBox)
412 auto bbSize =
static_cast<long unsigned>(
impl->getMeshDimensions(meshName)) * 2;
413 impl->setMeshAccessRegion(meshName, {boundingBox, bbSize});
419 const char *meshName,
424 auto coordinatesSize =
static_cast<long unsigned>(
impl->getMeshDimensions(meshName) * size);
425 impl->getMeshVertexIDsAndCoordinates(meshName, {ids,
static_cast<unsigned long>(size)}, {coordinates, coordinatesSize});
432 impl->startProfilingSection(sectionName);
439 impl->stopLastProfilingSection();
445#pragma GCC diagnostic pop
448#pragma clang diagnostic pop
#define PRECICE_CHECK(check,...)
This class provides a lightweight logger.
double precicec_getMaxTimeStepSize()
Returns maximum allowed time step size.
void precicec_stopLastProfilingSection()
static precice::logging::Logger _log("precicec")
void precicec_setMeshTriangles(const char *meshName, int size, const int *vertices)
Sets multiple mesh triangles from vertex IDs.
void precicec_setMeshTetrahedra(const char *meshName, int size, const int *vertices)
Sets multiple mesh tetrahedra from vertex IDs.
int precicec_requiresReadingCheckpoint()
int precicec_isTimeWindowComplete()
Returns true (->1), if the coupling time window is completed.
static std::string errormsgCreate
void precicec_writeData(const char *meshName, const char *dataName, int size, const int *valueIndices, const double *values)
Writes vector data values given as block.
void precicec_readData(const char *meshName, const char *dataName, int size, const int *valueIndices, double relativeReadTime, double *values)
Reads vector data values given as block.
int precicec_getDataDimensions(const char *meshName, const char *dataName)
Returns the spatial dimensionality of the given data on the given mesh.
void precicec_setMeshEdge(const char *meshName, int firstVertexID, int secondVertexID)
Sets mesh edge from vertex IDs.
void precicec_createParticipant(const char *participantName, const char *configFileName, int solverProcessIndex, int solverProcessSize)
Creates the coupling interface and configures it.
void precicec_setMeshQuad(const char *meshName, int firstVertexID, int secondVertexID, int thirdVertexID, int fourthVertexID)
Sets surface mesh quadrangle from vertex IDs.
static std::unique_ptr< precice::Participant > impl
int precicec_getMeshDimensions(const char *meshName)
Returns the spatial dimensionality of the given mesh.
void precicec_writeAndMapData(const char *meshName, const char *dataName, int size, const double *coordinates, const double *values)
Writes data using just-in-time data mapping See.
void precicec_resetMesh(const char *meshName)
Removes all vertices and connectivity information from the mesh.
void precicec_initialize()
Initiates the coupling to the coupling supervisor and initializes coupling data.
void precicec_mapAndReadData(const char *meshName, const char *dataName, int size, const double *coordinates, double relativeReadTime, double *values)
Reads data using just-in-time data mapping. See.
static std::string errormsg
void precicec_setMeshEdges(const char *meshName, int size, const int *vertices)
Sets multiple mesh edge from vertex IDs.
int precicec_requiresInitialData()
int precicec_isCouplingOngoing()
Returns true (->1), if the coupled simulation is ongoing.
int precicec_getMeshVertexSize(const char *meshName)
Returns the number of vertices of a mesh.
void precicec_writeGradientData(const char *meshName, const char *dataName, int size, const int *valueIndices, const double *gradients)
Writes vector gradient data to a mesh.
void precicec_setMeshAccessRegion(const char *meshName, const double *boundingBox)
See precice::Participant::setMeshAccessRegion().
void precicec_setMeshTriangle(const char *meshName, int firstVertexID, int secondVertexID, int thirdVertexID)
Sets a triangle from vertex IDs. Creates missing edges.
int precicec_setMeshVertex(const char *meshName, const double *position)
Creates a mesh vertex.
void precicec_finalize()
Finalizes the coupling to the coupling supervisor.
int precicec_requiresMeshConnectivityFor(const char *meshName)
void precicec_setMeshVertices(const char *meshName, int size, const double *positions, int *ids)
Creates multiple mesh vertices.
void precicec_advance(double computedTimeStepSize)
Exchanges data between solver and coupling supervisor.
void precicec_createParticipant_withCommunicator(const char *participantName, const char *configFileName, int solverProcessIndex, int solverProcessSize, void *communicator)
void precicec_setMeshQuads(const char *meshName, int size, const int *vertices)
Sets multiple mesh quads from vertex IDs.
int precicec_requiresGradientDataFor(const char *meshName, const char *dataName)
Checks if the given data set requires gradient data. We check if the data object has been initialized...
void precicec_getMeshVertexIDsAndCoordinates(const char *meshName, const int size, int *ids, double *coordinates)
See precice::Participant::getMeshVertexIDsAndCoordinates().
int precicec_requiresWritingCheckpoint()
void precicec_startProfilingSection(const char *sectionName)
void precicec_setMeshTetrahedron(const char *meshName, int firstVertexID, int secondVertexID, int thirdVertexID, int fourthVertexID)
Sets mesh tetrahedron from vertex IDs.
const char * precicec_getVersionInformation()
Returns information on the version of preCICE.
C language bindings to main Application Programming Interface of preCICE.