Skip to main content

System Coupling C++ library 2025 R1

SystemCoupling

Last update: 17.07.2025
1 /*
2 * Copyright ANSYS, Inc. Unauthorized use, distribution, or duplication is prohibited.
3 */
4 
5 #pragma once
6 
7 #include "SystemCouplingParticipant/LibraryType.hpp"
8 
9 #include "SystemCouplingParticipant/CommonTypes.hpp"
10 #include "SystemCouplingParticipant/CouplingInterface.hpp"
11 #include "SystemCouplingParticipant/FunctionTypes.hpp"
12 #include "SystemCouplingParticipant/Region.hpp"
13 #include "SystemCouplingParticipant/Parameter.hpp"
14 
15 #include <cstddef>
16 #include <string>
17 
18 namespace sysc {
19 
45 class SYSTEM_COUPLING_PARTICIPANT_DLL SystemCoupling {
46 public:
58 
68  SystemCoupling(std::size_t mpiCommunicator);
69 
78  const ParticipantInfo& participantInfo);
79 
90  const ParticipantInfo& participantInfo, std::size_t mpiCommunicator);
91 
117  const std::string& scHost,
118  unsigned short scPort,
119  const std::string& participantName,
120  const std::string& buildInformation = "Unknown");
121 
145  const std::string& scHost,
146  unsigned short scPort,
147  const std::string& participantName,
148  std::size_t mpiCommunicator,
149  const std::string& buildInformation);
150 
151  // \brief Provide a destructor for SystemCoupling object.
152  ~SystemCoupling();
153 
166  void completeSetup(const sysc::SetupInfo& setupInfo);
167 
180 
192 
199  bool doIteration();
200 
217  bool doTimeStep();
218 
238  void updateInputs();
239 
251 
255  void disconnect();
256 
258  void fatalError(const std::string& errorMessage);
259 
274  void addRegion(const Region& region);
275 
295  void addInputParameter(Parameter parameter);
296 
317  void addOutputParameter(Parameter parameter);
318 
336  void addRealAttribute(const RealAttribute& realAttribute);
337 
355  void addIntegerAttribute(const IntegerAttribute& integerAttribute);
356 
377  void addCouplingInterface(const CouplingInterface& couplingInterface);
378 
404  const CouplingInterface& couplingInterface,
405  bool autoGenerateTransfers);
406 
413  double getParameterValue(const ParameterName& parameterName);
414 
422  const ParameterName& parameterName,
423  double value);
424 
431  double getRealAttributeValue(const AttributeName& attributeName);
432 
439  int64_t getIntegerAttributeValue(const AttributeName& attributeName);
440 
448 
458  OpaqueDataAccess opaqueDataAccess,
460 
468 
478  OpaqueDataAccess opaqueDataAccess,
480 
488 
498  OpaqueDataAccess opaqueDataAccess,
500 
508 
518  OpaqueDataAccess opaqueDataAccess,
520 
528  InputComplexScalarDataAccess* dataAccess);
529 
539  OpaqueDataAccess opaqueDataAccess,
541 
549  InputComplexVectorDataAccess* dataAccess);
550 
560  OpaqueDataAccess opaqueDataAccess,
562 
570  OutputComplexScalarDataAccess* dataAccess);
571 
581  OpaqueDataAccess opaqueDataAccess,
583 
591  OutputComplexVectorDataAccess* dataAccess);
592 
602  OpaqueDataAccess opaqueDataAccess,
604 
612 
622  OpaqueDataAccess opaqueDataAccess,
623  SurfaceMeshAccessWithPointer* meshAccess);
624 
625  void registerZoneCountAccess(
626  OpaqueDataAccess opaqueDataAccess,
627  ZoneCountAccess* zoneCountAccess);
628 
629  void registerSurfaceMeshAccess(
630  OpaqueDataAccess opaqueDataAccess,
631  SurfaceMeshMultiZoneAccess* dataAccess);
632 
633  void registerVolumeMeshAccess(
634  OpaqueDataAccess opaqueDataAccess,
635  VolumeMeshMultiZoneAccess* dataAccess);
636 
637  void registerInputScalarDataAccess(
638  OpaqueDataAccess opaqueDataAccess,
639  InputScalarDataMultiZoneAccess* dataAccess);
640 
641  void registerOutputScalarDataAccess(
642  OpaqueDataAccess opaqueDataAccess,
643  OutputScalarDataMultiZoneAccess* dataAccess);
644 
645  void registerInputVectorDataAccess(
646  OpaqueDataAccess opaqueDataAccess,
647  InputVectorDataMultiZoneAccess* dataAccess);
648 
658  OpaqueDataAccess opaqueDataAccess,
659  OutputVectorDataMultiZoneAccess* dataAccess);
660 
668 
678  OpaqueDataAccess opaqueDataAccess,
679  VolumeMeshAccessWithPointer* meshAccess);
680 
688 
699  OpaqueDataAccess opaqueDataAccess,
700  PointCloudAccessWithPointer* pointCloudAccess);
701 
712  OpaqueDataAccess opaqueDataAccess,
713  PointCloudMultiZoneAccess* pointCloudAccess);
714 
723 
732 
741  OpaqueDataAccess opaqueDataAccess,
742  TargetDataCreationWithPointer* targetDataCreation);
743 
755  bool writeSetupFile(const SetupFileInfo& setupFileInfo) const;
756 
758  void writeResults(const ResultsInfo& resultsInfo) const;
759 
765  std::size_t getNumRegions() const;
766 
774  const Region& getAddedRegion(std::size_t index) const;
775 
778 
784  std::size_t getNumCouplingInterfaces() const;
785 
793  const CouplingInterface& getAddedCouplingInterface(std::size_t index) const;
794 
802  const Parameter& getInputParameter(std::size_t index) const;
803 
811  const Parameter& getOutputParameter(std::size_t index) const;
812 
818  std::size_t getNumInputParameters() const;
819 
825  std::size_t getNumOutputParameters() const;
826 
832  std::size_t getNumRealAttributes() const;
833 
839  std::size_t getNumIntegerAttributes() const;
840 
848  const RealAttribute& getRealAttribute(std::size_t index) const;
849 
857  const IntegerAttribute& getIntegerAttribute(std::size_t index) const;
858 
859  /* Deprecated functions */
860 
864 
868 
871 
874 
877 
880 
883 
885  MeshValidityStatus checkMeshValidity(const std::string& regionName);
886 
888  const Region& getRegion(std::size_t index) const;
889 
891  SystemCoupling(const SystemCoupling&) = delete;
892 
895 
898 
901 };
902 
905 } // namespace sysc
Provide a class for a coupling interface.
Provide a class for an integer-valued attribute.
Definition: Attribute.hpp:82
Provide a class for a System Coupling parameter.
Definition: Parameter.hpp:18
Provide a class for a real-valued attribute.
Definition: Attribute.hpp:23
Provide a class for a System Coupling region.
Definition: Region.hpp:30
Provide the main class for interacting with the System Coupling participant library.
SystemCoupling(std::size_t mpiCommunicator)
Provide a constructor for the SystemCoupling class for non-cosimulation mode with a custom MPI commun...
void registerPointCloudAccess(PointCloudAccess *pointCloudAccess)
Provide a function to register point cloud access.
void registerOutputComplexScalarDataAccess(OpaqueDataAccess opaqueDataAccess, OutputComplexScalarDataAccessWithPointer *dataAccess)
Provide a function to register output complex scalar data access.
bool doIteration()
Provide a function to check whether to do a coupling iteration.
SystemCoupling & operator=(SystemCoupling &&)=default
Provide the move-assign operator.
void addInputParameter(Parameter parameter)
Provide a method to add an input parameter that could be used in a coupled analysis.
void registerTargetDataCreation(TargetDataCreation *targetDataCreation)
Provide a function to register a target data creation callback.
void registerSurfaceMeshAccess(OpaqueDataAccess opaqueDataAccess, SurfaceMeshAccessWithPointer *meshAccess)
Provide a function to register surface mesh access.
SystemCoupling(const std::string &scHost, unsigned short scPort, const std::string &participantName, std::size_t mpiCommunicator, const std::string &buildInformation)
Provide a constructor for the SystemCoupling class for cosimulation mode with a custom MPI communicat...
void registerPointCloudAccess(OpaqueDataAccess opaqueDataAccess, PointCloudMultiZoneAccess *pointCloudAccess)
Provide a function to register point cloud access.
void completeSetup(const sysc::SetupInfo &setupInfo)
Provide a function to notify System Coupling that setup can be completed.
void registerOutputScalarVariableAccess(OutputScalarVariableAccess *dataAccess)
Deprecated - do not use.
SystemCoupling(const ParticipantInfo &participantInfo, std::size_t mpiCommunicator)
Provide a constructor for the SystemCoupling class with an mpiCommunicator object set to non default.
bool doTimeStep()
Provide a function to check whether to do a coupling time step.
void registerInputVectorDataAccess(OpaqueDataAccess opaqueDataAccess, InputVectorDataAccessWithPointer *dataAccess)
Provide a function to register input vector data access.
bool writeSetupFile(const SetupFileInfo &setupFileInfo) const
Provide a function to write the setup file.
void updateOutputs(ConvergenceStatus status)
Provide a function to update the participants output variables.
const IntegerAttribute & getIntegerAttribute(std::size_t index) const
Provide a function to return integer attribute information.
int64_t getIntegerAttributeValue(const AttributeName &attributeName)
Provide a function to get an IntegerAttribute value.
void disconnect()
Provide a function to end the analysis and disconnect from System Coupling.
std::size_t getNumInputParameters() const
Provide a function to return the number of input parameters.
void registerInputComplexVectorDataAccess(InputComplexVectorDataAccess *dataAccess)
Provide a function to register input complex vector data access.
void registerInputScalarDataAccess(InputScalarDataAccess *dataAccess)
Provide a function to register input scalar data access.
void registerInputScalarDataAccess(OpaqueDataAccess opaqueDataAccess, InputScalarDataAccessWithPointer *dataAccess)
Provide a function to register input scalar data access.
SystemCoupling(const std::string &scHost, unsigned short scPort, const std::string &participantName, const std::string &buildInformation="Unknown")
Provide a constructor for the SystemCoupling class for cosimulation mode.
SystemCoupling(const SystemCoupling &)=delete
Delete the copy-constructor.
void registerVolumeMeshAccess(VolumeMeshAccess *meshAccess)
Provide a function to register volume mesh access.
sysc::TimeStep getCurrentTimeStep()
Provide a function to get current time step.
std::size_t getNumOutputParameters() const
Provide a function to return the number of output parameters.
void registerOutputComplexVectorDataAccess(OutputComplexVectorDataAccess *dataAccess)
Provide a function to register output complex vector data access.
void completeCouplingSetup()
This function will be deprecated. Use completeSetup() instead.
void registerOutputComplexScalarDataAccess(OutputComplexScalarDataAccess *dataAccess)
Provide a function to register output complex scalar data access.
void registerPointCloudAccess(OpaqueDataAccess opaqueDataAccess, PointCloudAccessWithPointer *pointCloudAccess)
Provide a function to register point cloud access.
void registerInputVectorVariableAccess(InputVectorVariableAccess *dataAccess)
Deprecated - do not use.
void registerTargetDataCreation(OpaqueDataAccess opaqueDataAccess, TargetDataCreationWithPointer *targetDataCreation)
Provide a function to register a target data creation callback.
void registerOutputVectorDataAccess(OpaqueDataAccess opaqueDataAccess, OutputVectorDataMultiZoneAccess *dataAccess)
Provide a function to register output vector data access.
std::size_t getNumRealAttributes() const
Provide a function to return the number of real attributes.
void registerInputScalarVariableAccess(InputScalarVariableAccess *dataAccess)
Deprecated - do not use.
std::size_t getNumCouplingInterfaces() const
Provide a function to return the number of coupling interfaces.
void registerOutputComplexVectorDataAccess(OpaqueDataAccess opaqueDataAccess, OutputComplexVectorDataAccessWithPointer *dataAccess)
Provide a function to register output complex vector data access.
void addIntegerAttribute(const IntegerAttribute &integerAttribute)
Provide a method to add an integer attribute that could be used in a coupled analysis.
void registerInputComplexScalarDataAccess(OpaqueDataAccess opaqueDataAccess, InputComplexScalarDataAccessWithPointer *dataAccess)
Provide a function to register input complex scalar data access.
const CouplingInterface & getAddedCouplingInterface(std::size_t index) const
Provide a function to return coupling interface.
MeshValidityStatus checkMeshValidity(const Region &region)
Deprecated. Use sysc::SurfaceMesh::checkMeshValidity instead.
SystemCoupling(SystemCoupling &&)=default
Provide the move-constructor.
double getRealAttributeValue(const AttributeName &attributeName)
Provide a function to get a RealAttribute value.
void updateInputs()
Provide a function to update the participants input variables.
void fatalError(const std::string &errorMessage)
Provide a function to notify System Coupling about a fatal error.
SystemCoupling(const ParticipantInfo &participantInfo)
Provide a constructor for the SystemCoupling class with a custom struct representing the default inpu...
SystemCoupling()
Provide a (default) constructor for the SystemCoupling class for non-cosimulation mode.
void registerRestartPointCreation(RestartPointCreation *restartPointCreation)
Provide a function to register a restart point creation callback.
void registerInputVectorDataAccess(InputVectorDataAccess *dataAccess)
Provide a function to register input vector data access.
void addRealAttribute(const RealAttribute &realAttribute)
Provide a method to add a real attribute that could be used in a coupled analysis.
void initializeAnalysis()
Provide a function to notify System Coupling that analysis initialization can be completed.
void registerOutputVectorVariableAccess(OutputVectorVariableAccess *dataAccess)
Deprecated - do not use.
const Region & getRegion(std::size_t index) const
Deprecated. Use getAddedRegion() instead.
void registerOutputVectorDataAccess(OutputVectorDataAccess *dataAccess)
Provide a function to register output vector data access.
void registerInputComplexVectorDataAccess(OpaqueDataAccess opaqueDataAccess, InputComplexVectorDataAccessWithPointer *dataAccess)
Provide a function to register input complex vector data access.
MeshValidityStatus checkMeshValidity(const std::string &regionName)
Deprecated. Use sysc::SurfaceMesh::checkMeshValidity instead.
void writeResults(const ResultsInfo &resultsInfo) const
Write results to a file.
void setParameterValue(const ParameterName &parameterName, double value)
Provide a function to set a Parameter value.
const Parameter & getOutputParameter(std::size_t index) const
Provide a function to return output parameter information.
SolutionControl getSolutionControl() const
Get solution control.
void registerVolumeMeshAccess(OpaqueDataAccess opaqueDataAccess, VolumeMeshAccessWithPointer *meshAccess)
Provide a function to register volume mesh access.
void registerOutputScalarDataAccess(OpaqueDataAccess opaqueDataAccess, OutputScalarDataAccessWithPointer *dataAccess)
Provide a function to register output scalar data access.
const RealAttribute & getRealAttribute(std::size_t index) const
Provide a function to return real attribute information.
const Region & getAddedRegion(std::size_t index) const
Provide a function to return region information.
void registerOutputScalarDataAccess(OutputScalarDataAccess *dataAccess)
Provide a function to register output scalar data access.
void completeCouplingSetup(sysc::AnalysisType analysisType)
This function will be deprecated. Use completeSetup() instead.
void addCouplingInterface(const CouplingInterface &couplingInterface, bool autoGenerateTransfers)
Provide a function to add a coupling interface.
void addCouplingInterface(const CouplingInterface &couplingInterface)
Provide a function to add a coupling interface.
void registerInputComplexScalarDataAccess(InputComplexScalarDataAccess *dataAccess)
Provide a function to register input complex scalar data access.
void registerOutputVectorDataAccess(OpaqueDataAccess opaqueDataAccess, OutputVectorDataAccessWithPointer *dataAccess)
Provide a function to register output vector data access.
std::size_t getNumIntegerAttributes() const
Provide a function to return the number of integer attributes.
double getParameterValue(const ParameterName &parameterName)
Provide a function to get a Parameter value.
void addOutputParameter(Parameter parameter)
Provide a method to add an output parameter that could be used in a coupled analysis.
std::size_t getNumRegions() const
Provide a function to return the number of regions.
SystemCoupling & operator=(const SystemCoupling &)=delete
Delete the copy-assign operator.
void registerSurfaceMeshAccess(SurfaceMeshAccess *meshAccess)
Provide a function to register surface mesh access.
void addRegion(const Region &region)
Provide a function to add a region that could be used in a coupled analysis.
const Parameter & getInputParameter(std::size_t index) const
Provide a function to return input parameter information.
OutputScalarData(OpaqueDataAccess, const RegionName &, const VariableName &) OutputScalarDataAccessWithPointer
Provide function prototype for access to output scalar data.
ConvergenceStatus
Provide enum for participant's solver convergence status.
Definition: CommonTypes.hpp:27
InputComplexVectorData(const RegionName &, const VariableName &) InputComplexVectorDataAccess
Provide function prototype for access to input complex vector data.
InputVectorData(OpaqueDataAccess, const RegionName &, const VariableName &) InputVectorDataAccessWithPointer
Provide function prototype for access to input vector data.
PointCloud(const RegionName &) PointCloudAccess
Provide alias for function that provides access to point cloud.
PointCloud(OpaqueDataAccess, const RegionName &) PointCloudAccessWithPointer
Provide alias for function that provides access to point cloud.
PointCloud(OpaqueDataAccess, const RegionName &, std::uint16_t zoneIndex) PointCloudMultiZoneAccess
Provide alias for function that provides access to point cloud.
void * OpaqueDataAccess
TargetDataLocation(bool) TargetDataCreation
Provide an alias for function prototype that write target data.
SurfaceMesh(const RegionName &) SurfaceMeshAccess
Provide alias for function that provides access to surface mesh.
InputScalarData(OpaqueDataAccess, const RegionName &, const VariableName &) InputScalarDataAccessWithPointer
Provide function prototype for access to input scalar data.
OutputVectorData(const RegionName &, const VariableName &) OutputVectorDataAccess
Provide function prototype for access to output vector data.
InputScalarData(OpaqueDataAccess, const RegionName &, const VariableName &, std::uint16_t zoneIndex) InputScalarDataMultiZoneAccess
Function prototype to get the input scalar data, given region name and zone index.
OutputVectorData(OpaqueDataAccess, const RegionName &, const VariableName &, std::uint16_t zoneIndex) OutputVectorDataMultiZoneAccess
Function prototype to get the input vector data, given region name and zone index.
OutputVectorData(const std::string &, const std::string &) OutputVectorVariableAccess
This alias will be deprecated - use OutputVectorDataAccess instead.
InputVectorData(OpaqueDataAccess, const RegionName &, const VariableName &, std::uint16_t zoneIndex) InputVectorDataMultiZoneAccess
Function prototype to get the input vector data, given region name and zone index.
TargetDataLocation(OpaqueDataAccess, bool) TargetDataCreationWithPointer
Provide an alias for function prototype that write target data.
std::uint16_t(OpaqueDataAccess, const RegionName &) ZoneCountAccess
Function prototype to get the number of zones for a given region.
VolumeMesh(OpaqueDataAccess, const RegionName &) VolumeMeshAccessWithPointer
Provide alias for function that provides access to volume mesh.
OutputComplexScalarData(OpaqueDataAccess, const RegionName &, const VariableName &) OutputComplexScalarDataAccessWithPointer
Provide function prototype for access to output complex scalar data.
SurfaceMesh(OpaqueDataAccess, const RegionName &, std::uint16_t zoneIndex) SurfaceMeshMultiZoneAccess
Function prototype to get the mesh zone, given region name and zone index.
VolumeMesh(const RegionName &) VolumeMeshAccess
Provide alias for function that provides access to volume mesh.
InputScalarData(const RegionName &, const VariableName &) InputScalarDataAccess
Provide function prototype for access to input scalar data.
OutputVectorData(OpaqueDataAccess, const RegionName &, const VariableName &) OutputVectorDataAccessWithPointer
Provide function prototype for access to output vector data.
OutputScalarData(const std::string &, const std::string &) OutputScalarVariableAccess
This alias will be deprecated - use OutputScalarDataAccess instead.
RestartPoint() RestartPointCreation
Provide an alias for function prototype that creates restart points.
InputComplexScalarData(OpaqueDataAccess, const RegionName &, const VariableName &) InputComplexScalarDataAccessWithPointer
Provide function prototype for access to input complex scalar data.
InputVectorData(const std::string &, const std::string &) InputVectorVariableAccess
This alias will be deprecated - use InputVectorDataAccess instead.
std::string ParameterName
OutputComplexVectorData(OpaqueDataAccess, const RegionName &, const VariableName &) OutputComplexVectorDataAccessWithPointer
Provide function prototype for access to output complex vector data.
OutputScalarData(OpaqueDataAccess, const RegionName &, const VariableName &, std::uint16_t zoneIndex) OutputScalarDataMultiZoneAccess
Function prototype to get the output scalar data, given region name and zone index.
InputVectorData(const RegionName &, const VariableName &) InputVectorDataAccess
Provide function prototype for access to input vector data.
InputScalarData(const std::string &, const std::string &) InputScalarVariableAccess
This alias will be deprecated - use InputScalarDataAccess instead.
InputComplexScalarData(const RegionName &, const VariableName &) InputComplexScalarDataAccess
Provide function prototype for access to input complex scalar data.
std::string AttributeName
OutputComplexScalarData(const RegionName &, const VariableName &) OutputComplexScalarDataAccess
Provide function prototype for access to output complex scalar data.
OutputComplexVectorData(const RegionName &, const VariableName &) OutputComplexVectorDataAccess
Provide function prototype for access to output complex vector data.
SurfaceMesh(OpaqueDataAccess, const RegionName &) SurfaceMeshAccessWithPointer
Provide alias for function that provides access to surface mesh.
InputComplexVectorData(OpaqueDataAccess, const RegionName &, const VariableName &) InputComplexVectorDataAccessWithPointer
Provide function prototype for access to input complex vector data.
VolumeMesh(OpaqueDataAccess, const RegionName &, std::uint16_t zoneIndex) VolumeMeshMultiZoneAccess
Function prototype to get the mesh zone, given region name and zone index.
OutputScalarData(const RegionName &, const VariableName &) OutputScalarDataAccess
Provide function prototype for access to output scalar data.
AnalysisType
Provide an enum for coupled analysis type.
Provide a struct that contains information about mesh validity.
provide a structure for the participant information needed to connect to a System Coupling object
Provide a structure for writing System Coupling results files.
Provide a structure for writing System Coupling setup files.
Provide a structure for System Coupling setup information.
Definition: CommonTypes.hpp:64
Provide a structure containing solution control.
Definition: CommonTypes.hpp:58
Provide a struct for time step.
Definition: CommonTypes.hpp:42

Connect with Ansys