ansys-systemcoupling-core 0.4.dev0__py3-none-any.whl → 0.5.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of ansys-systemcoupling-core might be problematic. Click here for more details.

Files changed (127) hide show
  1. ansys/systemcoupling/core/__init__.py +44 -8
  2. ansys/systemcoupling/core/adaptor/api_23_1/_clear_state.py +13 -0
  3. ansys/systemcoupling/core/adaptor/api_23_1/case_root.py +7 -1
  4. ansys/systemcoupling/core/adaptor/api_23_1/clear_state.py +4 -2
  5. ansys/systemcoupling/core/adaptor/api_23_2/_clear_state.py +13 -0
  6. ansys/systemcoupling/core/adaptor/api_23_2/case_root.py +7 -1
  7. ansys/systemcoupling/core/adaptor/api_23_2/clear_state.py +4 -2
  8. ansys/systemcoupling/core/adaptor/api_24_1/_clear_state.py +13 -0
  9. ansys/systemcoupling/core/adaptor/api_24_1/case_root.py +7 -1
  10. ansys/systemcoupling/core/adaptor/api_24_1/clear_state.py +4 -2
  11. ansys/systemcoupling/core/adaptor/api_24_2/_add_participant.py +80 -0
  12. ansys/systemcoupling/core/adaptor/api_24_2/_clear_state.py +13 -0
  13. ansys/systemcoupling/core/adaptor/api_24_2/_solve.py +13 -0
  14. ansys/systemcoupling/core/adaptor/api_24_2/abort.py +39 -0
  15. ansys/systemcoupling/core/adaptor/api_24_2/activate_hidden.py +46 -0
  16. ansys/systemcoupling/core/adaptor/api_24_2/add_aerodamping_data_transfers.py +43 -0
  17. ansys/systemcoupling/core/adaptor/api_24_2/add_data_transfer.py +190 -0
  18. ansys/systemcoupling/core/adaptor/api_24_2/add_data_transfer_by_display_names.py +191 -0
  19. ansys/systemcoupling/core/adaptor/api_24_2/add_expression_function.py +61 -0
  20. ansys/systemcoupling/core/adaptor/api_24_2/add_fsi_data_transfers.py +43 -0
  21. ansys/systemcoupling/core/adaptor/api_24_2/add_interface.py +77 -0
  22. ansys/systemcoupling/core/adaptor/api_24_2/add_interface_by_display_names.py +78 -0
  23. ansys/systemcoupling/core/adaptor/api_24_2/add_named_expression.py +42 -0
  24. ansys/systemcoupling/core/adaptor/api_24_2/add_ordered_data_transfers.py +32 -0
  25. ansys/systemcoupling/core/adaptor/api_24_2/add_participant.py +162 -0
  26. ansys/systemcoupling/core/adaptor/api_24_2/add_reference_frame.py +40 -0
  27. ansys/systemcoupling/core/adaptor/api_24_2/add_thermal_data_transfers.py +43 -0
  28. ansys/systemcoupling/core/adaptor/api_24_2/add_transformation.py +102 -0
  29. ansys/systemcoupling/core/adaptor/api_24_2/analysis_control.py +283 -0
  30. ansys/systemcoupling/core/adaptor/api_24_2/apip.py +33 -0
  31. ansys/systemcoupling/core/adaptor/api_24_2/ascii_output.py +44 -0
  32. ansys/systemcoupling/core/adaptor/api_24_2/attribute.py +20 -0
  33. ansys/systemcoupling/core/adaptor/api_24_2/attribute_child.py +54 -0
  34. ansys/systemcoupling/core/adaptor/api_24_2/automatic_alignment_options.py +46 -0
  35. ansys/systemcoupling/core/adaptor/api_24_2/available_ports.py +40 -0
  36. ansys/systemcoupling/core/adaptor/api_24_2/avoid_data_reconstruction.py +46 -0
  37. ansys/systemcoupling/core/adaptor/api_24_2/case_root.py +62 -0
  38. ansys/systemcoupling/core/adaptor/api_24_2/clear_state.py +18 -0
  39. ansys/systemcoupling/core/adaptor/api_24_2/connect_ensight_dvs.py +41 -0
  40. ansys/systemcoupling/core/adaptor/api_24_2/coupling_interface.py +20 -0
  41. ansys/systemcoupling/core/adaptor/api_24_2/coupling_interface_child.py +42 -0
  42. ansys/systemcoupling/core/adaptor/api_24_2/coupling_participant.py +23 -0
  43. ansys/systemcoupling/core/adaptor/api_24_2/coupling_participant_child.py +265 -0
  44. ansys/systemcoupling/core/adaptor/api_24_2/create_restart_point.py +29 -0
  45. ansys/systemcoupling/core/adaptor/api_24_2/data_transfer.py +20 -0
  46. ansys/systemcoupling/core/adaptor/api_24_2/data_transfer_child.py +187 -0
  47. ansys/systemcoupling/core/adaptor/api_24_2/delete_snapshot.py +28 -0
  48. ansys/systemcoupling/core/adaptor/api_24_2/delete_transformation.py +42 -0
  49. ansys/systemcoupling/core/adaptor/api_24_2/dimensionality.py +96 -0
  50. ansys/systemcoupling/core/adaptor/api_24_2/execution_control.py +246 -0
  51. ansys/systemcoupling/core/adaptor/api_24_2/execution_control_1.py +24 -0
  52. ansys/systemcoupling/core/adaptor/api_24_2/expression.py +20 -0
  53. ansys/systemcoupling/core/adaptor/api_24_2/expression_child.py +36 -0
  54. ansys/systemcoupling/core/adaptor/api_24_2/expression_function.py +20 -0
  55. ansys/systemcoupling/core/adaptor/api_24_2/expression_function_child.py +46 -0
  56. ansys/systemcoupling/core/adaptor/api_24_2/external_data_file.py +24 -0
  57. ansys/systemcoupling/core/adaptor/api_24_2/fluent_input.py +77 -0
  58. ansys/systemcoupling/core/adaptor/api_24_2/fmu_parameter.py +20 -0
  59. ansys/systemcoupling/core/adaptor/api_24_2/fmu_parameter_child.py +156 -0
  60. ansys/systemcoupling/core/adaptor/api_24_2/generate_input_file.py +41 -0
  61. ansys/systemcoupling/core/adaptor/api_24_2/get_add_data_transfer_group_commands.py +29 -0
  62. ansys/systemcoupling/core/adaptor/api_24_2/get_execution_command.py +30 -0
  63. ansys/systemcoupling/core/adaptor/api_24_2/get_machines.py +13 -0
  64. ansys/systemcoupling/core/adaptor/api_24_2/get_mode_shape_variables.py +29 -0
  65. ansys/systemcoupling/core/adaptor/api_24_2/get_region_names_for_participant.py +31 -0
  66. ansys/systemcoupling/core/adaptor/api_24_2/get_setup_summary.py +25 -0
  67. ansys/systemcoupling/core/adaptor/api_24_2/get_status_messages.py +52 -0
  68. ansys/systemcoupling/core/adaptor/api_24_2/get_supported_participant_types.py +13 -0
  69. ansys/systemcoupling/core/adaptor/api_24_2/get_thermal_data_transfer_options.py +32 -0
  70. ansys/systemcoupling/core/adaptor/api_24_2/get_transformation.py +43 -0
  71. ansys/systemcoupling/core/adaptor/api_24_2/global_stabilization.py +143 -0
  72. ansys/systemcoupling/core/adaptor/api_24_2/has_input_file_changed.py +36 -0
  73. ansys/systemcoupling/core/adaptor/api_24_2/import_system_coupling_input_file.py +36 -0
  74. ansys/systemcoupling/core/adaptor/api_24_2/initialize.py +27 -0
  75. ansys/systemcoupling/core/adaptor/api_24_2/instancing.py +23 -0
  76. ansys/systemcoupling/core/adaptor/api_24_2/instancing_child.py +62 -0
  77. ansys/systemcoupling/core/adaptor/api_24_2/interrupt.py +39 -0
  78. ansys/systemcoupling/core/adaptor/api_24_2/library.py +37 -0
  79. ansys/systemcoupling/core/adaptor/api_24_2/live_visualization.py +20 -0
  80. ansys/systemcoupling/core/adaptor/api_24_2/live_visualization_child.py +100 -0
  81. ansys/systemcoupling/core/adaptor/api_24_2/mapping_control.py +239 -0
  82. ansys/systemcoupling/core/adaptor/api_24_2/open.py +102 -0
  83. ansys/systemcoupling/core/adaptor/api_24_2/open_results_in_ensight.py +56 -0
  84. ansys/systemcoupling/core/adaptor/api_24_2/open_snapshot.py +37 -0
  85. ansys/systemcoupling/core/adaptor/api_24_2/output_control.py +134 -0
  86. ansys/systemcoupling/core/adaptor/api_24_2/parameter.py +20 -0
  87. ansys/systemcoupling/core/adaptor/api_24_2/parameter_child.py +56 -0
  88. ansys/systemcoupling/core/adaptor/api_24_2/partition_participants.py +138 -0
  89. ansys/systemcoupling/core/adaptor/api_24_2/properties.py +36 -0
  90. ansys/systemcoupling/core/adaptor/api_24_2/record_interactions.py +46 -0
  91. ansys/systemcoupling/core/adaptor/api_24_2/reference_frame.py +20 -0
  92. ansys/systemcoupling/core/adaptor/api_24_2/reference_frame_child.py +71 -0
  93. ansys/systemcoupling/core/adaptor/api_24_2/region.py +20 -0
  94. ansys/systemcoupling/core/adaptor/api_24_2/region_child.py +71 -0
  95. ansys/systemcoupling/core/adaptor/api_24_2/reload_expression_function_modules.py +14 -0
  96. ansys/systemcoupling/core/adaptor/api_24_2/results.py +89 -0
  97. ansys/systemcoupling/core/adaptor/api_24_2/save.py +51 -0
  98. ansys/systemcoupling/core/adaptor/api_24_2/save_snapshot.py +54 -0
  99. ansys/systemcoupling/core/adaptor/api_24_2/setup_root.py +251 -0
  100. ansys/systemcoupling/core/adaptor/api_24_2/shutdown.py +25 -0
  101. ansys/systemcoupling/core/adaptor/api_24_2/side.py +20 -0
  102. ansys/systemcoupling/core/adaptor/api_24_2/side_child.py +56 -0
  103. ansys/systemcoupling/core/adaptor/api_24_2/solution_control.py +115 -0
  104. ansys/systemcoupling/core/adaptor/api_24_2/solution_root.py +116 -0
  105. ansys/systemcoupling/core/adaptor/api_24_2/solve.py +30 -0
  106. ansys/systemcoupling/core/adaptor/api_24_2/stabilization.py +157 -0
  107. ansys/systemcoupling/core/adaptor/api_24_2/start_participants.py +47 -0
  108. ansys/systemcoupling/core/adaptor/api_24_2/step.py +57 -0
  109. ansys/systemcoupling/core/adaptor/api_24_2/transformation.py +21 -0
  110. ansys/systemcoupling/core/adaptor/api_24_2/transformation_child.py +62 -0
  111. ansys/systemcoupling/core/adaptor/api_24_2/type.py +38 -0
  112. ansys/systemcoupling/core/adaptor/api_24_2/unmapped_value_options.py +158 -0
  113. ansys/systemcoupling/core/adaptor/api_24_2/update_control.py +43 -0
  114. ansys/systemcoupling/core/adaptor/api_24_2/update_participant.py +61 -0
  115. ansys/systemcoupling/core/adaptor/api_24_2/variable.py +20 -0
  116. ansys/systemcoupling/core/adaptor/api_24_2/variable_child.py +231 -0
  117. ansys/systemcoupling/core/adaptor/api_24_2/write_csv_chart_files.py +21 -0
  118. ansys/systemcoupling/core/adaptor/api_24_2/write_ensight.py +46 -0
  119. ansys/systemcoupling/core/adaptor/impl/injected_commands.py +18 -0
  120. ansys/systemcoupling/core/client/grpc_client.py +113 -14
  121. ansys/systemcoupling/core/session.py +50 -0
  122. ansys/systemcoupling/core/util/file_transfer.py +133 -0
  123. ansys/systemcoupling/core/util/logging.py +1 -1
  124. {ansys_systemcoupling_core-0.4.dev0.dist-info → ansys_systemcoupling_core-0.5.0.dist-info}/METADATA +14 -13
  125. {ansys_systemcoupling_core-0.4.dev0.dist-info → ansys_systemcoupling_core-0.5.0.dist-info}/RECORD +127 -15
  126. {ansys_systemcoupling_core-0.4.dev0.dist-info → ansys_systemcoupling_core-0.5.0.dist-info}/LICENSE +0 -0
  127. {ansys_systemcoupling_core-0.4.dev0.dist-info → ansys_systemcoupling_core-0.5.0.dist-info}/WHEEL +0 -0
