KratosShapeOptimizationApplication 10.4.4__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.
- KratosMultiphysics/.libs/KratosShapeOptimizationApplication.so +0 -0
- KratosMultiphysics/.libs/libKratosShapeOptimizationCore.dylib +0 -0
- KratosMultiphysics/ShapeOptimizationApplication/TemplateMainKratosShapeOptimization.py +31 -0
- KratosMultiphysics/ShapeOptimizationApplication/__init__.py +19 -0
- KratosMultiphysics/ShapeOptimizationApplication/algorithms/__init__.py +0 -0
- KratosMultiphysics/ShapeOptimizationApplication/algorithms/algorithm_base.py +31 -0
- KratosMultiphysics/ShapeOptimizationApplication/algorithms/algorithm_bead_optimization.py +412 -0
- KratosMultiphysics/ShapeOptimizationApplication/algorithms/algorithm_factory.py +62 -0
- KratosMultiphysics/ShapeOptimizationApplication/algorithms/algorithm_gradient_projection.py +317 -0
- KratosMultiphysics/ShapeOptimizationApplication/algorithms/algorithm_penalized_projection.py +225 -0
- KratosMultiphysics/ShapeOptimizationApplication/algorithms/algorithm_relaxed_gradient_projection.py +580 -0
- KratosMultiphysics/ShapeOptimizationApplication/algorithms/algorithm_shape_fraction_optimization.py +622 -0
- KratosMultiphysics/ShapeOptimizationApplication/algorithms/algorithm_steepest_descent.py +255 -0
- KratosMultiphysics/ShapeOptimizationApplication/algorithms/algorithm_trust_region.py +657 -0
- KratosMultiphysics/ShapeOptimizationApplication/analyzers/__init__.py +0 -0
- KratosMultiphysics/ShapeOptimizationApplication/analyzers/analyzer_base.py +30 -0
- KratosMultiphysics/ShapeOptimizationApplication/analyzers/analyzer_empty.py +21 -0
- KratosMultiphysics/ShapeOptimizationApplication/analyzers/analyzer_factory.py +310 -0
- KratosMultiphysics/ShapeOptimizationApplication/analyzers/analyzer_internal.py +155 -0
- KratosMultiphysics/ShapeOptimizationApplication/communicator_factory.py +259 -0
- KratosMultiphysics/ShapeOptimizationApplication/custom_ios/__init__.py +0 -0
- KratosMultiphysics/ShapeOptimizationApplication/custom_ios/wrl_io.py +82 -0
- KratosMultiphysics/ShapeOptimizationApplication/custom_ios/wrl_reader.py +119 -0
- KratosMultiphysics/ShapeOptimizationApplication/loggers/__init__.py +0 -0
- KratosMultiphysics/ShapeOptimizationApplication/loggers/data_logger_factory.py +199 -0
- KratosMultiphysics/ShapeOptimizationApplication/loggers/design_logger_base.py +28 -0
- KratosMultiphysics/ShapeOptimizationApplication/loggers/design_logger_gid.py +112 -0
- KratosMultiphysics/ShapeOptimizationApplication/loggers/design_logger_unv.py +73 -0
- KratosMultiphysics/ShapeOptimizationApplication/loggers/design_logger_vtk.py +96 -0
- KratosMultiphysics/ShapeOptimizationApplication/loggers/sensitivity_heatmap_logger.py +91 -0
- KratosMultiphysics/ShapeOptimizationApplication/loggers/value_logger_base.py +128 -0
- KratosMultiphysics/ShapeOptimizationApplication/loggers/value_logger_bead_optimization.py +79 -0
- KratosMultiphysics/ShapeOptimizationApplication/loggers/value_logger_gradient_projection.py +80 -0
- KratosMultiphysics/ShapeOptimizationApplication/loggers/value_logger_penalized_projection.py +79 -0
- KratosMultiphysics/ShapeOptimizationApplication/loggers/value_logger_relaxed_gradient_projection.py +108 -0
- KratosMultiphysics/ShapeOptimizationApplication/loggers/value_logger_shape_fraction_optimization.py +92 -0
- KratosMultiphysics/ShapeOptimizationApplication/loggers/value_logger_steepest_descent.py +64 -0
- KratosMultiphysics/ShapeOptimizationApplication/loggers/value_logger_trust_region.py +100 -0
- KratosMultiphysics/ShapeOptimizationApplication/mapper_factory.py +100 -0
- KratosMultiphysics/ShapeOptimizationApplication/mapping/__init__.py +0 -0
- KratosMultiphysics/ShapeOptimizationApplication/mapping/in_plane_vertex_morphing_mapper.py +140 -0
- KratosMultiphysics/ShapeOptimizationApplication/mapping/sliding_vertex_morphing_mapper.py +378 -0
- KratosMultiphysics/ShapeOptimizationApplication/mesh_controllers/__init__.py +0 -0
- KratosMultiphysics/ShapeOptimizationApplication/mesh_controllers/mesh_controller_base.py +22 -0
- KratosMultiphysics/ShapeOptimizationApplication/mesh_controllers/mesh_controller_basic_updating.py +35 -0
- KratosMultiphysics/ShapeOptimizationApplication/mesh_controllers/mesh_controller_with_solver.py +237 -0
- KratosMultiphysics/ShapeOptimizationApplication/model_part_controller_factory.py +197 -0
- KratosMultiphysics/ShapeOptimizationApplication/optimizer_factory.py +235 -0
- KratosMultiphysics/ShapeOptimizationApplication/response_functions/__init__.py +0 -0
- KratosMultiphysics/ShapeOptimizationApplication/response_functions/airfoil_2d_responses.py +189 -0
- KratosMultiphysics/ShapeOptimizationApplication/response_functions/face_angle.py +140 -0
- KratosMultiphysics/ShapeOptimizationApplication/response_functions/mesh_based_packaging.py +70 -0
- KratosMultiphysics/ShapeOptimizationApplication/response_functions/packaging_response_base.py +156 -0
- KratosMultiphysics/ShapeOptimizationApplication/response_functions/plane_based_packaging.py +61 -0
- KratosMultiphysics/ShapeOptimizationApplication/response_functions/response_function_factory.py +40 -0
- KratosMultiphysics/ShapeOptimizationApplication/response_functions/surface_normal_shape_change.py +125 -0
- KratosMultiphysics/ShapeOptimizationApplication/response_functions/total_volume.py +56 -0
- KratosMultiphysics/ShapeOptimizationApplication/utilities/__init__.py +0 -0
- KratosMultiphysics/ShapeOptimizationApplication/utilities/custom_math.py +443 -0
- KratosMultiphysics/ShapeOptimizationApplication/utilities/custom_sensitivity_heatmap.py +235 -0
- KratosMultiphysics/ShapeOptimizationApplication/utilities/custom_timer.py +47 -0
- KratosMultiphysics/ShapeOptimizationApplication/utilities/custom_variable_utilities.py +54 -0
- kratosshapeoptimizationapplication-10.4.4.dist-info/METADATA +31 -0
- kratosshapeoptimizationapplication-10.4.4.dist-info/RECORD +69 -0
- kratosshapeoptimizationapplication-10.4.4.dist-info/WHEEL +6 -0
- kratosshapeoptimizationapplication.dylibs/libKratosCore.dylib +4 -0
- kratosshapeoptimizationapplication.dylibs/libgcc_s.1.1.dylib +0 -0
- kratosshapeoptimizationapplication.dylibs/libgomp.1.dylib +0 -0
- kratosshapeoptimizationapplication.dylibs/libstdc++.6.dylib +0 -0
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
# ==============================================================================
|
|
2
|
+
# KratosShapeOptimizationApplication
|
|
3
|
+
#
|
|
4
|
+
# License: BSD License
|
|
5
|
+
# license: ShapeOptimizationApplication/license.txt
|
|
6
|
+
#
|
|
7
|
+
# Main authors: Schmölz David, https://github.com/dschmoelz
|
|
8
|
+
#
|
|
9
|
+
# ==============================================================================
|
|
10
|
+
|
|
11
|
+
# Kratos Core and Apps
|
|
12
|
+
import KratosMultiphysics as Kratos
|
|
13
|
+
import KratosMultiphysics.ShapeOptimizationApplication as KSO
|
|
14
|
+
from KratosMultiphysics.ShapeOptimizationApplication.utilities import custom_math as cm
|
|
15
|
+
# Import additional libraries
|
|
16
|
+
|
|
17
|
+
# some response are continuously formulated
|
|
18
|
+
continuous_response_gradients = ("plane_based_packaging", "mesh_based_packaging")
|
|
19
|
+
|
|
20
|
+
# ==============================================================================
|
|
21
|
+
# --------------------------------------------------------------------------
|
|
22
|
+
class SensitivityHeatmapCalculator(object):
|
|
23
|
+
|
|
24
|
+
# --------------------------------------------------------------------------
|
|
25
|
+
def __init__(self, design_surface, objectives, constraints, settings):
|
|
26
|
+
self.design_surface = design_surface
|
|
27
|
+
self.objectives = objectives
|
|
28
|
+
self.constraints = constraints
|
|
29
|
+
|
|
30
|
+
if objectives.size() > 1:
|
|
31
|
+
raise RuntimeError("Sensitivity Heatmap only supports one objective function!")
|
|
32
|
+
|
|
33
|
+
self.settings = settings
|
|
34
|
+
self.norm_type = settings["norm_type"].GetString()
|
|
35
|
+
if self.norm_type not in ("max", "l2"):
|
|
36
|
+
raise NameError("""The following norm type is not supported by the
|
|
37
|
+
sensitivity heatmap logger (name may be misspelled): """ + self.norm_type)
|
|
38
|
+
|
|
39
|
+
self.sensitivity_weighting = settings["sensitivity_weighting"].GetBool()
|
|
40
|
+
self.map_sensitivities = settings["mapping"].GetBool()
|
|
41
|
+
self.relaxation_method = settings["relaxation_method"].GetString()
|
|
42
|
+
if self.relaxation_method not in ("reciprocal", "constant"):
|
|
43
|
+
raise NameError("""The following relaxation method is not supported by the
|
|
44
|
+
sensitivity heatmap logger (name may be misspelled): """ + self.relaxation_method)
|
|
45
|
+
|
|
46
|
+
self.design_variable_name = settings["design_variable_name"].GetString()
|
|
47
|
+
self.design_variable_dimension = settings["design_variable_dimension"].GetInt()
|
|
48
|
+
|
|
49
|
+
self.optimization_utilities = KSO.OptimizationUtilities
|
|
50
|
+
|
|
51
|
+
# --------------------------------------------------------------------------
|
|
52
|
+
def ComputeHeatmaps(self, optimization_iteration, mapper):
|
|
53
|
+
|
|
54
|
+
# calculate nodal areas for weighting
|
|
55
|
+
if self.sensitivity_weighting:
|
|
56
|
+
KSO.GeometryUtilities(self.design_surface).CalculateNodalAreasFromConditions()
|
|
57
|
+
|
|
58
|
+
self.__ComputeIndividualHeatmaps(optimization_iteration, mapper)
|
|
59
|
+
if self.constraints.size() != 0:
|
|
60
|
+
self.__ComputeAggregatedHeatmap(optimization_iteration, mapper)
|
|
61
|
+
|
|
62
|
+
# --------------------------------------------------------------------------
|
|
63
|
+
def __ComputeIndividualHeatmaps(self, optimization_iteration, mapper):
|
|
64
|
+
|
|
65
|
+
objective_gradient_name = f"DF1D{self.design_variable_name}"
|
|
66
|
+
objective_type = self.objectives[0]["response_settings"]["response_type"]
|
|
67
|
+
self.__ComputeResponseHeatmap(objective_gradient_name, objective_type, optimization_iteration, mapper)
|
|
68
|
+
|
|
69
|
+
if self.constraints.size() != 0:
|
|
70
|
+
for itr in range(self.constraints.size()):
|
|
71
|
+
constraint_gradient_name = f"DC{(itr+1)}D{self.design_variable_name}"
|
|
72
|
+
constraint_type = self.constraints[itr]["response_settings"]["response_type"]
|
|
73
|
+
self.__ComputeResponseHeatmap(constraint_gradient_name, constraint_type, optimization_iteration, mapper)
|
|
74
|
+
|
|
75
|
+
# --------------------------------------------------------------------------
|
|
76
|
+
def __ComputeAggregatedHeatmap(self, optimization_iteration, mapper):
|
|
77
|
+
|
|
78
|
+
# normalize objective gradient
|
|
79
|
+
objective_gradient_name = f"DF1D{self.design_variable_name}"
|
|
80
|
+
objective_type = self.objectives[0]["response_settings"]["response_type"]
|
|
81
|
+
df_dx_normalized = self.__NormalizeResponseGradient(objective_gradient_name, objective_type)
|
|
82
|
+
|
|
83
|
+
# normalize constraints
|
|
84
|
+
dc_dx_normalized = []
|
|
85
|
+
for itr in range(self.constraints.size()):
|
|
86
|
+
constraint_gradient_name = f"DC{(itr+1)}D{self.design_variable_name}"
|
|
87
|
+
constraint_type = self.constraints[itr]["response_settings"]["response_type"]
|
|
88
|
+
dc_dx_normalized.append(self.__NormalizeResponseGradient(constraint_gradient_name, constraint_type))
|
|
89
|
+
|
|
90
|
+
# fill heat map for each node
|
|
91
|
+
heat = Kratos.Vector(len(self.design_surface.Nodes))
|
|
92
|
+
for i in range(len(self.design_surface.Nodes)):
|
|
93
|
+
index = self.design_variable_dimension*i
|
|
94
|
+
df_dx_i = df_dx_normalized[index:index+self.design_variable_dimension]
|
|
95
|
+
df_dx_i_norm = cm.Norm2(df_dx_i)
|
|
96
|
+
|
|
97
|
+
heat_i = df_dx_i_norm
|
|
98
|
+
for dc_dx in dc_dx_normalized:
|
|
99
|
+
dc_dx_i = dc_dx[index:index+self.design_variable_dimension]
|
|
100
|
+
dc_dx_i_norm = cm.Norm2(dc_dx_i)
|
|
101
|
+
heat_i = max(heat_i, dc_dx_i_norm)
|
|
102
|
+
|
|
103
|
+
heat[i] = heat_i
|
|
104
|
+
|
|
105
|
+
if self.norm_type == "max":
|
|
106
|
+
heat_map_name = "HEATMAP_MAX"
|
|
107
|
+
elif self.norm_type == "l2":
|
|
108
|
+
heat_map_name = "HEATMAP_L2"
|
|
109
|
+
|
|
110
|
+
# relax heatmap
|
|
111
|
+
relaxation_coefficient = self.__GetRelaxationCoefficient(optimization_iteration)
|
|
112
|
+
if optimization_iteration == 1:
|
|
113
|
+
heat_relaxed = heat
|
|
114
|
+
else:
|
|
115
|
+
prev_heat = Kratos.Vector()
|
|
116
|
+
self.optimization_utilities.AssembleVector(self.design_surface, prev_heat, Kratos.KratosGlobals.GetVariable(heat_map_name))
|
|
117
|
+
heat_relaxed = Kratos.Vector(len(self.design_surface.Nodes))
|
|
118
|
+
for i in range(len(self.design_surface.Nodes)):
|
|
119
|
+
heat_relaxed[i] = relaxation_coefficient * heat[i] + (1 - relaxation_coefficient) * prev_heat[i]
|
|
120
|
+
|
|
121
|
+
self.optimization_utilities.AssignVectorToVariable(self.design_surface, heat_relaxed, Kratos.KratosGlobals.GetVariable(heat_map_name))
|
|
122
|
+
|
|
123
|
+
# --------------------------------------------------------------------------
|
|
124
|
+
def __ComputeResponseHeatmap( self, response_gradient_name, response_type, optimization_iteration, mapper):
|
|
125
|
+
|
|
126
|
+
response_is_weighted = False
|
|
127
|
+
if self.sensitivity_weighting and \
|
|
128
|
+
response_type not in continuous_response_gradients:
|
|
129
|
+
response_is_weighted = True
|
|
130
|
+
|
|
131
|
+
if response_is_weighted:
|
|
132
|
+
self.__WeightResponseGradient(response_gradient_name)
|
|
133
|
+
response_gradient_name += "_WEIGHTED"
|
|
134
|
+
if self.map_sensitivities:
|
|
135
|
+
# reponse has been already mapped by the optimization algorithm if it is not weighted
|
|
136
|
+
if response_is_weighted:
|
|
137
|
+
self.__MapResponseGradient(response_gradient_name, mapper)
|
|
138
|
+
response_gradient_name += "_MAPPED"
|
|
139
|
+
|
|
140
|
+
self.__RelaxResponseHeatmap(response_gradient_name, optimization_iteration)
|
|
141
|
+
|
|
142
|
+
# --------------------------------------------------------------------------
|
|
143
|
+
def __WeightResponseGradient( self, response_gradient_name ):
|
|
144
|
+
|
|
145
|
+
nodal_area = Kratos.Vector()
|
|
146
|
+
self.optimization_utilities.AssembleVector(self.design_surface, nodal_area, Kratos.KratosGlobals.GetVariable("NODAL_AREA"))
|
|
147
|
+
|
|
148
|
+
dg_dx = Kratos.Vector()
|
|
149
|
+
self.optimization_utilities.AssembleVector(self.design_surface, dg_dx, Kratos.KratosGlobals.GetVariable(response_gradient_name))
|
|
150
|
+
|
|
151
|
+
# weight response gradients with nodal area
|
|
152
|
+
dg_dx_weighted = Kratos.Vector(self.design_variable_dimension*len(self.design_surface.Nodes))
|
|
153
|
+
for i in range(len(self.design_surface.Nodes)):
|
|
154
|
+
for dim in range(self.design_variable_dimension):
|
|
155
|
+
index = self.design_variable_dimension * i + dim
|
|
156
|
+
if nodal_area[i] > 1e-8:
|
|
157
|
+
dg_dx_weighted[index] = dg_dx[index] / nodal_area[i]
|
|
158
|
+
else:
|
|
159
|
+
dg_dx_weighted[index] = dg_dx[index]
|
|
160
|
+
|
|
161
|
+
response_gradient_weighted_name = f"{response_gradient_name}_WEIGHTED"
|
|
162
|
+
self.optimization_utilities.AssignVectorToVariable(self.design_surface, dg_dx_weighted,
|
|
163
|
+
Kratos.KratosGlobals.GetVariable(response_gradient_weighted_name))
|
|
164
|
+
|
|
165
|
+
# --------------------------------------------------------------------------
|
|
166
|
+
def __MapResponseGradient( self, response_gradient_name, mapper ):
|
|
167
|
+
|
|
168
|
+
response_gradient_mapped_name = f"{response_gradient_name}_MAPPED"
|
|
169
|
+
mapper.InverseMap(Kratos.KratosGlobals.GetVariable(response_gradient_name),
|
|
170
|
+
Kratos.KratosGlobals.GetVariable(response_gradient_mapped_name))
|
|
171
|
+
|
|
172
|
+
# --------------------------------------------------------------------------
|
|
173
|
+
def __RelaxResponseHeatmap( self, response_gradient_name, optimization_iteration ):
|
|
174
|
+
|
|
175
|
+
relaxation_coefficient = self.__GetRelaxationCoefficient(optimization_iteration)
|
|
176
|
+
|
|
177
|
+
dg_dx = Kratos.Vector()
|
|
178
|
+
self.optimization_utilities.AssembleVector(self.design_surface, dg_dx, Kratos.KratosGlobals.GetVariable(response_gradient_name))
|
|
179
|
+
|
|
180
|
+
g_name = f"{response_gradient_name[0:4]}"
|
|
181
|
+
heatmap_dgdx_name = f"HEATMAP_{g_name}{self.design_variable_name}"
|
|
182
|
+
if optimization_iteration == 1:
|
|
183
|
+
heat_dfdx_relaxed = dg_dx
|
|
184
|
+
else:
|
|
185
|
+
prev_heat_dfdx = Kratos.Vector()
|
|
186
|
+
self.optimization_utilities.AssembleVector(self.design_surface, prev_heat_dfdx, Kratos.KratosGlobals.GetVariable(heatmap_dgdx_name))
|
|
187
|
+
heat_dfdx_relaxed = Kratos.Vector(self.design_variable_dimension*len(self.design_surface.Nodes))
|
|
188
|
+
for i in range(len(self.design_surface.Nodes)):
|
|
189
|
+
for dim in range(self.design_variable_dimension):
|
|
190
|
+
index = self.design_variable_dimension * i + dim
|
|
191
|
+
heat_dfdx_relaxed[index] = relaxation_coefficient * dg_dx[index] + (1 - relaxation_coefficient) * prev_heat_dfdx[index]
|
|
192
|
+
|
|
193
|
+
self.optimization_utilities.AssignVectorToVariable(self.design_surface, heat_dfdx_relaxed, Kratos.KratosGlobals.GetVariable(heatmap_dgdx_name))
|
|
194
|
+
|
|
195
|
+
# --------------------------------------------------------------------------
|
|
196
|
+
def __NormalizeResponseGradient( self, response_gradient_name, response_type ):
|
|
197
|
+
|
|
198
|
+
response_is_weighted = False
|
|
199
|
+
if self.sensitivity_weighting and \
|
|
200
|
+
response_type not in continuous_response_gradients:
|
|
201
|
+
response_is_weighted = True
|
|
202
|
+
|
|
203
|
+
if response_is_weighted:
|
|
204
|
+
response_gradient_name += "_WEIGHTED"
|
|
205
|
+
if self.map_sensitivities:
|
|
206
|
+
response_gradient_name += "_MAPPED"
|
|
207
|
+
|
|
208
|
+
optimization_utilities = KSO.OptimizationUtilities
|
|
209
|
+
|
|
210
|
+
dg_dx = Kratos.Vector()
|
|
211
|
+
optimization_utilities.AssembleVector(self.design_surface, dg_dx, Kratos.KratosGlobals.GetVariable(response_gradient_name))
|
|
212
|
+
|
|
213
|
+
if self.norm_type == "max":
|
|
214
|
+
dg_dx_norm = cm.NormInf3D(dg_dx)
|
|
215
|
+
elif self.norm_type == "l2":
|
|
216
|
+
dg_dx_norm = cm.Norm2(dg_dx)
|
|
217
|
+
else:
|
|
218
|
+
raise RuntimeError("Sensitivity Heatmap only supports 'max' or 'l2' norm!")
|
|
219
|
+
|
|
220
|
+
if dg_dx_norm != 0.0:
|
|
221
|
+
dg_dx_normalized = (1/dg_dx_norm) * dg_dx
|
|
222
|
+
else:
|
|
223
|
+
dg_dx_normalized = 0 * dg_dx
|
|
224
|
+
|
|
225
|
+
return dg_dx_normalized
|
|
226
|
+
|
|
227
|
+
# --------------------------------------------------------------------------
|
|
228
|
+
def __GetRelaxationCoefficient( self, optimization_iteration ):
|
|
229
|
+
|
|
230
|
+
if self.relaxation_method == "reciprocal":
|
|
231
|
+
return 1 / optimization_iteration
|
|
232
|
+
elif self.relaxation_method == "constant":
|
|
233
|
+
return self.settings["relaxation_coefficient"].GetDouble()
|
|
234
|
+
|
|
235
|
+
# ==============================================================================
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# ==============================================================================
|
|
2
|
+
# KratosShapeOptimizationApplication
|
|
3
|
+
#
|
|
4
|
+
# License: BSD License
|
|
5
|
+
# license: ShapeOptimizationApplication/license.txt
|
|
6
|
+
#
|
|
7
|
+
# Main authors: Baumgaertner Daniel, https://github.com/dbaumgaertner
|
|
8
|
+
# Geiser Armin, https://github.com/armingeiser
|
|
9
|
+
#
|
|
10
|
+
# ==============================================================================
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
# Import additional libraries
|
|
14
|
+
import time
|
|
15
|
+
|
|
16
|
+
# ==============================================================================
|
|
17
|
+
class Timer:
|
|
18
|
+
# --------------------------------------------------------------------------
|
|
19
|
+
def __init__( self ):
|
|
20
|
+
self.Precision = 3
|
|
21
|
+
self.StartGlobalTime = None
|
|
22
|
+
self.StartLapTime = None
|
|
23
|
+
self.LapTime = None
|
|
24
|
+
# --------------------------------------------------------------------------
|
|
25
|
+
def StartTimer( self ):
|
|
26
|
+
self.StartGlobalTime = time.time()
|
|
27
|
+
self.StartLapTime = time.time()
|
|
28
|
+
|
|
29
|
+
# --------------------------------------------------------------------------
|
|
30
|
+
def GetLapTime( self ):
|
|
31
|
+
LapTime = time.time() - self.StartLapTime
|
|
32
|
+
return round( LapTime, self.Precision )
|
|
33
|
+
|
|
34
|
+
# --------------------------------------------------------------------------
|
|
35
|
+
def StartNewLap( self ):
|
|
36
|
+
self.StartLapTime = time.time()
|
|
37
|
+
|
|
38
|
+
#---------------------------------------------------------------------------
|
|
39
|
+
def GetTotalTime( self ):
|
|
40
|
+
totalTime = time.time() - self.StartGlobalTime
|
|
41
|
+
return round( totalTime, self.Precision )
|
|
42
|
+
|
|
43
|
+
# --------------------------------------------------------------------------
|
|
44
|
+
def GetTimeStamp( self ):
|
|
45
|
+
return time.ctime()
|
|
46
|
+
|
|
47
|
+
# ==============================================================================
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# ==============================================================================
|
|
2
|
+
# KratosShapeOptimizationApplication
|
|
3
|
+
#
|
|
4
|
+
# License: BSD License
|
|
5
|
+
# license: ShapeOptimizationApplication/license.txt
|
|
6
|
+
#
|
|
7
|
+
# Main authors: Baumgaertner Daniel, https://github.com/dbaumgaertner
|
|
8
|
+
#
|
|
9
|
+
# ==============================================================================
|
|
10
|
+
def WriteDictionaryDataOnNodalVariable(data, model_part, nodal_variable):
|
|
11
|
+
for node_id, tmp_gradient in data.items():
|
|
12
|
+
model_part.Nodes[node_id].SetSolutionStepValue(nodal_variable, 0, tmp_gradient)
|
|
13
|
+
|
|
14
|
+
# ------------------------------------------------------------------------------
|
|
15
|
+
def ReadNodalVariableToList(model_part, nodal_variable, dimension=3):
|
|
16
|
+
variable_values_list = [0.0]*model_part.NumberOfNodes()*dimension
|
|
17
|
+
|
|
18
|
+
for itr, node in enumerate(model_part.Nodes):
|
|
19
|
+
tmp_values = node.GetSolutionStepValue(nodal_variable)
|
|
20
|
+
|
|
21
|
+
if dimension == 1:
|
|
22
|
+
variable_values_list[itr] = tmp_values
|
|
23
|
+
else:
|
|
24
|
+
for i in range(dimension):
|
|
25
|
+
variable_values_list[dimension*itr+i] = tmp_values[i]
|
|
26
|
+
|
|
27
|
+
return variable_values_list
|
|
28
|
+
|
|
29
|
+
# --------------------------------------------------------------------------
|
|
30
|
+
def WriteListToNodalVariable(input_list, model_part, nodal_variable, dimension=3):
|
|
31
|
+
if len(input_list) != model_part.NumberOfNodes()*dimension:
|
|
32
|
+
raise RuntimeError("custom_variable_utility::WriteListToNodalVariable: Wrong size of input_list!")
|
|
33
|
+
|
|
34
|
+
k = 0
|
|
35
|
+
for node in model_part.Nodes:
|
|
36
|
+
if dimension == 1:
|
|
37
|
+
tmp_values = input_list[k]
|
|
38
|
+
else:
|
|
39
|
+
tmp_values = input_list[k:k+dimension]
|
|
40
|
+
node.SetSolutionStepValue(nodal_variable, tmp_values)
|
|
41
|
+
k = k+dimension
|
|
42
|
+
|
|
43
|
+
# --------------------------------------------------------------------------
|
|
44
|
+
def WriteNodeCoordinatesToList(model_part):
|
|
45
|
+
variable_values_list = [0.0]*model_part.NumberOfNodes()*3
|
|
46
|
+
|
|
47
|
+
for itr, node in enumerate(model_part.Nodes):
|
|
48
|
+
variable_values_list[3*itr+0] = node.X
|
|
49
|
+
variable_values_list[3*itr+1] = node.Y
|
|
50
|
+
variable_values_list[3*itr+2] = node.Z
|
|
51
|
+
|
|
52
|
+
return variable_values_list
|
|
53
|
+
|
|
54
|
+
# ==============================================================================
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: KratosShapeOptimizationApplication
|
|
3
|
+
Version: 10.4.4
|
|
4
|
+
Summary: KRATOS Multiphysics ("Kratos") is a framework for building parallel, multi-disciplinary simulation software, aiming at modularity, extensibility, and high performance. Kratos is written in C++, and counts with an extensive Python interface.
|
|
5
|
+
Author-email: Kratos Team <kratos@listas.cimne.upc.edu>
|
|
6
|
+
License: BSD-4-Clause
|
|
7
|
+
Classifier: Programming Language :: C++
|
|
8
|
+
Classifier: Programming Language :: Python :: 3
|
|
9
|
+
Classifier: Topic :: Scientific/Engineering
|
|
10
|
+
Requires-Python: >=3.8
|
|
11
|
+
Requires-Dist: kratosmultiphysics==10.4.4
|
|
12
|
+
Description-Content-Type: text/markdown
|
|
13
|
+
|
|
14
|
+
# ShapeOptimizationApplication
|
|
15
|
+
|
|
16
|
+
The Kratos ShapeOptimizationApplication contains an implementation of the Vertex Morphing method for node-based shape optimization.
|
|
17
|
+
|
|
18
|
+
It can be used in combination with the Adjoint Sensitivity Analysis capabilities of the Kratos StructuralMechanicsApplication and ConvectionDiffusionApplication.
|
|
19
|
+
Additionally it offers an interface to use external response functions via custom python code.
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
## Examples
|
|
23
|
+
|
|
24
|
+
A few application examples can be found [here](https://github.com/KratosMultiphysics/Examples/tree/master/shape_optimization)
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
### References
|
|
28
|
+
|
|
29
|
+
- Bletzinger, K.-U. A consistent frame for sensitivity filtering and the vertex assigned morphing of optimal shape. Struct Multidisc Optim 49, 873–895 (2014). https://doi.org/10.1007/s00158-013-1031-5
|
|
30
|
+
- Bletzinger, K.-U. (2017). Shape Optimization. In Encyclopedia of Computational Mechanics Second Edition (eds E. Stein, R. Borst and T.J.R. Hughes). https://doi.org/10.1002/9781119176817.ecm2109
|
|
31
|
+
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
kratosshapeoptimizationapplication-10.4.4.dist-info/RECORD,,
|
|
2
|
+
kratosshapeoptimizationapplication-10.4.4.dist-info/WHEEL,sha256=QX0UaoWXQIAv8vp5R3do793urekDoJdJRoGCk8nXIBY,115
|
|
3
|
+
kratosshapeoptimizationapplication-10.4.4.dist-info/METADATA,sha256=jx423yyqWHk18LzRHbxDcHMvvtw0pY12B3ZoHKmP8xg,1663
|
|
4
|
+
KratosMultiphysics/.libs/libKratosShapeOptimizationCore.dylib,sha256=txhN5_COSYCgS8vtqqhItjZBObIf19JuG4AAO6Xg6Hs,4755424
|
|
5
|
+
KratosMultiphysics/.libs/KratosShapeOptimizationApplication.so,sha256=0lqzYU-jDzuqqTsCc8G0wiITOw1cIFqlcD9m8zrFAHI,1951360
|
|
6
|
+
KratosMultiphysics/ShapeOptimizationApplication/TemplateMainKratosShapeOptimization.py,sha256=AfN_XDKyrCs5o9QVoeBBDrvSLIhMVrlt9C5zXHUDMMI,1343
|
|
7
|
+
KratosMultiphysics/ShapeOptimizationApplication/communicator_factory.py,sha256=YvM5Q_psPUe9KR0UgnS-XSOwS48RBgb3LQdD9Mgc6SE,13498
|
|
8
|
+
KratosMultiphysics/ShapeOptimizationApplication/mapper_factory.py,sha256=C2EVo5Zov9PO7ANfxoimtkAsOpyPxEGy-fVQVL9HuNw,5476
|
|
9
|
+
KratosMultiphysics/ShapeOptimizationApplication/__init__.py,sha256=1P0_CzQiDhtVBO3QcOPUOb02FSIRfPMHcIh6nR0wyn8,811
|
|
10
|
+
KratosMultiphysics/ShapeOptimizationApplication/model_part_controller_factory.py,sha256=ZP_y4SZ-s0-5WxGGZzHyXj7LYg6frAUl5NxHTREWKFk,9727
|
|
11
|
+
KratosMultiphysics/ShapeOptimizationApplication/optimizer_factory.py,sha256=U3VHdu1CFE6-VEYXOlmtBhMqSePRFqVjg-qOW93-i4o,13333
|
|
12
|
+
KratosMultiphysics/ShapeOptimizationApplication/mapping/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
13
|
+
KratosMultiphysics/ShapeOptimizationApplication/mapping/in_plane_vertex_morphing_mapper.py,sha256=fU18L0CCsAsD7gNEIBYsWZOW3dH9LTMvu0iU5smOhYk,6901
|
|
14
|
+
KratosMultiphysics/ShapeOptimizationApplication/mapping/sliding_vertex_morphing_mapper.py,sha256=W8kxcqb6bS0ogU79Lrr2G2EkaauQxKuou7RqSaCMeZA,18652
|
|
15
|
+
KratosMultiphysics/ShapeOptimizationApplication/analyzers/analyzer_base.py,sha256=3lANIAwI22R0WUMZwRAlOYRdaNnC35THTQDloZ09GZQ,1316
|
|
16
|
+
KratosMultiphysics/ShapeOptimizationApplication/analyzers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
17
|
+
KratosMultiphysics/ShapeOptimizationApplication/analyzers/analyzer_factory.py,sha256=LeHftBaQkFB72tHS4R--OYWSWcjiPQ8oTcKrj3eLUDM,15259
|
|
18
|
+
KratosMultiphysics/ShapeOptimizationApplication/analyzers/analyzer_internal.py,sha256=co0MVNw7Gopdh_sG1QaNht6ccMQh927_1_CtOxOUSmA,8283
|
|
19
|
+
KratosMultiphysics/ShapeOptimizationApplication/analyzers/analyzer_empty.py,sha256=llKIFS6yS0wjwFPngDU5iAAg9z-ysH7zgC2Zqv_gyEs,856
|
|
20
|
+
KratosMultiphysics/ShapeOptimizationApplication/loggers/value_logger_shape_fraction_optimization.py,sha256=Iqz9LUCyKCrb_eMI5Vb9u4-1ye-jSNFPLh6oOUyyYoA,5161
|
|
21
|
+
KratosMultiphysics/ShapeOptimizationApplication/loggers/design_logger_base.py,sha256=2r_kDALwjPkxClOZzP5wA9-C_79Og9oMIhG4rFBFy0I,1423
|
|
22
|
+
KratosMultiphysics/ShapeOptimizationApplication/loggers/design_logger_unv.py,sha256=rV4TSp8awUTHy5uCFvQujfR-9vIZI-oyTQZe0QzHW_g,3603
|
|
23
|
+
KratosMultiphysics/ShapeOptimizationApplication/loggers/design_logger_gid.py,sha256=UlABuCjfV3fNo6luedL1xAbAHKi9OfQ7UZWKlOxtfp4,5466
|
|
24
|
+
KratosMultiphysics/ShapeOptimizationApplication/loggers/design_logger_vtk.py,sha256=Q3oztFf6wp0CssJRMyyeBHzVagbKrPjZi1RJKBkHFxk,4488
|
|
25
|
+
KratosMultiphysics/ShapeOptimizationApplication/loggers/value_logger_steepest_descent.py,sha256=DkKLvcX9Y0jETdptCv1p_J3aKvnr70FWLfPAVGdqEco,3445
|
|
26
|
+
KratosMultiphysics/ShapeOptimizationApplication/loggers/sensitivity_heatmap_logger.py,sha256=W9bXwk2iLzfAPc9Z_5HzLrGVjVmPnSzDnLgv5XJzAdY,4893
|
|
27
|
+
KratosMultiphysics/ShapeOptimizationApplication/loggers/value_logger_penalized_projection.py,sha256=FlFMxlwHNU2teYva23XxkBw3l2E39Y0G_YF2ofKVnQw,4353
|
|
28
|
+
KratosMultiphysics/ShapeOptimizationApplication/loggers/value_logger_trust_region.py,sha256=7sWCeWLt6QswCalSuoGAyVsghXVn6u2KiZftDHb60Po,5835
|
|
29
|
+
KratosMultiphysics/ShapeOptimizationApplication/loggers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
30
|
+
KratosMultiphysics/ShapeOptimizationApplication/loggers/data_logger_factory.py,sha256=BGaBqpgyIbv4TXNFmHaaBZSjCGvAZfcM9sOt4-02NVs,11563
|
|
31
|
+
KratosMultiphysics/ShapeOptimizationApplication/loggers/value_logger_base.py,sha256=UAgNb2hbnDVswkBl_89lezdWG_EeOa4Jva4AglWrOfU,6205
|
|
32
|
+
KratosMultiphysics/ShapeOptimizationApplication/loggers/value_logger_gradient_projection.py,sha256=weeqZr-VpMcVlbeeHzVsjO6q4MzQAFV694cKMWxDWHw,4418
|
|
33
|
+
KratosMultiphysics/ShapeOptimizationApplication/loggers/value_logger_relaxed_gradient_projection.py,sha256=HZMrZgxwSm0RlmlucC_ycErObco7YE7_CYhXvViFBhs,6523
|
|
34
|
+
KratosMultiphysics/ShapeOptimizationApplication/loggers/value_logger_bead_optimization.py,sha256=jJcfjvKAiEXKlztD4mAvONFzA97YC4qhDjcq3MQKob4,4791
|
|
35
|
+
KratosMultiphysics/ShapeOptimizationApplication/algorithms/algorithm_relaxed_gradient_projection.py,sha256=fOD-WxxIE6CUgeX-OoJ3aGbJ0HGOA3m4LAF5RL21Vko,30146
|
|
36
|
+
KratosMultiphysics/ShapeOptimizationApplication/algorithms/algorithm_base.py,sha256=_ob_wfceg7ERX5qy82wf2KA5SzCZbKOHZByzZJdzsy4,1694
|
|
37
|
+
KratosMultiphysics/ShapeOptimizationApplication/algorithms/algorithm_factory.py,sha256=YcckC9lvfgdo0qBNATS3Kvc2DGTAEdCa-QVYMKujcxg,3473
|
|
38
|
+
KratosMultiphysics/ShapeOptimizationApplication/algorithms/algorithm_trust_region.py,sha256=cuE8QrG7HNUJgPAe3krqAzM6DajMDZQTVaqlfJw0nhA,31404
|
|
39
|
+
KratosMultiphysics/ShapeOptimizationApplication/algorithms/algorithm_gradient_projection.py,sha256=wY4yJc66vJNC7nVvIY6AIhWR17vk1z4fH6LaM51guxg,16325
|
|
40
|
+
KratosMultiphysics/ShapeOptimizationApplication/algorithms/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
41
|
+
KratosMultiphysics/ShapeOptimizationApplication/algorithms/algorithm_penalized_projection.py,sha256=6irbx7BlkzegKD_MW3FlMJthQNgCdQC0PHeyPhdGbPU,11809
|
|
42
|
+
KratosMultiphysics/ShapeOptimizationApplication/algorithms/algorithm_shape_fraction_optimization.py,sha256=azOH5HfwmZYTzLDtcW4k0CoXOefIm-6-xO5wmk1J4KU,29713
|
|
43
|
+
KratosMultiphysics/ShapeOptimizationApplication/algorithms/algorithm_bead_optimization.py,sha256=-itmON5GPfO-4OveYzBviQvpgiidgMP_J2P63v20ZnE,21979
|
|
44
|
+
KratosMultiphysics/ShapeOptimizationApplication/algorithms/algorithm_steepest_descent.py,sha256=pMmxcGn8oMlLhq0Id6yltdWkzNiTR4gEkPItAs1ZvAs,13163
|
|
45
|
+
KratosMultiphysics/ShapeOptimizationApplication/mesh_controllers/mesh_controller_base.py,sha256=l0sAcDyRpLXzJlbGG7uYCu3IzNBjta9OLi1mFcxuUNg,994
|
|
46
|
+
KratosMultiphysics/ShapeOptimizationApplication/mesh_controllers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
47
|
+
KratosMultiphysics/ShapeOptimizationApplication/mesh_controllers/mesh_controller_basic_updating.py,sha256=Fv7Bf0waVdXxDBezHdEAwCCmAl4U7reaB1A67B8BEGY,1609
|
|
48
|
+
KratosMultiphysics/ShapeOptimizationApplication/mesh_controllers/mesh_controller_with_solver.py,sha256=9t7Ch4nGinngGnUEpky7ytHj_R4rtcusNqfmNAsVwk0,12262
|
|
49
|
+
KratosMultiphysics/ShapeOptimizationApplication/utilities/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
50
|
+
KratosMultiphysics/ShapeOptimizationApplication/utilities/custom_variable_utilities.py,sha256=zgXXHFnFGxRqV4JYDDZsg1ACObeuZjnerwCA_uFlysU,2247
|
|
51
|
+
KratosMultiphysics/ShapeOptimizationApplication/utilities/custom_timer.py,sha256=_B5VyHa-NYHNAy2GlkC3D7AONkrQlxiPwL9Cov-Bydc,1807
|
|
52
|
+
KratosMultiphysics/ShapeOptimizationApplication/utilities/custom_math.py,sha256=bTn0lCPIL43G3kbRl8LR63L-FagytxIxKQEjtNZontE,14277
|
|
53
|
+
KratosMultiphysics/ShapeOptimizationApplication/utilities/custom_sensitivity_heatmap.py,sha256=WS7Zwp_RceelYMgsTkKxV5R6chFgk7tpx8_sUOMZ0Vg,11819
|
|
54
|
+
KratosMultiphysics/ShapeOptimizationApplication/response_functions/plane_based_packaging.py,sha256=CyeCBx6EcWStVKWxQHKB7rP4PpCsaS84PsGfiGvufPs,2364
|
|
55
|
+
KratosMultiphysics/ShapeOptimizationApplication/response_functions/surface_normal_shape_change.py,sha256=Y9jr2KTGebjrF0s_xjhb56L0xwUH9uHIt9pZyq5kVy4,5308
|
|
56
|
+
KratosMultiphysics/ShapeOptimizationApplication/response_functions/packaging_response_base.py,sha256=8TOtPgJUa2JRfGzj_Fiv84d9boZT3rcgEVaIIAotudY,6244
|
|
57
|
+
KratosMultiphysics/ShapeOptimizationApplication/response_functions/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
58
|
+
KratosMultiphysics/ShapeOptimizationApplication/response_functions/airfoil_2d_responses.py,sha256=QOZBh24p3oYdkiAw3ODl2rvJdpdkUO_ts1Nqs2x-gdg,8085
|
|
59
|
+
KratosMultiphysics/ShapeOptimizationApplication/response_functions/mesh_based_packaging.py,sha256=b81rbJsbdyTkYeOM3cy_o_15YfJPUiGiL5k7IzIK4m8,3464
|
|
60
|
+
KratosMultiphysics/ShapeOptimizationApplication/response_functions/response_function_factory.py,sha256=fwGhvmGbNAqFKchUEMGckyWNyvXGya4_dtdnmqaNlkg,2202
|
|
61
|
+
KratosMultiphysics/ShapeOptimizationApplication/response_functions/face_angle.py,sha256=P3w9KTZNsxSMoFPFxeCBt3n76T7q183yYTgZ0JliW98,6177
|
|
62
|
+
KratosMultiphysics/ShapeOptimizationApplication/response_functions/total_volume.py,sha256=rYqbghaDCAQZMg_JvINRNjet1HpJy-33VbWhEbLyfuc,2030
|
|
63
|
+
KratosMultiphysics/ShapeOptimizationApplication/custom_ios/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
64
|
+
KratosMultiphysics/ShapeOptimizationApplication/custom_ios/wrl_io.py,sha256=Ap1UN-c2cmZ77MheXk9a-luQhaJP5xjZQb4RvxYuT_k,2924
|
|
65
|
+
KratosMultiphysics/ShapeOptimizationApplication/custom_ios/wrl_reader.py,sha256=ZH8I2bCv1PtWnKBrgYsf_aRQcDYp5SISfT28K3IyN4s,3596
|
|
66
|
+
kratosshapeoptimizationapplication.dylibs/libstdc++.6.dylib,sha256=lDZLIq4u6sqHdlyjTrjv8K_7Fx_3RQXY-2mxFRTDCOo,3403264
|
|
67
|
+
kratosshapeoptimizationapplication.dylibs/libKratosCore.dylib,sha256=hGkjDVH4S_5Txr7smcg_iHAPoexX50PoTHg96ihqphM,63629792
|
|
68
|
+
kratosshapeoptimizationapplication.dylibs/libgcc_s.1.1.dylib,sha256=D3xFlDs2JSc4DNp_v6MhwALp3uhoFXbEGmCA2x6nyvE,219232
|
|
69
|
+
kratosshapeoptimizationapplication.dylibs/libgomp.1.dylib,sha256=KI92xW3zsH_6Ki1IUmgpSZ7OYuVmGjvJpGPtMGtd2BM,438880
|
|
Binary file
|
|
Binary file
|
|
Binary file
|