diff --git a/kratos.gid/apps/MPM/app.json b/kratos.gid/apps/MPM/app.json index 15be6fd97..bc699c40a 100644 --- a/kratos.gid/apps/MPM/app.json +++ b/kratos.gid/apps/MPM/app.json @@ -22,7 +22,9 @@ "examples/GranularFlow.tcl", "xml/XmlController.tcl", "write/write.tcl", - "write/writeProjectParameters.tcl" + "write/writeProjectParameters.tcl", + "write/writeBody.tcl", + "write/writeGrid.tcl" ], "start_script": "::MPM::Init", "requirements": { @@ -47,7 +49,7 @@ "materials_file": "ParticleMaterials.json", "properties_location": "json", "model_part_name": "Background_Grid", - "write_mdpa_mode": "entities" + "write_mdpa_mode": "geometries" }, "main_launch_file": "../../exec/MainKratos.py", "examples": "examples/examples.xml" diff --git a/kratos.gid/apps/MPM/write/write.tcl b/kratos.gid/apps/MPM/write/write.tcl index ed6adb166..4210306c7 100644 --- a/kratos.gid/apps/MPM/write/write.tcl +++ b/kratos.gid/apps/MPM/write/write.tcl @@ -3,13 +3,12 @@ namespace eval MPM::write { Kratos::AddNamespace [namespace current] variable writeAttributes - variable ConditionsDictGroupIterators + variable ConditionsDictGroupIterators [dict create] + + variable grid_elems [list GRID2D GRID3D] } proc MPM::write::Init { } { - # Namespace variables inicialization - variable ConditionsDictGroupIterators - set ConditionsDictGroupIterators [dict create] SetAttribute parts_un [::MPM::GetUniqueName parts] SetAttribute nodal_conditions_un [::MPM:::GetUniqueName nodal_conditions] @@ -33,23 +32,7 @@ proc MPM::write::writeModelPartEvent { } { set filename [Kratos::GetModelName] ## Grid MPDA ## - # Headers - write::writeModelPartData - write::WriteString "Begin Properties 0" - write::WriteString "End Properties" - - # Nodal coordinates - set list_of_groups [concat [MPM::write::GetPartsGroups grid] [MPM::write::GetConditionsGroups] [MPM::write::GetNodalConditionsGroups]] - write::writeNodalCoordinatesOnGroups $list_of_groups - - # Grid element connectivities - writeGridConnectivities - - # Write conditions - writeConditions - - # Write Submodelparts - writeSubmodelparts grid + MPM::write::WriteGridMDPA write::CloseFile write::RenameFileInModel "$filename.mdpa" "${filename}_Grid.mdpa" @@ -58,35 +41,30 @@ proc MPM::write::writeModelPartEvent { } { write::OpenFile "${filename}_Body.mdpa" # Headers - write::writeModelPartData - write::WriteString "Begin Properties 0" - write::WriteString "End Properties" - - # Nodal coordinates - writeBodyNodalCoordinates - - # Body element connectivities - writeBodyElementConnectivities - - # Write Submodelparts - writeSubmodelparts particles + MPM::write::WriteBodyMDPA write::CloseFile } -proc MPM::write::GetPartsGroups { part_type {what "name"} } { +proc MPM::write::GetPartsGroupsNames { part_type } { + set groups [MPM::write::GetPartsGroups $part_type] + set result [list ] + foreach group $groups { + lappend result [$group @n] + } + return $result +} + +proc MPM::write::GetPartsGroups { part_type } { + variable grid_elems set xp1 "[spdAux::getRoute [GetAttribute parts_un]]/condition/group" set body_groups [list ] - set grid_elems [list GRID2D GRID3D] + foreach gNode [[customlib::GetBaseRoot] selectNodes $xp1] { set elem [write::getValueByNode [$gNode selectNodes ".//value\[@n='Element'\]"] ] if {($part_type eq "grid" && $elem in $grid_elems) || ($part_type ne "grid" && $elem ni $grid_elems)} { - if {$what eq "name"} { - lappend body_groups [$gNode @n] - } { - lappend body_groups $gNode - } + lappend body_groups $gNode } } return $body_groups @@ -94,7 +72,7 @@ proc MPM::write::GetPartsGroups { part_type {what "name"} } { proc ::MPM::write::GetUsedElements { {get "Objects"} } { set lista [list ] - foreach gNode [MPM::write::GetPartsGroups Body node] { + foreach gNode [MPM::write::GetPartsGroups Body] { set elem_name [write::getValueByNode [$gNode selectNodes ".//value\[@n='Element']"] ] set e [Model::getElement $elem_name] if {$get eq "Name"} { set e [$e getName] } @@ -103,92 +81,16 @@ proc ::MPM::write::GetUsedElements { {get "Objects"} } { return $lista } -proc MPM::write::writeBodyNodalCoordinates { } { - write::writeNodalCoordinatesOnGroups [MPM::write::GetPartsGroups Body] -} - -proc MPM::write::writeBodyElementConnectivities { } { - foreach gNode [MPM::write::GetPartsGroups Body node] { - set elem [write::getValueByNode [$gNode selectNodes ".//value\[@n='Element'\]"] ] - if {$elem ni [list GRID2D GRID3D]} { - write::writeGroupElementConnectivities $gNode $elem - } - } -} - -proc MPM::write::writeGridConnectivities { } { - foreach gNode [MPM::write::GetPartsGroups grid node] { - set elem [write::getValueByNode [$gNode selectNodes ".//value\[@n='Element'\]"] ] - if {$elem in [list GRID2D GRID3D]} { - write::writeGroupElementConnectivities $gNode $elem - } - } -} - -proc MPM::write::writeConditions { } { - variable ConditionsDictGroupIterators - set ConditionsDictGroupIterators [::write::writeConditions [GetAttribute conditions_un] ] -} - proc MPM::write::writeSubmodelparts { type } { - - set grid_elements [list GRID2D GRID3D] - set xp1 "[spdAux::getRoute [GetAttribute parts_un]]/condition/group" - foreach gNode [MPM::write::GetPartsGroups $type node] { - set elem [write::getValueByNode [$gNode selectNodes ".//value\[@n='Element'\]"] ] - set part_name [get_domnode_attribute [$gNode parent] n] - set group_name [get_domnode_attribute $gNode n] - write::writeGroupSubModelPart $part_name $group_name "Elements" - } - if {$type eq "grid"} { - # Write the boundary conditions submodelpart - write::writeNodalConditions [GetAttribute nodal_conditions_un] - - # A Condition y a meshes-> salvo lo que no tenga topologia - writeLoads + foreach group [MPM::write::GetPartsGroupsNames $type] { + write::writeGroupSubModelPartAsGeometry $group } } proc MPM::write::GetConditionsGroups { } { - set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition/group" - set condition_groups [list ] - foreach gNode [[customlib::GetBaseRoot] selectNodes $xp1] { - set group_name [get_domnode_attribute $gNode n] - set good_group_name [write::GetWriteGroupName $group_name] - if {$good_group_name ne $condition_groups} { - lappend condition_groups $good_group_name - } - } - return $condition_groups -} - -proc MPM::write::GetNodalConditionsGroups { } { - set xp1 "[spdAux::getRoute [GetAttribute nodal_conditions_un]]/condition/group" - set condition_groups [list ] - foreach gNode [[customlib::GetBaseRoot] selectNodes $xp1] { - set group_name [get_domnode_attribute $gNode n] - set good_group_name [write::GetWriteGroupName $group_name] - if {$good_group_name ne $condition_groups} { - lappend condition_groups $good_group_name - } - } - return $condition_groups -} -proc MPM::write::writeLoads { } { - variable ConditionsDictGroupIterators - set root [customlib::GetBaseRoot] - set xp1 "[spdAux::getRoute [GetAttribute conditions_un]]/condition/group" - foreach group [$root selectNodes $xp1] { - set groupid [$group @n] - set groupid [write::GetWriteGroupName $groupid] - #W "Writing mesh of Load $groupid" - if {$groupid in [dict keys $ConditionsDictGroupIterators]} { - ::write::writeGroupSubModelPart [[$group parent] @n] $groupid "Conditions" [dict get $ConditionsDictGroupIterators $groupid] - } else { - ::write::writeGroupSubModelPart [[$group parent] @n] $groupid "nodal" - } - } + set groups [::write::GetGroupsNamesAssignedIn [GetAttribute conditions_un]] + return $groups } proc MPM::write::writeCustomFilesEvent { } { diff --git a/kratos.gid/apps/MPM/write/writeBody.tcl b/kratos.gid/apps/MPM/write/writeBody.tcl new file mode 100644 index 000000000..a8ed633bc --- /dev/null +++ b/kratos.gid/apps/MPM/write/writeBody.tcl @@ -0,0 +1,21 @@ +proc MPM::write::WriteBodyMDPA { } { + write::writeModelPartData + write::WriteString "Begin Properties 0" + write::WriteString "End Properties" + + # Nodal coordinates + ::write::writeNodalCoordinatesOnGroups [MPM::write::GetPartsGroupsNames Body] + + # Body element connectivities + ::write::writeGeometryConnectivities [MPM::write::GetPartsGroups body] + + # Write Submodelparts + writeSubmodelparts particles +} + +proc MPM::write::writeConditionsSubmodelparts { } { + foreach group [MPM::write::GetConditionsGroups] { + write::writeGroupSubModelPartAsGeometry $group + } +} + diff --git a/kratos.gid/apps/MPM/write/writeGrid.tcl b/kratos.gid/apps/MPM/write/writeGrid.tcl new file mode 100644 index 000000000..7b81993ad --- /dev/null +++ b/kratos.gid/apps/MPM/write/writeGrid.tcl @@ -0,0 +1,39 @@ +proc MPM::write::WriteGridMDPA { } { + # Headers + ::write::writeModelPartData + ::write::WriteString "Begin Properties 0" + ::write::WriteString "End Properties" + + # Nodal coordinates + set list_of_groups [concat [MPM::write::GetPartsGroupsNames grid] [MPM::write::GetConditionsGroups] [MPM::write::GetNodalConditionsGroups]] + ::write::writeNodalCoordinatesOnGroups $list_of_groups + + # Grid element connectivities + ::write::writeGeometryConnectivities [MPM::write::GetPartsGroups grid] + + # Write conditions + ::write::writeGeometryConnectivities [::write::GetGroupsAssignedIn [GetAttribute conditions_un]] + + # Write Submodelparts + writeSubmodelparts grid + writeConditionsSubmodelparts + +} + +proc MPM::write::writeConditionsSubmodelparts { } { + foreach group [MPM::write::GetConditionsGroups] { + write::writeGroupSubModelPartAsGeometry $group + } + foreach group [MPM::write::GetNodalConditionsGroups] { + write::writeGroupSubModelPartAsGeometry $group 0 + } +} + +proc MPM::write::GetNodalConditionsGroups { } { + set groups [::write::GetGroupsNamesAssignedIn [GetAttribute nodal_conditions_un]] + return $groups +} +proc MPM::write::GetConditionsGroups { } { + set groups [::write::GetGroupsNamesAssignedIn [GetAttribute conditions_un]] + return $groups +} \ No newline at end of file diff --git a/kratos.gid/apps/MPM/write/writeProjectParameters.tcl b/kratos.gid/apps/MPM/write/writeProjectParameters.tcl index 685e9f779..c50d643f3 100644 --- a/kratos.gid/apps/MPM/write/writeProjectParameters.tcl +++ b/kratos.gid/apps/MPM/write/writeProjectParameters.tcl @@ -25,16 +25,7 @@ proc ::MPM::write::getParametersDict { } { dict set project_parameters_dict solver_settings model_part_name MPM_Material # create grid_import_settings - set grid_import_settings_dict [dict get $project_parameters_dict solver_settings model_import_settings] - dict append grid_import_settings_dict input_filename _Grid - dict set project_parameters_dict solver_settings grid_model_import_settings $grid_import_settings_dict - - # add _Body to model_import_settings - set model_import_settings_dict [dict get $project_parameters_dict solver_settings model_import_settings] - dict append model_import_settings_dict input_filename _Body - if {[write::isBooleanTrue [write::getValue EnableRestartOutput]]} {dict set model_import_settings_dict restart_load_file_label " "} - dict set project_parameters_dict solver_settings model_import_settings $model_import_settings_dict - + dict set project_parameters_dict solver_settings grid_model_import_settings input_type use_input_model_part # materials file dict set project_parameters_dict solver_settings material_import_settings materials_filename [GetAttribute materials_file] @@ -51,9 +42,9 @@ proc ::MPM::write::getParametersDict { } { dict set project_parameters_dict solver_settings pressure_dofs true set active_stab [write::getValue STStratParams ActivateStabilization] if {$active_stab eq "Off"} { - dict set project_parameters_dict solver_settings stabilization "none" + dict set project_parameters_dict solver_settings stabilization "none" } else { - dict set project_parameters_dict solver_settings stabilization "ppp" + dict set project_parameters_dict solver_settings stabilization "ppp" } dict unset project_parameters_dict solver_settings ActivateStabilization break @@ -110,7 +101,7 @@ proc ::MPM::write::getParametersDict { } { dict set gravity_parameters_dict direction [list [expr $dx] [expr $dy] [expr $dz]] dict set gravity_dict Parameters $gravity_parameters_dict dict set project_parameters_dict processes gravity [list $gravity_dict] - } + } # Output processes dict set project_parameters_dict output_processes [MPM::write::GetOutputProcessesList] @@ -124,6 +115,8 @@ proc ::MPM::write::getParametersDict { } { # REMOVE use_old_stiffness_in_first_iteration dict unset project_parameters_dict solver_settings use_old_stiffness_in_first_iteration + dict set project_parameters_dict modelers [write::getModelersParametersList [dict get $project_parameters_dict modelers]] + return $project_parameters_dict } @@ -136,97 +129,97 @@ proc write::GetResultsList { un {cnd ""} } { proc ::MPM::write::GetOutputProcessesList { } { - set output_process [dict create] + set output_process [dict create] - set project_parameters_dict [Structural::write::getParametersDict] - # Change the model part name - dict set project_parameters_dict solver_settings model_part_name MPM_Material + set project_parameters_dict [Structural::write::getParametersDict] + # Change the model part name + dict set project_parameters_dict solver_settings model_part_name MPM_Material - # create grid_import_settings - set grid_import_settings_dict [dict get $project_parameters_dict solver_settings model_import_settings] - dict append grid_import_settings_dict input_filename _Grid - dict set project_parameters_dict solver_settings grid_model_import_settings $grid_import_settings_dict + # create grid_import_settings + set grid_import_settings_dict [dict get $project_parameters_dict solver_settings model_import_settings] + dict append grid_import_settings_dict input_filename _Grid + dict set project_parameters_dict solver_settings grid_model_import_settings $grid_import_settings_dict - # add _Body to model_import_settings - set model_import_settings_dict [dict get $project_parameters_dict solver_settings model_import_settings] - dict append model_import_settings_dict input_filename _Body - dict set project_parameters_dict solver_settings model_import_settings $model_import_settings_dict + # add _Body to model_import_settings + set model_import_settings_dict [dict get $project_parameters_dict solver_settings model_import_settings] + dict append model_import_settings_dict input_filename _Body + dict set project_parameters_dict solver_settings model_import_settings $model_import_settings_dict - set need_gid [write::getValue EnableGiDOutput] - if {[write::isBooleanTrue $need_gid]} { + set need_gid [write::getValue EnableGiDOutput] + if {[write::isBooleanTrue $need_gid]} { - set body_output_configuration_dict [lindex [dict get $project_parameters_dict output_processes gid_output] 0] - set grid_output_configuration_dict [lindex [dict get $project_parameters_dict output_processes gid_output] 0] - dict set body_output_configuration_dict python_module mpm_gid_output_process - dict set body_output_configuration_dict kratos_module KratosMultiphysics.MPMApplication - dict set body_output_configuration_dict process_name MPMGiDOutputProcess - dict set body_output_configuration_dict Parameters model_part_name MPM_Material - dict set grid_output_configuration_dict Parameters model_part_name Background_Grid - dict set body_output_configuration_dict Parameters output_name [dict get $project_parameters_dict solver_settings model_import_settings input_filename] - dict set grid_output_configuration_dict Parameters output_name [dict get $project_parameters_dict solver_settings grid_model_import_settings input_filename] - dict unset body_output_configuration_dict Parameters postprocess_parameters result_file_configuration nodal_results + set body_output_configuration_dict [lindex [dict get $project_parameters_dict output_processes gid_output] 0] + set grid_output_configuration_dict [lindex [dict get $project_parameters_dict output_processes gid_output] 0] + dict set body_output_configuration_dict python_module mpm_gid_output_process + dict set body_output_configuration_dict kratos_module KratosMultiphysics.MPMApplication + dict set body_output_configuration_dict process_name MPMGiDOutputProcess + dict set body_output_configuration_dict Parameters model_part_name MPM_Material + dict set grid_output_configuration_dict Parameters model_part_name Background_Grid + dict set body_output_configuration_dict Parameters output_name [dict get $project_parameters_dict solver_settings model_import_settings input_filename] + dict set grid_output_configuration_dict Parameters output_name [dict get $project_parameters_dict solver_settings grid_model_import_settings input_filename] + dict unset body_output_configuration_dict Parameters postprocess_parameters result_file_configuration nodal_results - dict unset grid_output_configuration_dict Parameters postprocess_parameters result_file_configuration gauss_point_results + dict unset grid_output_configuration_dict Parameters postprocess_parameters result_file_configuration gauss_point_results - dict set project_parameters_dict output_processes body_output_process [list $body_output_configuration_dict] - dict set project_parameters_dict output_processes grid_output_process [list $grid_output_configuration_dict] - dict unset project_parameters_dict output_processes gid_output + dict set project_parameters_dict output_processes body_output_process [list $body_output_configuration_dict] + dict set project_parameters_dict output_processes grid_output_process [list $grid_output_configuration_dict] + dict unset project_parameters_dict output_processes gid_output - # Append the fluid and solid output processes to the output processes list - lappend gid_output_processes_list $body_output_configuration_dict - lappend gid_output_processes_list $grid_output_configuration_dict - dict set output_process gid_output_processes $gid_output_processes_list + # Append the fluid and solid output processes to the output processes list + lappend gid_output_processes_list $body_output_configuration_dict + lappend gid_output_processes_list $grid_output_configuration_dict + dict set output_process gid_output_processes $gid_output_processes_list - } + } - set need_vtk [write::getValue EnableVtkOutput] - if {[write::isBooleanTrue $need_vtk]} { - #set vtk_options_xpath "[spdAux::getRoute $results_UN]/container\[@n='VtkOutput'\]/container\[@n='VtkOptions'\]" + set need_vtk [write::getValue EnableVtkOutput] + if {[write::isBooleanTrue $need_vtk]} { + #set vtk_options_xpath "[spdAux::getRoute $results_UN]/container\[@n='VtkOutput'\]/container\[@n='VtkOptions'\]" - set body_output_configuration_dict [lindex [dict get $project_parameters_dict output_processes vtk_output] 0] - set grid_output_configuration_dict [lindex [dict get $project_parameters_dict output_processes vtk_output] 0] + set body_output_configuration_dict [lindex [dict get $project_parameters_dict output_processes vtk_output] 0] + set grid_output_configuration_dict [lindex [dict get $project_parameters_dict output_processes vtk_output] 0] - dict set body_output_configuration_dict python_module mpm_vtk_output_process - dict set body_output_configuration_dict kratos_module KratosMultiphysics.MPMApplication - dict set body_output_configuration_dict process_name MPMVtkOutputProcess - dict set body_output_configuration_dict Parameters model_part_name MPM_Material - dict unset body_output_configuration_dict Parameters nodal_data_value_variables - dict unset body_output_configuration_dict Parameters element_data_value_variables - dict unset body_output_configuration_dict Parameters condition_data_value_variables - dict unset body_output_configuration_dict Parameters nodal_solution_step_data_variables - #dict unset body_output_configuration_dict Parameters output_interval - #set outputCT [getValueByXPath $vtk_options_xpath OutputControlType] - #dict set resultDict output_control_type $outputCT - #if {$outputCT eq "time"} {set frequency [getValueByXPath $vtk_options_xpath OutputDeltaTime]} {set frequency [getValueByXPath $vtk_options_xpath OutputDeltaStep]} - dict set body_output_configuration_dict Parameters output_path "vtk_output_Body" - dict unset body_output_configuration_dict Parameters gauss_point_variables_extrapolated_to_nodes - dict set body_output_configuration_dict Parameters gauss_point_variables_in_elements [write::GetResultsList ElementResults] + dict set body_output_configuration_dict python_module mpm_vtk_output_process + dict set body_output_configuration_dict kratos_module KratosMultiphysics.MPMApplication + dict set body_output_configuration_dict process_name MPMVtkOutputProcess + dict set body_output_configuration_dict Parameters model_part_name MPM_Material + dict unset body_output_configuration_dict Parameters nodal_data_value_variables + dict unset body_output_configuration_dict Parameters element_data_value_variables + dict unset body_output_configuration_dict Parameters condition_data_value_variables + dict unset body_output_configuration_dict Parameters nodal_solution_step_data_variables + #dict unset body_output_configuration_dict Parameters output_interval + #set outputCT [getValueByXPath $vtk_options_xpath OutputControlType] + #dict set resultDict output_control_type $outputCT + #if {$outputCT eq "time"} {set frequency [getValueByXPath $vtk_options_xpath OutputDeltaTime]} {set frequency [getValueByXPath $vtk_options_xpath OutputDeltaStep]} + dict set body_output_configuration_dict Parameters output_path "vtk_output_Body" + dict unset body_output_configuration_dict Parameters gauss_point_variables_extrapolated_to_nodes + dict set body_output_configuration_dict Parameters gauss_point_variables_in_elements [write::GetResultsList ElementResults] - dict set grid_output_configuration_dict Parameters model_part_name Background_Grid - dict unset grid_output_configuration_dict Parameters gauss_point_variables_extrapolated_to_nodes - dict unset grid_output_configuration_dict Parameters nodal_data_value_variables - dict unset grid_output_configuration_dict Parameters element_data_value_variables - dict unset grid_output_configuration_dict Parameters condition_data_value_variables + dict set grid_output_configuration_dict Parameters model_part_name Background_Grid + dict unset grid_output_configuration_dict Parameters gauss_point_variables_extrapolated_to_nodes + dict unset grid_output_configuration_dict Parameters nodal_data_value_variables + dict unset grid_output_configuration_dict Parameters element_data_value_variables + dict unset grid_output_configuration_dict Parameters condition_data_value_variables - dict set project_parameters_dict output_processes body_output_process [list $body_output_configuration_dict] - #dict set project_parameters_dict output_processes grid_output_process [list $grid_output_configuration_dict] - dict unset project_parameters_dict output_processes vtk_output - dict unset grid_output_configuration_dict Parameters gauss_point_results + dict set project_parameters_dict output_processes body_output_process [list $body_output_configuration_dict] + #dict set project_parameters_dict output_processes grid_output_process [list $grid_output_configuration_dict] + dict unset project_parameters_dict output_processes vtk_output + dict unset grid_output_configuration_dict Parameters gauss_point_results - # Append the fluid and solid output processes to the output processes list - lappend vtk_output_processes_list $grid_output_configuration_dict - lappend vtk_output_processes_list $body_output_configuration_dict - dict set output_process vtk_output_processes $vtk_output_processes_list + # Append the fluid and solid output processes to the output processes list + lappend vtk_output_processes_list $grid_output_configuration_dict + lappend vtk_output_processes_list $body_output_configuration_dict + dict set output_process vtk_output_processes $vtk_output_processes_list - } + } - # Restart + # Restart set need_restart [write::getValue EnableRestartOutput] if {[write::isBooleanTrue $need_restart]} { set restart_dict [dict create ] @@ -242,11 +235,58 @@ proc ::MPM::write::GetOutputProcessesList { } { dict set restart_dict Parameters $restart_parameters_dict dict set output_process save_restart_process [list $restart_dict] - } + } return $output_process } +proc ::MPM::write::getModelersParametersList { old_modelers } { + + set body_groups [MPM::write::GetPartsGroupsNames Body] + set corrected_names [list ] + foreach g $body_groups { + lappend corrected_names [write::transformGroupName $g] + } + set body_groups $corrected_names + set lista [list ] + foreach modeler $old_modelers { + set new_modeler [dict create] + # if [dict get $modeler name] contains "ImportMDPAModeler" + set name [dict get $modeler name] + if {[string match "*ImportMDPAModeler" $name]} { + dict set new_modeler name $name + dict set new_modeler parameters input_filename [Kratos::GetModelName]_Grid + dict set new_modeler parameters model_part_name "Background_Grid" + lappend lista $new_modeler + + dict set new_modeler name $name + dict set new_modeler parameters input_filename [Kratos::GetModelName]_Body + dict set new_modeler parameters model_part_name "Initial_MPM_Material" + lappend lista $new_modeler + } elseif {[string match "*CreateEntitiesFromGeometriesModeler" $name]} { + dict set new_modeler name $name + set elements_list [list ] + foreach element [dict get $modeler parameters elements_list] { + set new_element [dict create] + set model_part_name [dict get $element model_part_name] + set group_name [lindex [split $model_part_name "."] end] + set good_name [write::transformGroupName $group_name] + if {$good_name in $body_groups} { + dict set new_element model_part_name "Initial_MPM_Material.$good_name" + } else { + dict set new_element model_part_name $model_part_name + } + dict set new_element element_name [dict get $element element_name] + lappend elements_list $new_element + } + + dict set new_modeler parameters elements_list $elements_list + dict set new_modeler parameters conditions_list [dict get $modeler parameters conditions_list] + lappend lista $new_modeler + } + } + return $lista +} proc ::MPM::write::writeParametersEvent { } { write::WriteJSON [getParametersDict] diff --git a/kratos.gid/scripts/Writing/WriteConditions.tcl b/kratos.gid/scripts/Writing/WriteConditions.tcl index a8cefbc62..e3409edf2 100644 --- a/kratos.gid/scripts/Writing/WriteConditions.tcl +++ b/kratos.gid/scripts/Writing/WriteConditions.tcl @@ -2,14 +2,7 @@ proc ::write::writeConditions { baseUN {iter 0} {domNode ""}} { set dictGroupsIterators [dict create] - set root [customlib::GetBaseRoot] - - set xp1 "[spdAux::getRoute $baseUN $domNode]/condition/group" - set groupNodes [$root selectNodes $xp1] - if {[llength $groupNodes] < 1} { - set xp1 "[spdAux::getRoute $baseUN $domNode]/group" - set groupNodes [$root selectNodes $xp1] - } + set groupNodes [::write::GetGroupsAssignedIn $baseUN $domNode] foreach groupNode $groupNodes { set condid [[$groupNode parent] @n] set groupid [get_domnode_attribute $groupNode n] @@ -24,6 +17,31 @@ proc ::write::writeConditions { baseUN {iter 0} {domNode ""}} { return $dictGroupsIterators } +proc ::write::GetGroupsAssignedIn {baseUN {domNode ""}} { + + set root [customlib::GetBaseRoot] + + set xp1 "[spdAux::getRoute $baseUN $domNode]/condition/group" + set groupNodes [$root selectNodes $xp1] + if {[llength $groupNodes] < 1} { + set xp1 "[spdAux::getRoute $baseUN $domNode]/group" + set groupNodes [$root selectNodes $xp1] + } + return $groupNodes +} + +proc ::write::GetGroupsNamesAssignedIn {baseUN {domNode ""}} { + set groups [list ] + foreach gNode [::write::GetGroupsAssignedIn $baseUN $domNode] { + set group_name [get_domnode_attribute $gNode n] + set good_group_name [write::GetWriteGroupName $group_name] + if {$good_group_name ne $groups} { + lappend groups $good_group_name + } + } + return $groups +} + proc ::write::writeGroupNodeCondition {dictGroupsIterators groupNode condid iter} { set groupid [get_domnode_attribute $groupNode n] set groupid [GetWriteGroupName $groupid]