@@ -0,0 +1,43 @@
1
+ #
2
+ # This is an auto-generated file. DO NOT EDIT!
3
+ #
4
+
5
+ from ansys.systemcoupling.core.adaptor.impl.types import *
6
+
7
+
8
+ class update_control(Container):
9
+ """
10
+ Configure update controls.
11
+ """
12
+
13
+ syc_name = "UpdateControl"
14
+
15
+ property_names_types = [
16
+ ("option", "Option", "str"),
17
+ ("update_frequency", "UpdateFrequency", "int"),
18
+ ]
19
+
20
+ @property
21
+ def option(self) -> str:
22
+ """Specifies how often the participant will perform updates.
23
+
24
+ Possible values:
25
+
26
+ - \"ProgramControlled\"
27
+ - \"EveryIteration\"
28
+ - \"StepInterval\"
29
+ - \"Suspended\" """
30
+ return self.get_property_state("option")
31
+
32
+ @option.setter
33
+ def option(self, value: str):
34
+ self.set_property_state("option", value)
35
+
36
+ @property
37
+ def update_frequency(self) -> int:
38
+ """Specify update frequency."""
39
+ return self.get_property_state("update_frequency")
40
+
41
+ @update_frequency.setter
42
+ def update_frequency(self, value: int):
43
+ self.set_property_state("update_frequency", value)
@@ -0,0 +1,61 @@
1
+ #
2
+ # This is an auto-generated file. DO NOT EDIT!
3
+ #
4
+
5
+ from ansys.systemcoupling.core.adaptor.impl.types import *
6
+
7
+
8
+ class update_participant(Command):
9
+ """
10
+ Given the name of a server participant, updates the state of the participant.
11
+
12
+ Available for server participants. Currently, only DEFAULT-SRV,
13
+ CFD-SRV, MECH-SRV, and SCDT-SRV participants may be updated.
14
+
15
+ As part of the update, System Coupling updates all regions and
16
+ variables defined in the participant, including all variable
17
+ attributes. Variables and regions may be added to the participant but
18
+ may not be removed.
19
+
20
+ You may specify an input file using an optional argument. If an input
21
+ file is not provided, then the original input file will be reimported.
22
+
23
+ If the update process fails, System Coupling displays an error. In this
24
+ case, you can either update the setup in the participant application to
25
+ remove any issues with the update process or delete the participant
26
+ from the analysis and then re-add it using the updated input file.
27
+
28
+ Parameters
29
+ ----------
30
+ participant_name : str
31
+ Participant name. Must be the name of an existing participant.
32
+ Participant type can be either DEFAULT-SRV, CFD-SRV, MECH-SRV, or SCDT-SRV.
33
+ input_file : str, optional
34
+ Name of the input file for the participant to be added.
35
+ Currently supported formats are SCP files, Forte input (FTSIM)
36
+ files, mechanical server (\*.rst) files, cfd server (\*.csv) files,
37
+ FMU (.fmu) files (Beta), and system coupling data server (\*.scdt/axdt/csv) files.
38
+
39
+ """
40
+
41
+ syc_name = "UpdateParticipant"
42
+
43
+ argument_names = ["participant_name", "input_file"]
44
+
45
+ class participant_name(String):
46
+ """
47
+ Participant name. Must be the name of an existing participant.
48
+ Participant type can be either DEFAULT-SRV, CFD-SRV, MECH-SRV, or SCDT-SRV.
49
+ """
50
+
51
+ syc_name = "ParticipantName"
52
+
53
+ class input_file(String):
54
+ """
55
+ Name of the input file for the participant to be added.
56
+ Currently supported formats are SCP files, Forte input (FTSIM)
57
+ files, mechanical server (\*.rst) files, cfd server (\*.csv) files,
58
+ FMU (.fmu) files (Beta), and system coupling data server (\*.scdt/axdt/csv) files.
59
+ """
60
+
61
+ syc_name = "InputFile"
@@ -0,0 +1,20 @@
1
+ #
2
+ # This is an auto-generated file. DO NOT EDIT!
3
+ #
4
+
5
+ from ansys.systemcoupling.core.adaptor.impl.types import *
6
+
7
+ from .variable_child import variable_child
8
+
9
+
10
+ class variable(NamedContainer[variable_child]):
11
+ """
12
+ Configure a variable for the coupling participant.
13
+ """
14
+
15
+ syc_name = "Variable"
16
+
17
+ child_object_type: variable_child = variable_child
18
+ """
19
+ child_object_type of variable.
20
+ """
@@ -0,0 +1,231 @@
1
+ #
2
+ # This is an auto-generated file. DO NOT EDIT!
3
+ #
4
+
5
+ from ansys.systemcoupling.core.adaptor.impl.types import *
6
+
7
+ from .attribute import attribute
8
+
9
+
10
+ class variable_child(Container):
11
+ """
12
+ Configure a variable for the coupling participant.
13
+ """
14
+
15
+ syc_name = "child_object_type"
16
+
17
+ child_names = ["attribute"]
18
+
19
+ attribute: attribute = attribute
20
+ """
21
+ attribute child of variable_child.
22
+ """
23
+ property_names_types = [
24
+ ("quantity_type", "QuantityType", "str"),
25
+ ("location", "Location", "str"),
26
+ ("participant_display_name", "ParticipantDisplayName", "str"),
27
+ ("display_name", "DisplayName", "str"),
28
+ ("data_type", "DataType", "str"),
29
+ ("real_initial_value", "RealInitialValue", "RealType"),
30
+ ("integer_initial_value", "IntegerInitialValue", "int"),
31
+ ("logical_initial_value", "LogicalInitialValue", "bool"),
32
+ ("string_initial_value", "StringInitialValue", "str"),
33
+ ("enumeration_initial_value", "EnumerationInitialValue", "int"),
34
+ ("real_min", "RealMin", "RealType"),
35
+ ("real_max", "RealMax", "RealType"),
36
+ ("integer_min", "IntegerMin", "int"),
37
+ ("integer_max", "IntegerMax", "int"),
38
+ ("enumeration_min", "EnumerationMin", "int"),
39
+ ("enumeration_max", "EnumerationMax", "int"),
40
+ ("tensor_type", "TensorType", "str"),
41
+ ("is_extensive", "IsExtensive", "bool"),
42
+ ]
43
+
44
+ @property
45
+ def quantity_type(self) -> str:
46
+ """Quantity type of the variable.
47
+
48
+ Allowed values:
49
+
50
+ - \"Unspecified\"
51
+ - \"Force\"
52
+ - \"Incremental Displacement\"
53
+ - \"Temperature\"
54
+ - \"Heat Rate\"
55
+ - \"Heat Transfer Coefficient\"
56
+ - \"Convection Reference Temperature\"
57
+ - \"Mode Shape\"
58
+ - \"Electrical Conductivity\" """
59
+ return self.get_property_state("quantity_type")
60
+
61
+ @quantity_type.setter
62
+ def quantity_type(self, value: str):
63
+ self.set_property_state("quantity_type", value)
64
+
65
+ @property
66
+ def location(self) -> str:
67
+ """Data location of the variable (\"Node\" or \"Element\")."""
68
+ return self.get_property_state("location")
69
+
70
+ @location.setter
71
+ def location(self, value: str):
72
+ self.set_property_state("location", value)
73
+
74
+ @property
75
+ def participant_display_name(self) -> str:
76
+ """Variable's display name as defined by the participant solver."""
77
+ return self.get_property_state("participant_display_name")
78
+
79
+ @participant_display_name.setter
80
+ def participant_display_name(self, value: str):
81
+ self.set_property_state("participant_display_name", value)
82
+
83
+ @property
84
+ def display_name(self) -> str:
85
+ """Variable's display name as defined in System Coupling."""
86
+ return self.get_property_state("display_name")
87
+
88
+ @display_name.setter
89
+ def display_name(self, value: str):
90
+ self.set_property_state("display_name", value)
91
+
92
+ @property
93
+ def data_type(self) -> str:
94
+ """Variable's data type as reported by the participant.
95
+
96
+ Allowed values (non-FMU case):
97
+
98
+ - Real
99
+ - Complex
100
+
101
+ Allowed values (FMU):
102
+
103
+ - Real
104
+ - Integer
105
+ - Logical
106
+ - String
107
+ - Enumeration"""
108
+ return self.get_property_state("data_type")
109
+
110
+ @data_type.setter
111
+ def data_type(self, value: str):
112
+ self.set_property_state("data_type", value)
113
+
114
+ @property
115
+ def real_initial_value(self) -> RealType:
116
+ """Real data start value."""
117
+ return self.get_property_state("real_initial_value")
118
+
119
+ @real_initial_value.setter
120
+ def real_initial_value(self, value: RealType):
121
+ self.set_property_state("real_initial_value", value)
122
+
123
+ @property
124
+ def integer_initial_value(self) -> int:
125
+ """Integer data start value."""
126
+ return self.get_property_state("integer_initial_value")
127
+
128
+ @integer_initial_value.setter
129
+ def integer_initial_value(self, value: int):
130
+ self.set_property_state("integer_initial_value", value)
131
+
132
+ @property
133
+ def logical_initial_value(self) -> bool:
134
+ """Logical data start value."""
135
+ return self.get_property_state("logical_initial_value")
136
+
137
+ @logical_initial_value.setter
138
+ def logical_initial_value(self, value: bool):
139
+ self.set_property_state("logical_initial_value", value)
140
+
141
+ @property
142
+ def string_initial_value(self) -> str:
143
+ """String data start value."""
144
+ return self.get_property_state("string_initial_value")
145
+
146
+ @string_initial_value.setter
147
+ def string_initial_value(self, value: str):
148
+ self.set_property_state("string_initial_value", value)
149
+
150
+ @property
151
+ def enumeration_initial_value(self) -> int:
152
+ """Enumeration data start value."""
153
+ return self.get_property_state("enumeration_initial_value")
154
+
155
+ @enumeration_initial_value.setter
156
+ def enumeration_initial_value(self, value: int):
157
+ self.set_property_state("enumeration_initial_value", value)
158
+
159
+ @property
160
+ def real_min(self) -> RealType:
161
+ """Real data minimum value."""
162
+ return self.get_property_state("real_min")
163
+
164
+ @real_min.setter
165
+ def real_min(self, value: RealType):
166
+ self.set_property_state("real_min", value)
167
+
168
+ @property
169
+ def real_max(self) -> RealType:
170
+ """Real data maximum value."""
171
+ return self.get_property_state("real_max")
172
+
173
+ @real_max.setter
174
+ def real_max(self, value: RealType):
175
+ self.set_property_state("real_max", value)
176
+
177
+ @property
178
+ def integer_min(self) -> int:
179
+ """Integer data minimum value."""
180
+ return self.get_property_state("integer_min")
181
+
182
+ @integer_min.setter
183
+ def integer_min(self, value: int):
184
+ self.set_property_state("integer_min", value)
185
+
186
+ @property
187
+ def integer_max(self) -> int:
188
+ """Integer data maximum value."""
189
+ return self.get_property_state("integer_max")
190
+
191
+ @integer_max.setter
192
+ def integer_max(self, value: int):
193
+ self.set_property_state("integer_max", value)
194
+
195
+ @property
196
+ def enumeration_min(self) -> int:
197
+ """Enumeration data minimum value."""
198
+ return self.get_property_state("enumeration_min")
199
+
200
+ @enumeration_min.setter
201
+ def enumeration_min(self, value: int):
202
+ self.set_property_state("enumeration_min", value)
203
+
204
+ @property
205
+ def enumeration_max(self) -> int:
206
+ """Enumeration data maximum value."""
207
+ return self.get_property_state("enumeration_max")
208
+
209
+ @enumeration_max.setter
210
+ def enumeration_max(self, value: int):
211
+ self.set_property_state("enumeration_max", value)
212
+
213
+ @property
214
+ def tensor_type(self) -> str:
215
+ """Indicates the variable tensor type (\"Scalar\" or \"Vector\").
216
+
217
+ \"Vector\" is not supported for the FMU case."""
218
+ return self.get_property_state("tensor_type")
219
+
220
+ @tensor_type.setter
221
+ def tensor_type(self, value: str):
222
+ self.set_property_state("tensor_type", value)
223
+
224
+ @property
225
+ def is_extensive(self) -> bool:
226
+ """Indicates whether this is an extensive property."""
227
+ return self.get_property_state("is_extensive")
228
+
229
+ @is_extensive.setter
230
+ def is_extensive(self, value: bool):
231
+ self.set_property_state("is_extensive", value)
@@ -0,0 +1,21 @@
1
+ #
2
+ # This is an auto-generated file. DO NOT EDIT!
3
+ #
4
+
5
+ from ansys.systemcoupling.core.adaptor.impl.types import *
6
+
7
+
8
+ class write_csv_chart_files(Command):
9
+ """
10
+ For each coupling interface, exports a CSV file containing chart data
11
+ (convergence and source/target quantity transfer values) for
12
+ that interface.
13
+
14
+ Each file is named according to the convention ``<interface>.csv``, where
15
+ ``<interface>`` is the object name of the corresponding coupling interface.
16
+
17
+ This command will overwrite any CSV charting files that already exist,
18
+ including any that were written during the solution.
19
+ """
20
+
21
+ syc_name = "WriteCsvChartFiles"
@@ -0,0 +1,46 @@
1
+ #
2
+ # This is an auto-generated file. DO NOT EDIT!
3
+ #
4
+
5
+ from ansys.systemcoupling.core.adaptor.impl.types import *
6
+
7
+
8
+ class write_ensight(Command):
9
+ """
10
+ Write a file with mesh and results which can be loaded into Ensight for
11
+ post processing.
12
+
13
+ Parameters
14
+ ----------
15
+ file_name : str
16
+ Base name for Ensight files. It will generate <base>.encas file which
17
+ should be loaded into Ensight. Other files are generated for geometry
18
+ and variables.
19
+ binary : bool, optional
20
+ To control if file is to be written in binary format or ASCII. ASCII
21
+ slows down performance, but may be useful for debugging and seeing
22
+ raw data.
23
+
24
+ """
25
+
26
+ syc_name = "WriteEnSight"
27
+
28
+ argument_names = ["file_name", "binary"]
29
+
30
+ class file_name(String):
31
+ """
32
+ Base name for Ensight files. It will generate <base>.encas file which
33
+ should be loaded into Ensight. Other files are generated for geometry
34
+ and variables.
35
+ """
36
+
37
+ syc_name = "FileName"
38
+
39
+ class binary(Boolean):
40
+ """
41
+ To control if file is to be written in binary format or ASCII. ASCII
42
+ slows down performance, but may be useful for debugging and seeing
43
+ raw data.
44
+ """
45
+
46
+ syc_name = "Binary"
@@ -63,6 +63,13 @@ def get_injected_cmd_map(
63
63
  "abort": lambda **kwargs: rpc.abort(**kwargs),
64
64
  }
