Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[OptApp] Fixing the NLOPT algorithms #12039

Merged
merged 3 commits into from
Feb 12, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,8 @@
from KratosMultiphysics.OptimizationApplication.utilities.component_data_view import ComponentDataView
from KratosMultiphysics.OptimizationApplication.utilities.logger_utilities import DictLogger
from KratosMultiphysics.OptimizationApplication.utilities.helper_utilities import CallOnAll
from KratosMultiphysics.OptimizationApplication.utilities.logger_utilities import time_decorator



def Factory(model: Kratos.Model, parameters: Kratos.Parameters, optimization_problem: OptimizationProblem):
Expand Down Expand Up @@ -111,14 +113,13 @@ def GetMinimumBufferSize(self) -> int:
def Check(self):
pass

@time_decorator()
def Initialize(self):
self.converged = False
self.master_control.Initialize()
self.__objective.Initialize()
self.__objective.Check()
for constraint in self.__constraints:
constraint.Initialize()
constraint.Check()
self.master_control.Initialize()
CallOnAll(self.__constraints, StandardizedNLOPTConstraint.Initialize)
self.__control_field = self.master_control.GetControlField()
self.algorithm_data = ComponentDataView("algorithm", self._optimization_problem)

Expand Down Expand Up @@ -161,12 +162,14 @@ def Initialize(self):
if self.nlopt_subsidiary_optimizer is not None:
self.SetOptimizerSepcificSettings(self.nlopt_subsidiary_optimizer)

@time_decorator()
def Finalize(self):
self.__objective.Finalize()
for constraint in self.__constraints:
constraint.Finalize()
self.master_control.Finalize()

