KratosCoSimulationApplication 10.4.2__2-cp38-cp38-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.
- KratosMultiphysics/.libs/KratosCoSimulationApplication.pyd +0 -0
- KratosMultiphysics/.libs/KratosCoSimulationCore.dll +0 -0
- KratosMultiphysics/.libs/KratosCoSimulationCore.lib +0 -0
- KratosMultiphysics/.libs/co_sim_io.dll +0 -0
- KratosMultiphysics/.libs/co_sim_io.lib +0 -0
- KratosMultiphysics/CoSimulationApplication/MainKratosCoSim.py +15 -0
- KratosMultiphysics/CoSimulationApplication/__init__.py +23 -0
- KratosMultiphysics/CoSimulationApplication/analysis_stage_with_co_sim_io.py +136 -0
- KratosMultiphysics/CoSimulationApplication/base_classes/__init__.py +0 -0
- KratosMultiphysics/CoSimulationApplication/base_classes/co_simulation_convergence_accelerator.py +66 -0
- KratosMultiphysics/CoSimulationApplication/base_classes/co_simulation_convergence_criteria.py +56 -0
- KratosMultiphysics/CoSimulationApplication/base_classes/co_simulation_coupled_solver.py +443 -0
- KratosMultiphysics/CoSimulationApplication/base_classes/co_simulation_coupling_operation.py +60 -0
- KratosMultiphysics/CoSimulationApplication/base_classes/co_simulation_data_transfer_operator.py +67 -0
- KratosMultiphysics/CoSimulationApplication/base_classes/co_simulation_io.py +73 -0
- KratosMultiphysics/CoSimulationApplication/base_classes/co_simulation_predictor.py +68 -0
- KratosMultiphysics/CoSimulationApplication/base_classes/co_simulation_solver_wrapper.py +170 -0
- KratosMultiphysics/CoSimulationApplication/co_simulation_analysis.py +133 -0
- KratosMultiphysics/CoSimulationApplication/co_simulation_tools.py +18 -0
- KratosMultiphysics/CoSimulationApplication/colors.py +78 -0
- KratosMultiphysics/CoSimulationApplication/convergence_accelerators/__init__.py +0 -0
- KratosMultiphysics/CoSimulationApplication/convergence_accelerators/aitken.py +86 -0
- KratosMultiphysics/CoSimulationApplication/convergence_accelerators/anderson.py +105 -0
- KratosMultiphysics/CoSimulationApplication/convergence_accelerators/block_ibqnls.py +199 -0
- KratosMultiphysics/CoSimulationApplication/convergence_accelerators/block_mvqn.py +128 -0
- KratosMultiphysics/CoSimulationApplication/convergence_accelerators/constant_relaxation.py +42 -0
- KratosMultiphysics/CoSimulationApplication/convergence_accelerators/convergence_accelerator_wrapper.py +273 -0
- KratosMultiphysics/CoSimulationApplication/convergence_accelerators/iqnils.py +169 -0
- KratosMultiphysics/CoSimulationApplication/convergence_accelerators/mvqn.py +114 -0
- KratosMultiphysics/CoSimulationApplication/convergence_criteria/__init__.py +0 -0
- KratosMultiphysics/CoSimulationApplication/convergence_criteria/absolute_norm_energy_conjugate.py +132 -0
- KratosMultiphysics/CoSimulationApplication/convergence_criteria/convergence_criteria_wrapper.py +85 -0
- KratosMultiphysics/CoSimulationApplication/convergence_criteria/relative_norm_initial_residual.py +74 -0
- KratosMultiphysics/CoSimulationApplication/convergence_criteria/relative_norm_previous_residual.py +72 -0
- KratosMultiphysics/CoSimulationApplication/coupled_solvers/__init__.py +0 -0
- KratosMultiphysics/CoSimulationApplication/coupled_solvers/block_strong.py +86 -0
- KratosMultiphysics/CoSimulationApplication/coupled_solvers/feti_dynamic_coupled_solver.py +270 -0
- KratosMultiphysics/CoSimulationApplication/coupled_solvers/gauss_seidel_strong.py +159 -0
- KratosMultiphysics/CoSimulationApplication/coupled_solvers/gauss_seidel_weak.py +20 -0
- KratosMultiphysics/CoSimulationApplication/coupled_solvers/jacobi_strong.py +158 -0
- KratosMultiphysics/CoSimulationApplication/coupled_solvers/jacobi_weak.py +24 -0
- KratosMultiphysics/CoSimulationApplication/coupling_interface_data.py +273 -0
- KratosMultiphysics/CoSimulationApplication/coupling_operations/__init__.py +0 -0
- KratosMultiphysics/CoSimulationApplication/coupling_operations/compute_boundary_force.py +139 -0
- KratosMultiphysics/CoSimulationApplication/coupling_operations/compute_normals.py +60 -0
- KratosMultiphysics/CoSimulationApplication/coupling_operations/compute_resultants.py +54 -0
- KratosMultiphysics/CoSimulationApplication/coupling_operations/convert_distributed_values_to_point.py +73 -0
- KratosMultiphysics/CoSimulationApplication/coupling_operations/coupling_output.py +76 -0
- KratosMultiphysics/CoSimulationApplication/coupling_operations/create_point_load_model_part.py +50 -0
- KratosMultiphysics/CoSimulationApplication/coupling_operations/distribute_point_values.py +80 -0
- KratosMultiphysics/CoSimulationApplication/coupling_operations/elemental_data_to_nodal_data.py +100 -0
- KratosMultiphysics/CoSimulationApplication/coupling_operations/impose_mesh_displacement.py +58 -0
- KratosMultiphysics/CoSimulationApplication/coupling_operations/nodal_data_to_elemental_data.py +84 -0
- KratosMultiphysics/CoSimulationApplication/coupling_operations/print_iteration_number.py +77 -0
- KratosMultiphysics/CoSimulationApplication/coupling_operations/reset_pfem_kinematics.py +47 -0
- KratosMultiphysics/CoSimulationApplication/coupling_operations/scaling.py +74 -0
- KratosMultiphysics/CoSimulationApplication/data_transfer_operators/3d_1d_data_transfer.py +288 -0
- KratosMultiphysics/CoSimulationApplication/data_transfer_operators/__init__.py +0 -0
- KratosMultiphysics/CoSimulationApplication/data_transfer_operators/copy.py +30 -0
- KratosMultiphysics/CoSimulationApplication/data_transfer_operators/copy_single_to_distributed.py +6 -0
- KratosMultiphysics/CoSimulationApplication/data_transfer_operators/copy_with_empty_ranks.py +55 -0
- KratosMultiphysics/CoSimulationApplication/data_transfer_operators/kratos_beam_mapping.py +129 -0
- KratosMultiphysics/CoSimulationApplication/data_transfer_operators/kratos_mapping.py +209 -0
- KratosMultiphysics/CoSimulationApplication/data_transfer_operators/kratos_mapping_with_debug.py +396 -0
- KratosMultiphysics/CoSimulationApplication/data_transfer_operators/sum_distributed_to_single.py +48 -0
- KratosMultiphysics/CoSimulationApplication/data_transfer_operators/sum_many_to_many.py +50 -0
- KratosMultiphysics/CoSimulationApplication/data_transfer_operators/transfer_one_to_many.py +58 -0
- KratosMultiphysics/CoSimulationApplication/empire_wrapper.py +524 -0
- KratosMultiphysics/CoSimulationApplication/factories/__init__.py +0 -0
- KratosMultiphysics/CoSimulationApplication/factories/base_factory.py +20 -0
- KratosMultiphysics/CoSimulationApplication/factories/convergence_accelerator_factory.py +5 -0
- KratosMultiphysics/CoSimulationApplication/factories/convergence_criterion_factory.py +5 -0
- KratosMultiphysics/CoSimulationApplication/factories/coupling_operation_factory.py +5 -0
- KratosMultiphysics/CoSimulationApplication/factories/data_transfer_operator_factory.py +5 -0
- KratosMultiphysics/CoSimulationApplication/factories/helpers.py +88 -0
- KratosMultiphysics/CoSimulationApplication/factories/io_factory.py +5 -0
- KratosMultiphysics/CoSimulationApplication/factories/predictor_factory.py +5 -0
- KratosMultiphysics/CoSimulationApplication/factories/solver_wrapper_factory.py +5 -0
- KratosMultiphysics/CoSimulationApplication/fluid_dynamics_analysis_with_co_sim_io.py +22 -0
- KratosMultiphysics/CoSimulationApplication/function_callback_utility.py +41 -0
- KratosMultiphysics/CoSimulationApplication/helpers/__init__.py +0 -0
- KratosMultiphysics/CoSimulationApplication/helpers/dummy_solver_wrapper.py +39 -0
- KratosMultiphysics/CoSimulationApplication/predictors/__init__.py +0 -0
- KratosMultiphysics/CoSimulationApplication/predictors/average_value_based.py +51 -0
- KratosMultiphysics/CoSimulationApplication/predictors/linear.py +20 -0
- KratosMultiphysics/CoSimulationApplication/predictors/linear_derivative_based.py +39 -0
- KratosMultiphysics/CoSimulationApplication/processes/__init__.py +0 -0
- KratosMultiphysics/CoSimulationApplication/processes/create_point_based_entites_process.py +112 -0
- KratosMultiphysics/CoSimulationApplication/solver_wrappers/__init__.py +0 -0
- KratosMultiphysics/CoSimulationApplication/solver_wrappers/cpp_ping_pong/__init__.py +0 -0
- KratosMultiphysics/CoSimulationApplication/solver_wrappers/cpp_ping_pong/ping_pong_io.py +69 -0
- KratosMultiphysics/CoSimulationApplication/solver_wrappers/cpp_ping_pong/ping_pong_wrapper.py +70 -0
- KratosMultiphysics/CoSimulationApplication/solver_wrappers/dummy_io.py +28 -0
- KratosMultiphysics/CoSimulationApplication/solver_wrappers/empire_io.py +91 -0
- KratosMultiphysics/CoSimulationApplication/solver_wrappers/existing_co_simulation.py +18 -0
- KratosMultiphysics/CoSimulationApplication/solver_wrappers/external/__init__.py +0 -0
- KratosMultiphysics/CoSimulationApplication/solver_wrappers/external/acusolve_wrapper.py +255 -0
- KratosMultiphysics/CoSimulationApplication/solver_wrappers/external/external_solver_wrapper.py +60 -0
- KratosMultiphysics/CoSimulationApplication/solver_wrappers/external/flower_wrapper.py +86 -0
- KratosMultiphysics/CoSimulationApplication/solver_wrappers/external/openfoam_wrapper.py +61 -0
- KratosMultiphysics/CoSimulationApplication/solver_wrappers/external/remote_controlled_solver_wrapper.py +121 -0
- KratosMultiphysics/CoSimulationApplication/solver_wrappers/kratos/__init__.py +0 -0
- KratosMultiphysics/CoSimulationApplication/solver_wrappers/kratos/convection_diffusion_wrapper.py +25 -0
- KratosMultiphysics/CoSimulationApplication/solver_wrappers/kratos/dem_wrapper.py +51 -0
- KratosMultiphysics/CoSimulationApplication/solver_wrappers/kratos/fluid_dynamics_wrapper.py +43 -0
- KratosMultiphysics/CoSimulationApplication/solver_wrappers/kratos/kratos_base_wrapper.py +169 -0
- KratosMultiphysics/CoSimulationApplication/solver_wrappers/kratos/mpm_dirichlet_wrapper.py +60 -0
- KratosMultiphysics/CoSimulationApplication/solver_wrappers/kratos/mpm_neumann_wrapper.py +52 -0
- KratosMultiphysics/CoSimulationApplication/solver_wrappers/kratos/particle_mechanics_dirichlet_wrapper.py +15 -0
- KratosMultiphysics/CoSimulationApplication/solver_wrappers/kratos/particle_mechanics_neumann_wrapper.py +15 -0
- KratosMultiphysics/CoSimulationApplication/solver_wrappers/kratos/pfem_fluid_dynamics_wrapper.py +59 -0
- KratosMultiphysics/CoSimulationApplication/solver_wrappers/kratos/potential_flow_wrapper.py +57 -0
- KratosMultiphysics/CoSimulationApplication/solver_wrappers/kratos/rom_wrapper.py +33 -0
- KratosMultiphysics/CoSimulationApplication/solver_wrappers/kratos/structural_mechanics_wrapper.py +39 -0
- KratosMultiphysics/CoSimulationApplication/solver_wrappers/kratos_co_sim_io.py +138 -0
- KratosMultiphysics/CoSimulationApplication/solver_wrappers/rigid_body/rigid_body_input_check.py +203 -0
- KratosMultiphysics/CoSimulationApplication/solver_wrappers/rigid_body/rigid_body_solver.py +485 -0
- KratosMultiphysics/CoSimulationApplication/solver_wrappers/rigid_body/rigid_body_solver_wrapper.py +66 -0
- KratosMultiphysics/CoSimulationApplication/solver_wrappers/sdof/__init__.py +0 -0
- KratosMultiphysics/CoSimulationApplication/solver_wrappers/sdof/sdof_solver.py +289 -0
- KratosMultiphysics/CoSimulationApplication/solver_wrappers/sdof/sdof_solver_wrapper.py +66 -0
- KratosMultiphysics/CoSimulationApplication/solver_wrappers/sdof/sdof_static_solver.py +145 -0
- KratosMultiphysics/CoSimulationApplication/solver_wrappers/sdof/static_sdof_solver_wrapper.py +43 -0
- KratosMultiphysics/CoSimulationApplication/structural_mechanics_analysis_with_co_sim_io.py +23 -0
- KratosMultiphysics/CoSimulationApplication/utilities/__init__.py +0 -0
- KratosMultiphysics/CoSimulationApplication/utilities/data_communicator_utilities.py +40 -0
- KratosMultiphysics/CoSimulationApplication/utilities/model_part_utilities.py +72 -0
- kratoscosimulationapplication-10.4.2.dist-info/METADATA +479 -0
- kratoscosimulationapplication-10.4.2.dist-info/RECORD +130 -0
- kratoscosimulationapplication-10.4.2.dist-info/WHEEL +5 -0
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
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
|
|
File without changes
|
KratosMultiphysics/CoSimulationApplication/base_classes/co_simulation_convergence_accelerator.py
ADDED
|
@@ -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
|
+
}""")
|