KratosCoSimulationApplication 10.4.2__2-cp39-cp39-win_amd64.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.
Files changed (130) hide show
  1. KratosMultiphysics/.libs/KratosCoSimulationApplication.pyd +0 -0
  2. KratosMultiphysics/.libs/KratosCoSimulationCore.dll +0 -0
  3. KratosMultiphysics/.libs/KratosCoSimulationCore.lib +0 -0
  4. KratosMultiphysics/.libs/co_sim_io.dll +0 -0
  5. KratosMultiphysics/.libs/co_sim_io.lib +0 -0
  6. KratosMultiphysics/CoSimulationApplication/MainKratosCoSim.py +15 -0
  7. KratosMultiphysics/CoSimulationApplication/__init__.py +23 -0
  8. KratosMultiphysics/CoSimulationApplication/analysis_stage_with_co_sim_io.py +136 -0
  9. KratosMultiphysics/CoSimulationApplication/base_classes/__init__.py +0 -0
  10. KratosMultiphysics/CoSimulationApplication/base_classes/co_simulation_convergence_accelerator.py +66 -0
  11. KratosMultiphysics/CoSimulationApplication/base_classes/co_simulation_convergence_criteria.py +56 -0
  12. KratosMultiphysics/CoSimulationApplication/base_classes/co_simulation_coupled_solver.py +443 -0
  13. KratosMultiphysics/CoSimulationApplication/base_classes/co_simulation_coupling_operation.py +60 -0
  14. KratosMultiphysics/CoSimulationApplication/base_classes/co_simulation_data_transfer_operator.py +67 -0
  15. KratosMultiphysics/CoSimulationApplication/base_classes/co_simulation_io.py +73 -0
  16. KratosMultiphysics/CoSimulationApplication/base_classes/co_simulation_predictor.py +68 -0
  17. KratosMultiphysics/CoSimulationApplication/base_classes/co_simulation_solver_wrapper.py +170 -0
  18. KratosMultiphysics/CoSimulationApplication/co_simulation_analysis.py +133 -0
  19. KratosMultiphysics/CoSimulationApplication/co_simulation_tools.py +18 -0
  20. KratosMultiphysics/CoSimulationApplication/colors.py +78 -0
  21. KratosMultiphysics/CoSimulationApplication/convergence_accelerators/__init__.py +0 -0
  22. KratosMultiphysics/CoSimulationApplication/convergence_accelerators/aitken.py +86 -0
  23. KratosMultiphysics/CoSimulationApplication/convergence_accelerators/anderson.py +105 -0
  24. KratosMultiphysics/CoSimulationApplication/convergence_accelerators/block_ibqnls.py +199 -0
  25. KratosMultiphysics/CoSimulationApplication/convergence_accelerators/block_mvqn.py +128 -0
  26. KratosMultiphysics/CoSimulationApplication/convergence_accelerators/constant_relaxation.py +42 -0
  27. KratosMultiphysics/CoSimulationApplication/convergence_accelerators/convergence_accelerator_wrapper.py +273 -0
  28. KratosMultiphysics/CoSimulationApplication/convergence_accelerators/iqnils.py +169 -0
  29. KratosMultiphysics/CoSimulationApplication/convergence_accelerators/mvqn.py +114 -0
  30. KratosMultiphysics/CoSimulationApplication/convergence_criteria/__init__.py +0 -0
  31. KratosMultiphysics/CoSimulationApplication/convergence_criteria/absolute_norm_energy_conjugate.py +132 -0
  32. KratosMultiphysics/CoSimulationApplication/convergence_criteria/convergence_criteria_wrapper.py +85 -0
  33. KratosMultiphysics/CoSimulationApplication/convergence_criteria/relative_norm_initial_residual.py +74 -0
  34. KratosMultiphysics/CoSimulationApplication/convergence_criteria/relative_norm_previous_residual.py +72 -0
  35. KratosMultiphysics/CoSimulationApplication/coupled_solvers/__init__.py +0 -0
  36. KratosMultiphysics/CoSimulationApplication/coupled_solvers/block_strong.py +86 -0
  37. KratosMultiphysics/CoSimulationApplication/coupled_solvers/feti_dynamic_coupled_solver.py +270 -0
  38. KratosMultiphysics/CoSimulationApplication/coupled_solvers/gauss_seidel_strong.py +159 -0
  39. KratosMultiphysics/CoSimulationApplication/coupled_solvers/gauss_seidel_weak.py +20 -0
  40. KratosMultiphysics/CoSimulationApplication/coupled_solvers/jacobi_strong.py +158 -0
  41. KratosMultiphysics/CoSimulationApplication/coupled_solvers/jacobi_weak.py +24 -0
  42. KratosMultiphysics/CoSimulationApplication/coupling_interface_data.py +273 -0
  43. KratosMultiphysics/CoSimulationApplication/coupling_operations/__init__.py +0 -0
  44. KratosMultiphysics/CoSimulationApplication/coupling_operations/compute_boundary_force.py +139 -0
  45. KratosMultiphysics/CoSimulationApplication/coupling_operations/compute_normals.py +60 -0
  46. KratosMultiphysics/CoSimulationApplication/coupling_operations/compute_resultants.py +54 -0
  47. KratosMultiphysics/CoSimulationApplication/coupling_operations/convert_distributed_values_to_point.py +73 -0
  48. KratosMultiphysics/CoSimulationApplication/coupling_operations/coupling_output.py +76 -0
  49. KratosMultiphysics/CoSimulationApplication/coupling_operations/create_point_load_model_part.py +50 -0
  50. KratosMultiphysics/CoSimulationApplication/coupling_operations/distribute_point_values.py +80 -0
  51. KratosMultiphysics/CoSimulationApplication/coupling_operations/elemental_data_to_nodal_data.py +100 -0
  52. KratosMultiphysics/CoSimulationApplication/coupling_operations/impose_mesh_displacement.py +58 -0
  53. KratosMultiphysics/CoSimulationApplication/coupling_operations/nodal_data_to_elemental_data.py +84 -0
  54. KratosMultiphysics/CoSimulationApplication/coupling_operations/print_iteration_number.py +77 -0
  55. KratosMultiphysics/CoSimulationApplication/coupling_operations/reset_pfem_kinematics.py +47 -0
  56. KratosMultiphysics/CoSimulationApplication/coupling_operations/scaling.py +74 -0
  57. KratosMultiphysics/CoSimulationApplication/data_transfer_operators/3d_1d_data_transfer.py +288 -0
  58. KratosMultiphysics/CoSimulationApplication/data_transfer_operators/__init__.py +0 -0
  59. KratosMultiphysics/CoSimulationApplication/data_transfer_operators/copy.py +30 -0
  60. KratosMultiphysics/CoSimulationApplication/data_transfer_operators/copy_single_to_distributed.py +6 -0
  61. KratosMultiphysics/CoSimulationApplication/data_transfer_operators/copy_with_empty_ranks.py +55 -0
  62. KratosMultiphysics/CoSimulationApplication/data_transfer_operators/kratos_beam_mapping.py +129 -0
  63. KratosMultiphysics/CoSimulationApplication/data_transfer_operators/kratos_mapping.py +209 -0
  64. KratosMultiphysics/CoSimulationApplication/data_transfer_operators/kratos_mapping_with_debug.py +396 -0
  65. KratosMultiphysics/CoSimulationApplication/data_transfer_operators/sum_distributed_to_single.py +48 -0
  66. KratosMultiphysics/CoSimulationApplication/data_transfer_operators/sum_many_to_many.py +50 -0
  67. KratosMultiphysics/CoSimulationApplication/data_transfer_operators/transfer_one_to_many.py +58 -0
  68. KratosMultiphysics/CoSimulationApplication/empire_wrapper.py +524 -0
  69. KratosMultiphysics/CoSimulationApplication/factories/__init__.py +0 -0
  70. KratosMultiphysics/CoSimulationApplication/factories/base_factory.py +20 -0
  71. KratosMultiphysics/CoSimulationApplication/factories/convergence_accelerator_factory.py +5 -0
  72. KratosMultiphysics/CoSimulationApplication/factories/convergence_criterion_factory.py +5 -0
  73. KratosMultiphysics/CoSimulationApplication/factories/coupling_operation_factory.py +5 -0
  74. KratosMultiphysics/CoSimulationApplication/factories/data_transfer_operator_factory.py +5 -0
  75. KratosMultiphysics/CoSimulationApplication/factories/helpers.py +88 -0
  76. KratosMultiphysics/CoSimulationApplication/factories/io_factory.py +5 -0
  77. KratosMultiphysics/CoSimulationApplication/factories/predictor_factory.py +5 -0
  78. KratosMultiphysics/CoSimulationApplication/factories/solver_wrapper_factory.py +5 -0
  79. KratosMultiphysics/CoSimulationApplication/fluid_dynamics_analysis_with_co_sim_io.py +22 -0
  80. KratosMultiphysics/CoSimulationApplication/function_callback_utility.py +41 -0
  81. KratosMultiphysics/CoSimulationApplication/helpers/__init__.py +0 -0
  82. KratosMultiphysics/CoSimulationApplication/helpers/dummy_solver_wrapper.py +39 -0
  83. KratosMultiphysics/CoSimulationApplication/predictors/__init__.py +0 -0
  84. KratosMultiphysics/CoSimulationApplication/predictors/average_value_based.py +51 -0
  85. KratosMultiphysics/CoSimulationApplication/predictors/linear.py +20 -0
  86. KratosMultiphysics/CoSimulationApplication/predictors/linear_derivative_based.py +39 -0
  87. KratosMultiphysics/CoSimulationApplication/processes/__init__.py +0 -0
  88. KratosMultiphysics/CoSimulationApplication/processes/create_point_based_entites_process.py +112 -0
  89. KratosMultiphysics/CoSimulationApplication/solver_wrappers/__init__.py +0 -0
  90. KratosMultiphysics/CoSimulationApplication/solver_wrappers/cpp_ping_pong/__init__.py +0 -0
  91. KratosMultiphysics/CoSimulationApplication/solver_wrappers/cpp_ping_pong/ping_pong_io.py +69 -0
  92. KratosMultiphysics/CoSimulationApplication/solver_wrappers/cpp_ping_pong/ping_pong_wrapper.py +70 -0
  93. KratosMultiphysics/CoSimulationApplication/solver_wrappers/dummy_io.py +28 -0
  94. KratosMultiphysics/CoSimulationApplication/solver_wrappers/empire_io.py +91 -0
  95. KratosMultiphysics/CoSimulationApplication/solver_wrappers/existing_co_simulation.py +18 -0
  96. KratosMultiphysics/CoSimulationApplication/solver_wrappers/external/__init__.py +0 -0
  97. KratosMultiphysics/CoSimulationApplication/solver_wrappers/external/acusolve_wrapper.py +255 -0
  98. KratosMultiphysics/CoSimulationApplication/solver_wrappers/external/external_solver_wrapper.py +60 -0
  99. KratosMultiphysics/CoSimulationApplication/solver_wrappers/external/flower_wrapper.py +86 -0
  100. KratosMultiphysics/CoSimulationApplication/solver_wrappers/external/openfoam_wrapper.py +61 -0
  101. KratosMultiphysics/CoSimulationApplication/solver_wrappers/external/remote_controlled_solver_wrapper.py +121 -0
  102. KratosMultiphysics/CoSimulationApplication/solver_wrappers/kratos/__init__.py +0 -0
  103. KratosMultiphysics/CoSimulationApplication/solver_wrappers/kratos/convection_diffusion_wrapper.py +25 -0
  104. KratosMultiphysics/CoSimulationApplication/solver_wrappers/kratos/dem_wrapper.py +51 -0
  105. KratosMultiphysics/CoSimulationApplication/solver_wrappers/kratos/fluid_dynamics_wrapper.py +43 -0
  106. KratosMultiphysics/CoSimulationApplication/solver_wrappers/kratos/kratos_base_wrapper.py +169 -0
  107. KratosMultiphysics/CoSimulationApplication/solver_wrappers/kratos/mpm_dirichlet_wrapper.py +60 -0
  108. KratosMultiphysics/CoSimulationApplication/solver_wrappers/kratos/mpm_neumann_wrapper.py +52 -0
  109. KratosMultiphysics/CoSimulationApplication/solver_wrappers/kratos/particle_mechanics_dirichlet_wrapper.py +15 -0
  110. KratosMultiphysics/CoSimulationApplication/solver_wrappers/kratos/particle_mechanics_neumann_wrapper.py +15 -0
  111. KratosMultiphysics/CoSimulationApplication/solver_wrappers/kratos/pfem_fluid_dynamics_wrapper.py +59 -0
  112. KratosMultiphysics/CoSimulationApplication/solver_wrappers/kratos/potential_flow_wrapper.py +57 -0
  113. KratosMultiphysics/CoSimulationApplication/solver_wrappers/kratos/rom_wrapper.py +33 -0
  114. KratosMultiphysics/CoSimulationApplication/solver_wrappers/kratos/structural_mechanics_wrapper.py +39 -0
  115. KratosMultiphysics/CoSimulationApplication/solver_wrappers/kratos_co_sim_io.py +138 -0
  116. KratosMultiphysics/CoSimulationApplication/solver_wrappers/rigid_body/rigid_body_input_check.py +203 -0
  117. KratosMultiphysics/CoSimulationApplication/solver_wrappers/rigid_body/rigid_body_solver.py +485 -0
  118. KratosMultiphysics/CoSimulationApplication/solver_wrappers/rigid_body/rigid_body_solver_wrapper.py +66 -0
  119. KratosMultiphysics/CoSimulationApplication/solver_wrappers/sdof/__init__.py +0 -0
  120. KratosMultiphysics/CoSimulationApplication/solver_wrappers/sdof/sdof_solver.py +289 -0
  121. KratosMultiphysics/CoSimulationApplication/solver_wrappers/sdof/sdof_solver_wrapper.py +66 -0
  122. KratosMultiphysics/CoSimulationApplication/solver_wrappers/sdof/sdof_static_solver.py +145 -0
  123. KratosMultiphysics/CoSimulationApplication/solver_wrappers/sdof/static_sdof_solver_wrapper.py +43 -0
  124. KratosMultiphysics/CoSimulationApplication/structural_mechanics_analysis_with_co_sim_io.py +23 -0
  125. KratosMultiphysics/CoSimulationApplication/utilities/__init__.py +0 -0
  126. KratosMultiphysics/CoSimulationApplication/utilities/data_communicator_utilities.py +40 -0
  127. KratosMultiphysics/CoSimulationApplication/utilities/model_part_utilities.py +72 -0
  128. kratoscosimulationapplication-10.4.2.dist-info/METADATA +479 -0
  129. kratoscosimulationapplication-10.4.2.dist-info/RECORD +130 -0
  130. kratoscosimulationapplication-10.4.2.dist-info/WHEEL +5 -0