65
65
 
66
+ if category == "case":
67
+ ret = {
68
+ "clear_state": lambda **kwargs: _wrap_clear_state(
69
+ root_object, part_mgr, **kwargs
70
+ )
71
+ }
72
+
66
73
  return ret
67
74
 
68
75
 
@@ -102,6 +109,13 @@ def _wrap_add_participant(
102
109
  return root_object._add_participant(**kwargs)
103
110
 
104
111
 
112
+ def _wrap_clear_state(
113
+ root_object: Container, part_mgr: ParticipantManager, **kwargs
114
+ ) -> None:
115
+ part_mgr.clear()
116
+ root_object._clear_state(**kwargs)
117
+
118
+
105
119
  def _wrap_solve(root_object: Container, part_mgr: ParticipantManager) -> None:
106
120
  if part_mgr is None:
107
121
  root_object._solve()
@@ -309,4 +323,8 @@ _cmd_yaml = """
309
323
  essentialArgNames: []
310
324
  optionalArgNames: []
311
325
  args: []
326
+ - name: ClearState
327
+ pyname: clear_state
328
+ isInjected: true
329
+ pysyc_internal_name: _clear_state
312
330
  """
@@ -26,8 +26,10 @@ import json
26
26
  import os
27
27
  import socket
28
28
  import threading
29
+ from typing import Optional
29
30
 
30
31
  import ansys.api.systemcoupling.v0.command_pb2 as command_pb2
32
+ import ansys.platform.instancemanagement as pypim
31
33
  import grpc
32
34
 
33
35
  from ansys.systemcoupling.core.client.services.command_query import CommandQueryService
@@ -37,13 +39,15 @@ from ansys.systemcoupling.core.client.services.solution import SolutionService
37
39
  from ansys.systemcoupling.core.client.syc_container import start_container
38
40
  from ansys.systemcoupling.core.client.syc_process import SycProcess
39
41
  from ansys.systemcoupling.core.client.variant import from_variant, to_variant
42
+ from ansys.systemcoupling.core.syc_version import normalize_version
43
+ from ansys.systemcoupling.core.util.file_transfer import file_transfer_service
40
44
  from ansys.systemcoupling.core.util.logging import LOG
41
45
 
42
46
  _CHANNEL_READY_TIMEOUT_SEC = 15
43
47
  _LOCALHOST_IP = "127.0.0.1"
44
48
 
45
49
 
46
- def _find_port():
50
+ def _find_port() -> int:
47
51
  with socket.socket() as s:
48
52
  s.bind(("", 0))
49
53
  return s.getsockname()[1]
@@ -95,6 +99,8 @@ class SycGrpc(object):
95
99
  self.__process = None
96
100
  self.__channel = None
97
101
  self.__output_thread = None
102
+ self.__pim_instance = None
103
+ self.__skip_exit = False
98
104
 
99
105
  @classmethod
100
106
  def _cleanup(cls):
@@ -147,6 +153,39 @@ class SycGrpc(object):
147
153
  LOG.debug("...started")
148
154
  self._connect(_LOCALHOST_IP, port)
149
155
 
156
+ def start_pim_and_connect(self, version: str = None):
157
+ """Start PIM-managed instance.
158
+
159
+ Currently for internal use only.
160
+ """
161
+ product_version = "latest"
162
+ if version is not None:
163
+ maj_v, min_v = normalize_version(version)
164
+ product_version = f"{maj_v}{min_v}"
165
+
166
+ pim = pypim.connect()
167
+ instance = pim.create_instance(
168
+ product_name="systemcoupling", product_version=product_version
169
+ )
170
+ instance.wait_for_ready()
171
+ self.__pim_instance = instance
172
+ channel = instance.build_grpc_channel()
173
+ self._connect(channel=channel)
174
+
175
+ def upload_file(self, *args, **kwargs):
176
+ """Supports file upload to remote instance.
177
+
178
+ Currently for internal use only.
179
+ """
180
+ file_transfer_service(self.__pim_instance).upload_file(*args, **kwargs)
181
+
182
+ def download_file(self, *args, **kwargs):
183
+ """Supports file download from remote instance.
184
+
185
+ Currently for internal use only.
186
+ """
187
+ file_transfer_service(self.__pim_instance).download_file(*args, **kwargs)
188
+
150
189
  def connect(self, host, port):
151
190
  """Connect to an already running System Coupling server running on a known
152
191
  host and port.
@@ -161,20 +200,34 @@ class SycGrpc(object):
161
200
  # Discard the sentinel
162
201
  del SycGrpc._instances[-1]
163
202
 
164
- def _connect(self, host, port):
203
+ def _connect(
204
+ self,
205
+ host: Optional[str] = None,
206
+ port: Optional[int] = None,
207
+ channel: Optional[grpc.Channel] = None,
208
+ ):
209
+ if (channel is None and (host is None or port is None)) or (
210
+ channel is not None and (host is not None or port is not None)
211
+ ):
212
+ raise ValueError("Internal error: _connect needs host and port OR channel")
213
+
165
214
  LOG.debug("Connecting...")
166
215
  self._register_for_cleanup()
167
- self.__channel = grpc.insecure_channel(f"{host}:{port}")
168
-
169
- # Wait for server to be ready
170
- timeout = _CHANNEL_READY_TIMEOUT_SEC
171
- try:
172
- grpc.channel_ready_future(self.__channel).result(timeout=timeout)
173
- except grpc.FutureTimeoutError:
174
- raise RuntimeError(
175
- "Stopping attempt to connect to gRPC channel "
176
- f"after {timeout} seconds."
177
- )
216
+ if channel is None:
217
+ self.__channel = grpc.insecure_channel(f"{host}:{port}")
218
+
219
+ # Wait for server to be ready
220
+ timeout = _CHANNEL_READY_TIMEOUT_SEC
221
+ try:
222
+ grpc.channel_ready_future(self.__channel).result(timeout=timeout)
223
+ except grpc.FutureTimeoutError:
224
+ raise RuntimeError(
225
+ "Stopping attempt to connect to gRPC channel "
226
+ f"after {timeout} seconds."
227
+ )
228
+
229
+ else:
230
+ self.__channel = channel
178
231
 
179
232
  LOG.debug("...connected")
180
233
 
@@ -183,6 +236,49 @@ class SycGrpc(object):
183
236
  self.__process_service = SycProcessService(self.__channel)
184
237
  self.__solution_service = SolutionService(self.__channel)
185
238
 
239
+ @property
240
+ def _channel_str(self):
241
+ """The channel target string.
242
+
243
+ Generally of the form of "ip:port", like "127.0.0.1:50052".
244
+
245
+ """
246
+
247
+ # Note: this impl was taken from pymapdl and does more than SyC needs
248
+ # at the moment as we don't use interceptors.
249
+
250
+ channel = self.__channel
251
+ while channel is not None:
252
+ # When creating interceptors, channels have a nested "_channel" member
253
+ # containing the intercepted channel.
254
+ # Only the actual channel contains the "target" member describing the address
255
+ if hasattr(channel, "target"):
256
+ return channel.target().decode()
257
+ channel = getattr(channel, "_channel", None)
258
+ # This method is relying on grpc channel's private attributes, fallback in case
259
+ # it does not exist
260
+ return "unknown" #  pragma: no cover Unreachable in the current gRPC version
261
+
262
+ @property
263
+ def _channel(self) -> grpc.Channel:
264
+ """Access the gRPC Channel object
265
+
266
+ Provided for testing purposes.
267
+ """
268
+ return self.__channel
269
+
270
+ @property
271
+ def _skip_exit(self) -> bool:
272
+ return self.__skip_exit
273
+
274
+ @_skip_exit.setter
275
+ def _skip_exit(self, value: bool) -> None:
276
+ """Make ``exit`` call a no-op for this instance.
277
+
278
+ Provided for testing purposes.
279
+ """
280
+ self.__skip_exit = value
281
+
186
282
  def exit(self):
187
283
  """Shut down the remote System Coupling server.
188
284
 
@@ -193,7 +289,7 @@ class SycGrpc(object):
193
289
  # Remove from atexit cleanup list
194
290
  del SycGrpc._instances[self.__id]
195
291
 
196
- if self.__channel is not None:
292
+ if self.__channel is not None and not self.__skip_exit:
197
293
  try:
198
294
  self.__ostream_service.end_streaming()
199
295
  except Exception as e:
@@ -203,6 +299,9 @@ class SycGrpc(object):
203
299
  if self.__process:
204
300
  self.__process.end()
205
301
  self.__process = None
302
+ if self.__pim_instance is not None:
303
+ self.__pim_instance.delete()
304
+ self.__pim_instance = None
206
305
  self._reset()
207
306
 
208
307
  def start_output(self, handle_output=None):