@time_decorator()
def Solve(self):
self.nlopt_optimizer.optimize(self.x0)
CallOnAll(self._optimization_problem.GetListOfProcesses("output_processes"), Kratos.OutputProcess.PrintOutput)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
"displacement_absolute_tolerance": 1e-9,
"residual_relative_tolerance": 0.0001,
"residual_absolute_tolerance": 1e-9,
"move_mesh_flag": false,
"max_iteration": 10,
"linear_solver_settings": {
"solver_type": "amgcl",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,104 +1,131 @@
{
"problem_data" : {
"problem_name" : "shell",
"parallel_type" : "OpenMP",
"start_time" : 0.0,
"end_time" : 1.0,
"echo_level" : 0
"problem_data": {
"problem_name": "shell",
"parallel_type": "OpenMP",
"echo_level": 0
},
"solver_settings" : {
"solver_type" : "static",
"echo_level" : 0,
"analysis_type" : "linear",
"model_part_name" : "shell",
"domain_size" : 3,
"time_stepping" : {
"time_step" : 1.0
"solver_settings": {
"solver_type": "static",
"echo_level": 0,
"analysis_type": "linear",
"model_part_name": "shell",
"domain_size": 3,
"time_stepping": {
"time_step": 1.0
},
"model_import_settings" : {
"input_type" : "use_input_model_part"
"model_import_settings": {
"input_type": "use_input_model_part"
},
"material_import_settings" :{
"material_import_settings": {
"materials_filename": "materials_2D.json"
},
"rotation_dofs" : true,
"linear_solver_settings" : {
"solver_type" : "amgcl",
"smoother_type":"ilu0",
"krylov_type": "gmres",
"coarsening_type": "aggregation",
"max_iteration": 200,
"provide_coordinates": false,
"gmres_krylov_space_dimension": 100,
"verbosity" : 0,
"tolerance": 1e-7,
"scaling": false,
"block_size": 1,
"use_block_matrices_if_possible" : true,
"coarse_enough" : 5000
}
"rotation_dofs": true,
"move_mesh_flag": false,
"linear_solver_settings": {
"solver_type": "amgcl",
"smoother_type": "ilu0",
"krylov_type": "gmres",
"coarsening_type": "aggregation",
"max_iteration": 200,
"provide_coordinates": false,
"gmres_krylov_space_dimension": 100,
"verbosity": 0,
"tolerance": 1e-7,
"scaling": false,
"block_size": 1,
"use_block_matrices_if_possible": true,
"coarse_enough": 5000
}
},
"processes": {
"constraints_process_list" : [{
"python_module" : "assign_vector_variable_process",
"kratos_module" : "KratosMultiphysics",
"help" : "This process fixes the selected components of a given vector variable",
"process_name" : "AssignVectorVariableProcess",
"Parameters" : {
"mesh_id" : 0,
"model_part_name" : "shell.edge_support",
"variable_name" : "DISPLACEMENT",
"value" : [0.0,0.0,0.0]
"constraints_process_list": [
{
"python_module": "assign_vector_variable_process",
"kratos_module": "KratosMultiphysics",
"help": "This process fixes the selected components of a given vector variable",
"process_name": "AssignVectorVariableProcess",
"Parameters": {
"mesh_id": 0,
"model_part_name": "shell.edge_support",
"variable_name": "DISPLACEMENT",
"value": [
0.0,
0.0,
0.0
]
}
}
}],
"loads_process_list" : [{
"python_module" : "assign_vector_by_direction_to_condition_process",
"kratos_module" : "KratosMultiphysics",
"help" : "This process fixes the selected components of a given vector variable",
"process_name" : "AssignVectorByDirectionToConditionProcess",
"Parameters" : {
"mesh_id" : 0,
"model_part_name" : "shell.surface_load",
"variable_name" : "SURFACE_LOAD",
"modulus" : 1000.0,
"direction" : [0.0,-1.0,0.0]
],
"loads_process_list": [
{
"python_module": "assign_vector_by_direction_to_condition_process",
"kratos_module": "KratosMultiphysics",
"help": "This process fixes the selected components of a given vector variable",
"process_name": "AssignVectorByDirectionToConditionProcess",
"Parameters": {
"mesh_id": 0,
"model_part_name": "shell.surface_load",
"variable_name": "SURFACE_LOAD",
"modulus": 1000.0,
"direction": [
0.0,
-1.0,
0.0
]
}
},
{
"python_module": "assign_vector_by_direction_process",
"kratos_module": "KratosMultiphysics",
"check": "DirectorVectorNonZero direction",
"Parameters": {
"model_part_name": "shell",
"variable_name": "VOLUME_ACCELERATION",
"constrained": false,
"modulus": 9.8,
"direction": [
0.0,
-1.0,
0.0
],
"interval": [
0.0,
"End"
]
}
}
},{
"python_module" : "assign_vector_by_direction_process",
"kratos_module" : "KratosMultiphysics",
"check" : "DirectorVectorNonZero direction",
"Parameters" : {
"model_part_name" : "shell",
"variable_name" : "VOLUME_ACCELERATION",
"constrained" : false,
"modulus" : 9.8,
"direction" : [0.0,-1.0,0.0],
"interval" : [0.0,"End"]
}
}]
]
},

"output_processes" : {
"vtk_output" : [{
"python_module" : "vtk_output_process",
"kratos_module" : "KratosMultiphysics",
"process_name" : "VTKOutputProcess",
"Parameters" : {
"model_part_name": "shell",
"file_format": "binary",
"output_precision": 7,
"output_control_type": "step",
"output_frequency": 1.0,
"output_sub_model_parts": false,
"folder_name": "Primal_Results",
"save_output_files_in_folder": true,
"nodal_solution_step_data_variables": ["DISPLACEMENT","REACTION","ROTATION","POINT_LOAD"],
"nodal_data_value_variables": [],
"element_data_value_variables": [],
"condition_data_value_variables": [],
"gauss_point_variables_extrapolated_to_nodes": [],
"gauss_point_variables_in_elements": ["VON_MISES_STRESS"]
"output_processes": {
"vtk_output": [
{
"python_module": "vtk_output_process",
"kratos_module": "KratosMultiphysics",
"process_name": "VTKOutputProcess",
"Parameters": {
"model_part_name": "shell",
"file_format": "binary",
"output_precision": 7,
"output_control_type": "step",
"output_frequency": 1.0,
"output_sub_model_parts": false,
"folder_name": "Primal_Results",
"save_output_files_in_folder": true,
"nodal_solution_step_data_variables": [
"DISPLACEMENT",
"REACTION",
"ROTATION",
"POINT_LOAD"
],
"nodal_data_value_variables": [],
"element_data_value_variables": [],
"condition_data_value_variables": [],
"gauss_point_variables_extrapolated_to_nodes": [],
"gauss_point_variables_in_elements": [
"VON_MISES_STRESS"
]
}
}
}]
]
}
}
}
Loading