Binary file
Binary file
@@ -0,0 +1,15 @@
1
+ import KratosMultiphysics as KM
2
+ from KratosMultiphysics.CoSimulationApplication.co_simulation_analysis import CoSimulationAnalysis
3
+
4
+ """
5
+ For user-scripting it is intended that a new class is derived
6
+ from CoSimulationAnalysis to do modifications
7
+ Check also "kratos/python_scripts/analysis-stage.py" for available methods that can be overridden
8
+ """
9
+
10
+ parameter_file_name = "ProjectParametersCoSim.json"
11
+ with open(parameter_file_name,'r') as parameter_file:
12
+ parameters = KM.Parameters(parameter_file.read())
13
+
14
+ simulation = CoSimulationAnalysis(parameters)
15
+ simulation.Run()
@@ -0,0 +1,23 @@
1
+ # Application dependent names and paths
2
+ from KratosMultiphysics import _ImportApplication
3
+ from KratosCoSimulationApplication import *
4
+ application = KratosCoSimulationApplication()
5
+ application_name = "KratosCoSimulationApplication"
6
+
7
+ _ImportApplication(application, application_name)
8
+
9
+ def __ModuleInitDetail():
10
+ """
11
+ Create a DataCommunicator that only contains rank zero and is undefined in other ranks
12
+ This is necessary for solvers that can only run in serial
13
+ It is defined as a function to avoid polluting the Kratos namespace with local variables.
14
+ """
15
+ import KratosMultiphysics as KM
16
+ if KM.IsDistributedRun():
17
+ from KratosMultiphysics.mpi import DataCommunicatorFactory
18
+ data_comm_name = "co_simulation_data_comm_rank_zero"
19
+ world_data_comm = KM.ParallelEnvironment.GetDataCommunicator("World")
20
+ ranks = [0]
21
+ DataCommunicatorFactory.CreateFromRanksAndRegister(world_data_comm, ranks, data_comm_name)
22
+
23
+ __ModuleInitDetail()
@@ -0,0 +1,136 @@
1
+ import KratosMultiphysics as KM
2
+ from KratosMultiphysics.analysis_stage import AnalysisStage
3
+
4
+ default_data_comm = KM.ParallelEnvironment.GetDefaultDataCommunicator()
5
+ if default_data_comm.IsDistributed():
6
+ from KratosMultiphysics.CoSimulationApplication import MPIExtension
7
+
8
+ from KratosMultiphysics.CoSimulationApplication import CoSimIO
9
+
10
+ import sys
11
+
12
+ def FlushAll():
13
+ sys.stdout.flush()
14
+ KM.Logger.Flush()
15
+
16
+ def CreateAnalysisStageWithCoSimIO(BaseAnalysisStage):
17
+ # concept from https://stackoverflow.com/a/1334242
18
+
19
+ class AnalysisStageWithCoSimIO(BaseAnalysisStage):
20
+ '''Adds coupling functionality with CoSimIO to an AnalysisStage'''
21
+
22
+ def __init__(self, model, parameters):
23
+ if not issubclass(BaseAnalysisStage, AnalysisStage):
24
+ raise Exception(f'Given baseclass "{BaseAnalysisStage}" does not inherit from AnalysisStage!')
25
+
26
+ super().__init__(model, parameters)
27
+
28
+ # To avoid many prints
29
+ severity = KM.Logger.Severity.WARNING
30
+ if self.echo_level > 0:
31
+ severity = KM.Logger.Severity.INFO
32
+ KM.Logger.GetDefaultOutput().SetSeverity(severity)
33
+
34
+ if self.echo_level > 0: FlushAll()
35
+
36
+ def Initialize(self):
37
+ super().Initialize()
38
+
39
+ self.co_sim_settings = self.project_parameters["co_sim_settings"]
40
+ self.is_strong_coupling = self.co_sim_settings["is_strong_coupling"].GetBool()
41
+
42
+ connection_settings = CoSimIO.InfoFromParameters(self.project_parameters["co_sim_settings"]["io_settings"])
43
+
44
+ if default_data_comm.IsDistributed():
45
+ info = MPIExtension.CoSimIO.ConnectMPI(connection_settings, default_data_comm)
46
+ else:
47
+ info = CoSimIO.Connect(connection_settings)
48
+
49
+ if self.echo_level > 0: FlushAll()
50
+
51
+ self.connection_name = info.GetString("connection_name")
52
+ if info.GetInt("connection_status") != CoSimIO.ConnectionStatus.Connected:
53
+ raise Exception("Connecting failed!")
54
+
55
+ self.communication_settings = self.co_sim_settings["communication_settings"]
56
+
57
+ # Exporting meshes to CoSimulation
58
+ for model_part_name in self.communication_settings["export_meshes"].GetStringArray():
59
+ info = CoSimIO.Info()
60
+ info.SetString("connection_name", self.connection_name)
61
+ info.SetString("identifier", model_part_name.replace(".", "-"))
62
+
63
+ CoSimIO.ExportMesh(info, self.model[model_part_name])
64
+
65
+ if self.echo_level > 0: FlushAll()
66
+
67
+ def RunSolutionLoop(self):
68
+ """This function executes the solution loop of the AnalysisStage
69
+ It can be overridden by derived classes
70
+ """
71
+ while self.KeepAdvancingSolutionLoop():
72
+ self.time = self._GetSolver().AdvanceInTime(self.time)
73
+ self.InitializeSolutionStep()
74
+ self._GetSolver().Predict()
75
+
76
+ if self.is_strong_coupling:
77
+ repeat_time_step = True
78
+ while repeat_time_step:
79
+ self.__InnerLoop()
80
+ info = CoSimIO.Info()
81
+ info.SetString("connection_name", self.connection_name)
82
+ info.SetString("identifier", "repeat_time_step_info")
83
+ repeat_time_step_info = CoSimIO.ImportInfo(info)
84
+ repeat_time_step = repeat_time_step_info.GetBool("repeat_time_step")
85
+ else:
86
+ self.__InnerLoop()
87
+
88
+ self.FinalizeSolutionStep()
89
+ self.OutputSolutionStep()
90
+
91
+ def Finalize(self):
92
+ super().Finalize()
93
+
94
+ disconnect_settings = CoSimIO.Info()
95
+ disconnect_settings.SetString("connection_name", self.connection_name)
96
+ info = CoSimIO.Disconnect(disconnect_settings)
97
+ if info.GetInt("connection_status") != CoSimIO.ConnectionStatus.Disconnected:
98
+ raise Exception("Disconnecting failed!")
99
+
100
+ def _GetSimulationName(self):
101
+ return super()._GetSimulationName() + " with CoSimIO"
102
+
103
+ def __InnerLoop(self):
104
+ if self.echo_level > 0: FlushAll()
105
+
106
+ # Import fields
107
+ for field_settings in self.communication_settings["import_fields"]:
108
+ identifier = field_settings["identifier"].GetString()
109
+ model_part_name = field_settings["model_part_name"].GetString()
110
+ model_part = self.model[model_part_name]
111
+ variable_name = field_settings["variable_name"].GetString()
112
+ variable = KM.KratosGlobals.GetVariable(variable_name)
113
+
114
+ info = CoSimIO.Info()
115
+ info.SetString("connection_name", self.connection_name)
116
+ info.SetString("identifier", identifier)
117
+ CoSimIO.ImportData(info, model_part, variable, KM.Globals.DataLocation.NodeHistorical)
118
+
119
+ if self.echo_level > 0: FlushAll()
120
+
121
+ self._GetSolver().SolveSolutionStep()
122
+
123
+ # Export fields
124
+ for field_settings in self.communication_settings["export_fields"]:
125
+ identifier = field_settings["identifier"].GetString()
126
+ model_part_name = field_settings["model_part_name"].GetString()
127
+ model_part = self.model[model_part_name]
128
+ variable_name = field_settings["variable_name"].GetString()
129
+ variable = KM.KratosGlobals.GetVariable(variable_name)
130
+
131
+ info = CoSimIO.Info()
132
+ info.SetString("connection_name", self.connection_name)
133
+ info.SetString("identifier", identifier)
134
+ CoSimIO.ExportData(info, model_part, variable, KM.Globals.DataLocation.NodeHistorical)
135
+
136
+ return AnalysisStageWithCoSimIO
@@ -0,0 +1,66 @@
1
+ # Importing the Kratos Library
2
+ import KratosMultiphysics as KM
3
+
4
+ # CoSimulation imports
5
+ import KratosMultiphysics.CoSimulationApplication.co_simulation_tools as cs_tools
6
+ import KratosMultiphysics.CoSimulationApplication.colors as colors
7
+
8
+ class CoSimulationConvergenceAccelerator:
9
+ """Baseclass for the convergence acceleratos used for CoSimulation
10
+ Relaxes the solution to increase the speed of convergence in a (strongly) coupled simulation
11
+
12
+ Note that the interface matches the convergence accelerators in the KratosCore such that they can be used interchangeable
13
+ ("kratos/solving_strategies/convergence_accelerators/convergence_accelerator.h")
14
+ """
15
+ def __init__(self, settings):
16
+ self.settings = settings
17
+ self.settings.RecursivelyValidateAndAssignDefaults(self._GetDefaultParameters())
18
+
19
+ self.echo_level = self.settings["echo_level"].GetInt()
20
+
21
+ def Initialize(self):
22
+ pass
23
+
24
+ def Finalize(self):
25
+ pass
26
+
27
+ def InitializeSolutionStep(self):
28
+ pass
29
+
30
+ def FinalizeSolutionStep(self):
31
+ pass
32
+
33
+ def InitializeNonLinearIteration(self):
34
+ pass
35
+
36
+ def FinalizeNonLinearIteration(self):
37
+ pass
38
+
39
+ def PrintInfo(self):
40
+ '''Function to print Info abt the Object
41
+ Can be overridden in derived classes to print more information
42
+ '''
43
+ cs_tools.cs_print_info("Convergence Accelerator", colors.bold(self._ClassName()))
44
+
45
+ def Check(self):
46
+ cs_tools.cs_print_warning("Convergence Accelerator", "The convergence accelerators do not yet implement Check!")
47
+
48
+ def UpdateSolution(self, residual, iteration_guess):
49
+ # TODO this should update the solution in place, otherwise not compatible with the conv-acc in the FSI-App
50
+ # => would probably not be compatible with any C++ Conv-Acc
51
+ raise NotImplementedError('"UpdateSolution" has to be implemented in the derived class!')
52
+
53
+ @classmethod
54
+ def SupportsDistributedData(cls):
55
+ return False
56
+
57
+ @classmethod
58
+ def _ClassName(cls):
59
+ return cls.__name__
60
+
61
+ @classmethod
62
+ def _GetDefaultParameters(cls):
63
+ return KM.Parameters("""{
64
+ "type" : "UNSPECIFIED",
65
+ "echo_level" : 0
66
+ }""")
@@ -0,0 +1,56 @@
1
+ # Importing the Kratos Library
2
+ import KratosMultiphysics as KM
3
+
4
+ # CoSimulation imports
5
+ import KratosMultiphysics.CoSimulationApplication.co_simulation_tools as cs_tools
6
+ import KratosMultiphysics.CoSimulationApplication.colors as colors
7
+
8
+ class CoSimulationConvergenceCriteria:
9
+ """Baseclass for the convergence criteria used for CoSimulation
10
+ Checks if convergence was achieved in a (strongly) coupled simulation
11
+ """
12
+ def __init__(self, settings):
13
+ self.settings = settings
14
+ self.settings.RecursivelyValidateAndAssignDefaults(self._GetDefaultParameters())
15
+
16
+ self.echo_level = self.settings["echo_level"].GetInt()
17
+
18
+ def Initialize(self):
19
+ pass
20
+
21
+ def Finalize(self):
22
+ pass
23
+
24
+ def InitializeSolutionStep(self):
25
+ pass
26
+
27
+ def FinalizeSolutionStep(self):
28
+ pass
29
+
30
+ def InitializeNonLinearIteration(self):
31
+ pass
32
+
33
+ def FinalizeNonLinearIteration(self):
34
+ pass
35
+
36
+ def IsConverged(self, residual, current_data):
37
+ raise NotImplementedError('"IsConverged" has to be implemented in the derived class!')
38
+
39
+ def PrintInfo(self):
40
+ cs_tools.cs_print_info("Convergence Criteria", colors.bold(self._ClassName()))
41
+
42
+ def Check(self):
43
+ cs_tools.cs_print_warning("Convergence Criteria", colors.bold(self._ClassName()), 'does not implement "Check"')
44
+
45
+ @classmethod
46
+ def _ClassName(cls):
47
+ return cls.__name__
48
+
49
+ @classmethod
50
+ def _GetDefaultParameters(cls):
51
+ return KM.Parameters("""{
52
+ "type" : "UNSPECIFIED",
53
+ "solver" : "UNSPECIFIED",
54
+ "data_name" : "UNSPECIFIED",
55
+ "echo_level" : 0
56
+ }""")